Подтвердить что ты не робот

Sklearn: TFIDF Transformer: Как получить значения tf-idf данных слов в документе

Я использовал sklearn для вычисления значений TFIDF (Term частоты, обратной частоты документов) для документов, используя команду как:

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(documents)
from sklearn.feature_extraction.text import TfidfTransformer
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)

X_train_tf - это матрица scipy.sparse формы (2257, 35788).

Как я могу получить TF-IDF для слов в определенном документе? Более конкретно, как получить слова с максимальными значениями TF-IDF в данном документе?

4b9b3361

Ответ 1

Вы можете использовать TfidfVectorizer из sklean

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from scipy.sparse.csr import csr_matrix #need this if you want to save tfidf_matrix

tf = TfidfVectorizer(input='filename', analyzer='word', ngram_range=(1,6),
                     min_df = 0, stop_words = 'english', sublinear_tf=True)
tfidf_matrix =  tf.fit_transform(corpus)

Вышеупомянутый tfidf_matix имеет значения TF-IDF всех документов в корпусе. Это большая разреженная матрица. Теперь,

feature_names = tf.get_feature_names()

это дает вам список всех токенов или n-граммов или слов. Для первого документа в вашем корпусе

doc = 0
feature_index = tfidf_matrix[doc,:].nonzero()[1]
tfidf_scores = zip(feature_index, [tfidf_matrix[doc, x] for x in feature_index])

Позволяет распечатать их,

for w, s in [(feature_names[i], s) for (i, s) in tfidf_scores]:
  print w, s

Ответ 2

Вот еще одно более простое решение в Python 3 с библиотекой панд

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

vect = TfidfVectorizer()
tfidf_matrix = vect.fit_transform(documents)
df = pd.DataFrame(tfidf_matrix.toarray(), columns = vect.get_feature_names())
print(df)