Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用tf idf和成对相似性搜索文档?_Python_Python 3.x_Pandas_Scikit Learn_Nltk - Fatal编程技术网

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

Python 如何使用tf idf和成对相似性搜索文档?,python,python-3.x,pandas,scikit-learn,nltk,Python,Python 3.x,Pandas,Scikit Learn,Nltk,我正在尝试建立一个基于Tf Idf和pandas和sklearn的成对相似性的文本文件搜索工具 以下代码是我目前掌握的代码: 我有一个文本文件或网页,我可以刮,我将使用它来建立我的初始语料库。然后,我构建一个数据框架,并对文档执行一些预处理 之后,我构建训练我的TFIDFvectorier并为我的语料库构建矩阵 然后,我用正在搜索的文本创建第二个数据帧,对其进行预处理,并基于先前训练的矢量器构建第二个矩阵 最后我计算了我的余弦相似矩阵 texts = scrapper.getTexts([opt

我正在尝试建立一个基于Tf Idf和pandas和sklearn的成对相似性的文本文件搜索工具

以下代码是我目前掌握的代码:

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

之后,我构建训练我的TFIDFvectorier并为我的语料库构建矩阵

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

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

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()
现在,我不清楚的是,我如何基于余弦相似性回到我的原始语料库。如何在原始数据框中找到与搜索文本最相似的条目

cosine_similarities.argmax()

将返回具有最大余弦相似性的文档索引。或者,您可以使用
nlargest
from
heapq
之类的工具来获得k个最大值。

谢谢,这正是我想要的。你有如何使用heapq的例子吗?我没有,但我可以给你一个提示:使用
heapq.nlargest