如何解决文档相似性运行时超出了使用Spacy的范围
我已经用Python编写了一个函数来计算PDF页面之间的相似度,以返回最相似的页面映射。
函数获取输入文件和具有字典条目的列表,如: thumbnail = [{'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
对于使用38页的PDF和使用Spacy列出的38个条目的PDF,这将花费很长时间。 关于如何使其可扩展性有任何建议吗?同样,主要目标是返回文档的页码(i)和相似度得分最高的匹配页在缩略图中(item ['page'])。
解决方法
您致电nlp
的次数过多,特别是NumPages * len(thumbnail)
次。每个电话都很昂贵。您需要提前打电话给您,这样您就不会重复打电话了。
执行此操作:
# 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)
那应该使其更快。如果仍然不够快,则应预先计算向量并将它们存放在annoy之类的位置,以便可以近似查找。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。