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)