我正在尝试基于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()
现在,我不清楚的是,我如何根据余弦的相似性回到原来的语料库。如何在原始数据框中找到与搜索文本最相似的条目?
答案 0 :(得分:1)
cosine_similarities.argmax()
将返回具有最大余弦相似度的文档索引。或者,您可以使用nlargest
中heapq
之类的内容来获取 k 最大值。