cette page: http://scikit-learn.org/stable/modules/feature_extraction.html mentionne:
Comme tf – idf est très souvent utilisé pour les fonctionnalités de texte, il existe également une autre classe appelée TfidfVectorizer qui combine toutes les options de CountVectorizer et TfidfTransformer dans un seul modèle.
puis j'ai suivi le code et utilisé fit_transform () sur mon corpus. Comment obtenir le poids de chaque fonctionnalité calculé par fit_transform ()?
J'ai essayé:
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_'
mais cet attribut est manquant.
Merci
Depuis la version 0.15, le score tf-idf de chaque fonctionnalité peut être récupéré via l'attribut idf_
de l'objet 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))
Sortie:
{u'is': 1.0,
u'Nice': 1.4054651081081644,
u'strange': 1.4054651081081644,
u'this': 1.0,
u'very': 1.0}
Comme indiqué dans les commentaires, avant la version 0.15, une solution de contournement consiste à accéder à l'attribut idf_
via le soi-disant caché _tfidf
(une instance de TfidfTransformer
) du vectoriseur:
idf = vectorizer._tfidf.idf_
print dict(Zip(vectorizer.get_feature_names(), idf))
qui devrait donner la même sortie que ci-dessus.
Voir aussi this sur la façon d'obtenir les valeurs TF-IDF de tous les documents:
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
Je pense que les résultats sont normalisés par document:
>>> 0.448320873199 2 + 0.448320873199 2 + 0.448320873199 2 + 0.630099344518 2 0,9999999999997548