Предпосылка использования tf-idf заключается в том, чтобы сделать акцент на более редких словах, которые появляются в тексте: предпосылка, которая фокусируется на слишком общих словах, не позволит определить, какие слова являются значимыми, а какие нет.
В вашем примере, вот как вы можете реализовать tf-idf в Python:
doc1 = ['hi', 'there', 'guys']
doc2 = ['how', 'is', 'it', 'going']
doc1=str(doc1)
doc2=str(doc2)
stringdata=doc1+doc2
stringdata
import re
text2=re.sub('[^A-Za-z]+', ' ', stringdata)
from nltk.tokenize import word_tokenize
print(word_tokenize(text2))
text3=word_tokenize(text2)
Слова были размечены и выглядят следующим образом:
['hi', 'there', 'guys', 'how', 'is', 'it', 'going']
Затем генерируется матрица:
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
matrix = vectorizer.fit_transform(text3).todense()
Это матричный вывод:
matrix([[0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1.],
[0., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 1., 0.],
[1., 0., 0., 0., 0., 0., 0.]])
Однако, чтобы разобраться в этой матрице, мы теперь хотим сохранить в качестве кадра данных панд с частотой слова в порядке возрастания:
import pandas as pd
# transform the matrix to a pandas df
matrix = pd.DataFrame(matrix, columns=vectorizer.get_feature_names())
# sum over each document (axis=0)
top_words = matrix.sum(axis=0).sort_values(ascending=True)
Вот что мы придумали:
going 1.0
guys 1.0
hi 1.0
how 1.0
is 1.0
it 1.0
there 1.0
dtype: float64
В этом примере у слов мало контекста - все три предложения являются общими введениями. Следовательно, tf-idf не обязательно раскрывает здесь что-либо значимое, но в контексте текста, содержащего, например, более 1000 слов, tf-idf может быть весьма полезен с точки зрения определения важности между словами. например Вы можете решить, что слова, встречающиеся в тексте 20-100 раз, встречаются редко, но обычно встречаются достаточно, чтобы заслужить важность.
В этом конкретном случае можно потенциально получить оценку релевантности, определив, сколько раз слова в запросе появляются в соответствующих документах, в частности, слова, которые tf-idf помечены как важные.