Python 使用Spacy时文档相似性超过

Python 使用Spacy时文档相似性超过,python,nlp,spacy,gensim,tf-idf,Python,Nlp,Spacy,Gensim,Tf Idf,我用Python编写了一个函数来计算PDF页面之间的相似性,以返回最相似的页面映射 函数获取输入文件和包含字典项的列表,如下所示: 缩略图=[{'page':1,'text':'strin1'},{'page':2,'text':'strin2'},…] 职能: import PyPDF2 import spacy filename2="file.pdf" nlp = spacy.load('en_core_web_lg') def checker(filename2,

我用Python编写了一个函数来计算PDF页面之间的相似性,以返回最相似的页面映射

函数获取输入文件和包含字典项的列表,如下所示: 缩略图=[{'page':1,'text':'strin1'},{'page':2,'text':'strin2'},…]

职能:

import PyPDF2
import spacy

filename2="file.pdf"
nlp = spacy.load('en_core_web_lg')


def checker(filename2, thumbnail):
    object = PyPDF2.PdfFileReader(filename2)
    NumPages = object.getNumPages()
    
    specialCharacters = {ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"}
    
    # extract text and do the search
    output=[]
    for i in range(0, NumPages):
        temp_dict={}
        Text = object.getPage(i).extractText().translate(specialCharacters)
        Text=Text.replace('\n','')
        
        for item in thumbnail:
            sim= nlp(Text).similarity(nlp(item['text']))
            if sim>0.98:
                temp_dict['page_thumbnail'] = item['page']
                temp_dict['page_file']=i+1
                temp_dict['sim'] = sim
                output.append(temp_dict)
    return output
导入PyPDF2
进口空间
filename2=“file.pdf”
nlp=spacy.load('en\u core\u web\u lg')
def检查器(文件名2,缩略图):
object=PyPDF2.PdfileReader(文件名2)
NumPages=object.getNumPages()
特殊字符={ord(c):“!@$%^&*()[]{};:,./?\\\\\`~-={UK+”}中的c的”
#提取文本并进行搜索
输出=[]
对于范围内的i(0,NumPages):
temp_dict={}
Text=object.getPage(i).extractText().translate(特殊字符)
Text=Text.replace('\n','')
对于缩略图中的项目:
sim=nlp(文本)。相似性(nlp(项目['Text']))
如果sim>0.98:
临时目录['page\u thumbnail']=项目['page']
temp_dict['page_file']=i+1
临时命令['sim']=sim
输出追加(临时命令)
返回输出
对于一个有38页的PDF,使用Spacy匹配38个条目的列表,这需要很长时间。
有没有关于如何使其可扩展的建议?另外,主要目标是返回文档的页码(i)和匹配的页面,在缩略图中相似性得分最高(项目['page'])。

您调用的
nlp
太多,特别是
NumPages*len(缩略图)
次。每个电话都很贵。你需要提前打电话,这样你就不会重复打电话了

这样做:

# do this right at the start of your function
tdocs = [nlp(ii['text']) for ii in thumbnail]

# ... later on ...

Text=Text.replace('\n','')
doc = nlp(Text)
        
for item, tdoc in zip(thumbnail, tdocs):
    sim = doc.similarity(tdoc)

这将使它更快。如果这仍然不够快,您应该预先计算向量并将它们存储在类似的地方,以便进行近似查找。

索引器:列出超出行范围的索引:sim=doc.similarity(tdoc)@polm23