約 40,000 フレーズのリスト L と約 1,000 万語のドキュメントがあります。私が確認したいのは、これらのフレーズのどのペアが 4 単語のウィンドウ内に出現するかということです。たとえば、L=["茶色のキツネ","怠惰な犬"] を考えてみましょう。この文書には、「怠惰な犬を飛び越える素早い茶色のキツネ」という言葉が含まれています。茶色のキツネと怠惰な犬が 4 つの単語のウィンドウ内に何回出現するかを確認し、それをファイルに保存します。これを行うための次のコードがあります。
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 要素のようにかなり大きい場合、計算効率が低下します。これを行うより良い方法はありますか?