我有一个大约 40,000 个短语的列表 L 和一个大约 1000 万字的文档。我要检查的是哪对这些短语共同出现在 4 个单词的窗口内。例如,考虑 L=["brown fox","lazy dog"]。该文件包含“一只敏捷的棕色狐狸跳过懒狗”的字样。我想看看,棕色狐狸和懒狗在四个单词的窗口中出现了多少次,并将其存储在一个文件中。我有以下代码:
content=open("d.txt","r").read().replace("\n"," ");
for i in range(len(L)):
for j in range(i+1,len(L)):
wr=L[i]+"\W+(?:\w+\W+){1,4}"+L[j]
wrev=L[j]+"\W+(?:\w+\W+){1,4}"+L[i]
phrasecoccur=len(re.findall(wr, content))+len(re.findall(wrev,content))
if (phrasecoccur>0):
f.write(L[i]+", "+L[j]+", "+str(phrasecoccur)+"\n")
本质上,对于列表 L 中的每一对短语,我在文档内容中检查这些短语在 4 个单词的窗口内出现了多少次。但是,当列表 L 非常大(例如 40K 个元素)时,这种方法的计算效率很低。有没有更好的方法来做到这一点?