python - tfidftransformer - tf-idf características pesos utilizando sklearn.feature_extraction.text.TfidfVectorizer
tf idf python (2)
esta página: http://scikit-learn.org/stable/modules/feature_extraction.html menciona:
Como tf – idf se usa con mucha frecuencia para las funciones de texto, también hay otra clase llamada TfidfVectorizer que combina todas las opciones de CountVectorizer y TfidfTransformer en un solo modelo.
Luego seguí el código y uso fit_transform () en mi corpus. ¿Cómo obtener el peso de cada característica calculada por fit_transform ()?
Lo intenté:
In [39]: vectorizer.idf_
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-39-5475eefe04c0> in <module>()
----> 1 vectorizer.idf_
AttributeError: ''TfidfVectorizer'' object has no attribute ''idf_''
pero falta este atributo.
Gracias
Desde la versión 0.15, la puntuación tf-idf de cada característica se puede recuperar a través del atributo idf_
del objeto TfidfVectorizer
:
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = ["This is very strange",
"This is very nice"]
vectorizer = TfidfVectorizer(min_df=1)
X = vectorizer.fit_transform(corpus)
idf = vectorizer.idf_
print dict(zip(vectorizer.get_feature_names(), idf))
Salida:
{u''is'': 1.0,
u''nice'': 1.4054651081081644,
u''strange'': 1.4054651081081644,
u''this'': 1.0,
u''very'': 1.0}
Como se discutió en los comentarios, antes de la versión 0.15, una solución alternativa es acceder al atributo idf_
través del supuestamente oculto _tfidf
(una instancia de TfidfTransformer
) del vectorizador:
idf = vectorizer._tfidf.idf_
print dict(zip(vectorizer.get_feature_names(), idf))
Lo que debería dar la misma salida que el anterior.
Vea también this sobre cómo obtener los valores TF-IDF de todos los documentos:
feature_names = tf.get_feature_names()
doc = 0
feature_index = X[doc,:].nonzero()[1]
tfidf_scores = zip(feature_index, [X[doc, x] for x in feature_index])
for w, s in [(feature_names[i], s) for (i, s) in tfidf_scores]:
print w, s
this 0.448320873199
is 0.448320873199
very 0.448320873199
strange 0.630099344518
#and for doc=1
this 0.448320873199
is 0.448320873199
very 0.448320873199
nice 0.630099344518
Creo que los resultados están normalizados por documento:
>>> 0.448320873199 2 + 0.448320873199 2 + 0.448320873199 2 + 0.630099344518 2 0.999999999999754848