我有一个包含约40,000个短语的列表L和一个包含约10百万单词的文档。 我想要检查哪些这些短语对在4个单词的窗口内同时出现过。例如,假设L=["棕色的狐狸","懒狗"]。文档中包含单词"a quick brown fox jumps over the 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个元素时,这种方法在计算上效率低下。有没有更好的方法来做到这一点?
dict
或set
而不是列表,因为查找时间更短。 - Joel Cornett