Python3で何百万もの正規表現の置換を高速化

| | | | | | | | | | | | | |

2つのリストがあります:

  • 約75万のリスト「文」(長い文字列)
  • 75万文から削除したい約2万「単語」のリスト

つまり、 750Kのをループして約20Kの置換を実行しますが、ただし、私の単語が実際に「単語」であり、より大きな文字列の一部ではない場合に限ります。

これを行うには、単語を事前にコンパイルして、の単語境界メタ文字が隣接するようにします。

  compiled_words = [re.compile(r "" + word + r "")for word in my20000words]  

次に、"をループします。センテンス" :

  import re for statement in statement:for word incompiled_words:sentence = re.sub(word、"&quot ;, statement)#センテンスを成長させるリスト

このネストされたループは約50センテンスを処理していますes per second 、これは素晴らしいですが、すべての文を処理するのにまだ数時間かかります。

  • strを使用する方法はありますか。 replace メソッド(より高速だと思います)ですが、それでも単語の境界でのみ置換が行われる必要がありますか?

  • または、ありますか re.sub メソッドを高速化する方法は?単語の長さが>の場合、 re.sub をスキップすることで、速度をわずかに改善しました。文の長さよりも長いですが、それほど改善されていません。

私はPython3.5.2を使用しています