2015-12-24 9 views
7

użyłem sklean obliczania wartości TFIDF terminów w dokumentach za pomocą polecenia jakosklearn: TFIDF Transformers: Jak uzyskać wartości tfidf danego słowa w dokumencie

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 jest scipy rzadki macierzy kształtu

X_train_tf.shape 

ma wyjście jako (2257, 35788). Jak mogę uzyskać TF-IDF dla słów w pertikularnym dokumencie? Dokładniej, jak zdobyć słowa o maksymalnych wartościach TF-IDF w danym dokumencie?

Odpowiedz

18

Można użyć TfidfVectorizer z 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) 

Powyższy tfidf_matix ma wartości tfidf wszystkich dokumentów znajdujących się w korpusie. To jest duża rzadka matryca. Teraz,

feature_names = tf.get_feature_names() 

to daje listę wszystkich tokenów lub n-gramów lub słów. Dla pierwszego dokumentu w swoim korpusie,

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

Pozwala wydrukować je,

for w, s in [(feature_names[i], s) for (i, s) in tfidf_scores]: 
    print w, s 
Powiązane problemy