Я использую tdidf vectorizer
в sci-kit learn
, чтобы вычислить значения td-idf для обзоров разных фильмов. Я успешно внедрил код, но теперь пытаюсь его усовершенствовать, чтобы оптимизировать вывод. При этом я хотел бы включить в свой вывод CSV
информацию об исходном movie
или документе, к которому относится каждый термин.
Чтобы решить эту проблему, я уже посмотрел здесь и здесь для вдохновения без каких-либо успехов.
Для этого я пытаюсь восстановить идентификатор документа или идентификатор строки в моей плотной матрице td-idf
. Очень важно, чтобы я знал, к какому документу относятся термины, которые я оцениваю.
В настоящее время я пробовал
counter = 0
corpus = []
key = {}
for id, movie in sorted(movies.iteritems(), key=lambda t: int(t[0])):
corpus.append(movie)
key[id] = counter
counter+=1
tf = TfidfVectorizer(analyzer='word', ngram_range=(1,1), min_df = 0)
tfidf_matrix = tf.fit_transform(corpus)
feature_names = tf.get_feature_names()
def get_doc_row(docid):
rowid = key[docid]
row = tf[rowid,:]
return row
при построении моего вывода следующим образом я не уверен, как связать row
с word
, чтобы иметь правильный идентификатор для movie
в моем CSV
:
with open("output.csv", "w") as file:
writer = csv.writer(file, delimiter=",")
writer.writerow(["Col1", "Col2", "Col3", "Col4"])
word_list = "words.txt"
word_dict = {}
with open(word_list) as f:
for line in f:
depurated_line = line.rstrip()
(key, val) = depurated_line.split("\t")
word_dict[key] = val
doc_id = 0
for doc in tfidf_matrix.todense():
word_id = 0
for score in doc.tolist()[0]:
if score > 0:
word = feature_names[word_id].encode("utf-8")
wordPosish = row(word)
print wordPosish
if word in word_dict:
scoreWeight = score * 100
writer.writerow([doc_id+1, word.decode("utf-8"), scoreWeight, word_dict[word]])
word_id +=1
doc_id +=1
В настоящее время порядок doc_id
, который у меня есть, не соответствует порядку ввода документов в систему, поэтому важно, чтобы я нашел способ как-то восстановить эту информацию, чтобы включить ее в вывод.
Есть ли конкретное место, куда я должен включить row
, определенное выше, чтобы восстановить конкретное doc
, к которому изначально относилось это слово?