J'essaie d'obtenir tfidf à partir d'un document. Mais je ne pense pas que cela me donne des valeurs correctes ou que je fasse quelque chose de mal. Veuillez suggérer. Code et sortie ci-dessous:Est-ce correct tfidf?
Update 1: (comme suggéré par juanpa.arrivillaga)
vectorizer = TfidfVectorizer(smooth_idf=False)
sortie:
script - 0.269290317245
wordcount - 0.269290317245
by - 0.269290317245
read - 0.269290317245
be - 0.269290317245
to - 0.269290317245
book - 0.209127954024
first - 0.354084405732
is - 0.269290317245
this - 0.269290317245
there - 0.354084405732
hello - 0.354084405732
information - 0.0
...
sortie après mise à jour 1:
script - 0.256536760895
wordcount - 0.256536760895
by - 0.256536760895
read - 0.256536760895
be - 0.256536760895
to - 0.256536760895
book - 0.182528018244
first - 0.383055542114
is - 0.256536760895
this - 0.256536760895
there - 0.383055542114
hello - 0.383055542114
information - 0.0
...
Selon ma compréhension, tfidf est = t f * idf. Et la façon dont je le calcule manuellement comme exemple:
document 1: "Bonjour, c'est le premier livre à être lu par le script wordcount." document 2: "Ceci est le deuxième livre à être lu par le script wordcount, il a quelques informations supplémentaires." document 3: "juste le troisième livre."
TFIDF pour Bonjour:
tf= 1/12(total terms in document 1)= 0.08333333333
idf= log(3(total documents)/1(no. of document with term in it))= 0.47712125472
0.08333333333*0.47712125472= 0.03976008865
qui est différent ci-dessous (bonjour - 0,354084405732).
calcul manuel après mise à jour 1:
tf = 1
idf= log(nd/df) +1 = log (3/1) +1= 0.47712125472 + 1= 1.47712
tfidf = tf*idf = 1* 1.47712= 1.47712
(pas identique à la sortie de code "bonjour - 0,383055542114" après lissage idf)
Toute aide à comprendre ce qui se passe est très apprécié ..
Vous pouvez voir exactement ce qui est utilisé ['here in the docs'] (http://scikit-learn.org/stable/modules/feature_extraction.html#tfidf-term-weighting). Notez que vous n'effectuez pas de lissage IDF, ce que fait 'TfidfVectorizer' par défaut. –
En outre, les docs semblent impliquer que la fréquence du terme est un terme brut fréquence, non normalisé par la longueur du document –
@ juanpa.arrivillaga, pouvez-vous transformer votre commentaire en une réponse - cela pourrait aider les gens à chercher/demander la même chose .. – MaxU