Что я хочу сделать, так это просмотреть мою базу данных искать каждый документ на наличие определенных перечисленных терминов — некоторые из которых я хотел бы, если необходимо, быть биграммой и триграммой. Если условия найдутся, я представлю индекс документа и бла-бла-бла.
Я знаю, что NLTK предлагает вызов nltk.bigrams(), но так и не реализовав его, я не могу заставить его работать, а даже если бы и мог, я понятия не имею, как обеспечить правильное использование. Я надеюсь, что кто-то на SO может помочь.
Вот упрощенная версия того, как мой код выглядит сейчас:
word_list = ['**live music'**, 'classical', 'local band', 'new album', 'punk
rock','pop music', 'rap', 'blues', 'electronic','original compositions', 'musical',
'russian music', 'music festival', 'start', '**rap battle**', 'country music', 'rapper
live', 'rap duo', 'r&b', 'live', 'music', 'bands', 'call', 'ska', 'electro', '**bluegrass
band**', 'reggae', 'play','latin','quintet', 'jazz', 'the piano', 'band', 'techno',
'facebook', 'reggae music', 'tribute band', 'must', 'backup band','country rock',
'last', 'rap live', 'country', 'concert series', 'metal', 'the depot', 'big band', 'hip
hop', 'rock', 'usually', 'gospel', '**upcoming release**']
idx_list = []
##initialize db cursor:
db_conn = crawler_library.connect_to_db("events")
cursor = db_conn.cursor()
##make query:
query = "SELECT event_title,description,extra_info,venue_name FROM events WHERE
events.idx in" + str(tuple(category_list)) #this will return *all* docs from this database.
#execute the query and catch any errors that show up and print them so I am not flying
blind
try:
cursor.execute(query)
except MySQLdb.Error, e:
print("MySQL Error [%d]: %s") % (e.args[0], e.args[1])
crawler_library.close_db_connection(db_conn)
#loop through all results in the query set, one row at-a-time
documents = []
if cursor.rowcount > 0: #don't bother doing anything if we don't get anything from the
database
data = cursor.fetchall()
for row in data:
temp_string = nltk.clean_html(str(row[0]).strip(string.punctuation).lower()+"
"+str(row[1]).strip(string.punctuation).lower() \
+" "+str(row[2]).strip(string.punctuation).lower() +"
"+str(row[3]).strip(string.punctuation)).lower().split()
fin_doc = ""
for word in temp_string:
if word not in stopwords and len(word) >= 3:
fin_doc += " " + word.strip(string.punctuation)
documents.append(fin_doc)
Таким образом, как я надеюсь, это ясно из кода, у меня есть список терминов, которые я ищу (word_list), некоторые из которых являются биграммами (см. выделено), я запрашиваю нашу базу данных и документы (данные), которые он возвращает (для строки в данных), я очищаю каждый и создаю новый список (documents = []). Я хотел бы искать каждый документ в моем списке документов, чтобы определить, есть ли в нем термин из моего списка слов (включая биграммы). Я надеюсь, что это ясно и может быть легко решено.
Мой единственный вопрос заключается в том, как использовать биграмму NLTK, чтобы определить, находятся ли какие-либо биграммы в моем списке слов в моем списке документов. Может кто-нибудь объяснить это? Заранее спасибо.