Я пытаюсь получить tfidf из документа. Но я не думаю, что это дает мне правильные значения, или я могу что-то делать неправильно. Пожалуйста, предложите. Код и вывод ниже:
from sklearn.feature_extraction.text import TfidfVectorizer
books = ["Hello there this is first book to be read by wordcount script.", "This is second book to be read by wordcount script. It has some additionl information.", "just third book."]
vectorizer = TfidfVectorizer()
response = vectorizer.fit_transform(books)
feature_names = vectorizer.get_feature_names()
for col in response.nonzero()[1]:
print feature_names[col], '-', response[0, col]
Обновление 1: (как было предложено juanpa.arrivillaga)
vectorizer = TfidfVectorizer(smooth_idf=False)
Выход:
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
...
Вывод после обновления 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
...
Насколько я понимаю, tfidf = tf * idf. И как я вычисляю это вручную в качестве примера:
документ 1: «Здравствуйте, это первая книга, которую можно прочитать с помощью сценария подсчета слов». документ 2: «Это вторая книга, которую нужно читать по сценарию подсчета слов. В ней есть дополнительная информация». документ 3: "всего лишь третья книга".
Tfidf для приветствия:
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
который отличается от приведенного ниже (привет - 0,354084405732).
Ручной расчет после обновления 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
(не то же самое, что вывод кода "hello - 0.383055542114" после сглаживания idf)
Любая помощь, чтобы понять, что происходит, высоко ценится.
here in the docs
. Обратите внимание, что вы не выполняете сглаживание IDF, котороеTfidfVectorizer
делает по умолчанию. - person juanpa.arrivillaga   schedule 14.08.2017