如何使用tf-idf和成对相似性搜索文档?

时间:2018-03-20 10:57:55

标签: python python-3.x pandas scikit-learn nltk

我正在尝试基于Tf-Idf和与pandas和sklearn的成对相似性来构建基于文本文件的搜索工具。

以下代码是我目前所拥有的:

我有一个我可以抓取的文本文件或网页,我将用它来构建我的初始语料库。然后我构建一个pandas数据帧并对文档执行一些预处理。

之后我构建了训练我的TfidfVectorizer并为我的语料库构建矩阵。

然后我用我正在搜索的文本创建第二个数据帧,对其进行预处理,并基于之前训练过的矢量化器构建第二个矩阵。

最后我计算了余弦相似度矩阵。

texts = scrapper.getTexts([opts.url])  # module that scrapes a webpage
columns = ['section', 'title', 'paragraph']
df = pd.DataFrame(texts, columns=columns)
model = preprocess(df) #Remove stopwords, lemmatize etc.

corpus = df['lemmatized_sents'].tolist()
tfidf_vectorizer = TfidfVectorizer(max_df=1, use_idf=True)
tfidf_matrix = tfidf_vectorizer.fit_transform(raw_documents=corpus)

to_search = pd.DataFrame({'paragraph': 
          ["Text i am search for in the orig. document"]})

to_search = preprocess(to_search)
to_search_matrix = vectorizer.transform(to_search['lemmatized_sents'].tolist())

cosine_similiarities = metrics.pairwise.cosine_similarity(
        to_search_matrix, matrix).flatten()

现在,我不清楚的是,我如何根据余弦的相似性回到原来的语料库。如何在原始数据框中找到与搜索文本最相似的条目?

1 个答案:

答案 0 :(得分:1)

cosine_similarities.argmax()

将返回具有最大余弦相似度的文档索引。或者,您可以使用nlargestheapq之类的内容来获取 k 最大值。