Python Tf IDF算法
问题内容:
我想在一组文档中找到最相关的词。
我想在3个文档中调用Tf Idf算法,并返回包含每个单词及其频率的csv文件。
在那之后,我将只使用数量较大的那些,然后使用它们。
我发现此实现可以实现我所需的https://github.com/mccurdyc/tf-
idf/
。
我用subprocess
图书馆叫那个罐子。但是该代码存在一个巨大的问题:它在分析单词时犯了很多错误。它混入了一些单词,并且与'
and
-
(我认为)存在问题。我正在3本书(哈利·波特)的文本上使用它,例如,我正在获取诸如此类的单词,hermiones, hermionell, riddlehermione, thinghermione
而不仅仅是hermione
在csv文件中。
我做错了什么吗?您能给我Tf idf算法的有效实现吗?有没有这样做的python库?
问题答案:
这是使用scikit-learn的Tf-
idf算法的实现。在应用之前,你可以word_tokenize()
和干你的话。
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk import word_tokenize
from nltk.stem.porter import PorterStemmer
def tokenize(text):
tokens = word_tokenize(text)
stems = []
for item in tokens: stems.append(PorterStemmer().stem(item))
return stems
# your corpus
text = ["This is your first text book", "This is the third text for analysis", "This is another text"]
# word tokenize and stem
text = [" ".join(tokenize(txt.lower())) for txt in text]
vectorizer = TfidfVectorizer()
matrix = vectorizer.fit_transform(text).todense()
# 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=False)