複数のトークンを大きな Unicode テキスト ドキュメントに置き換える必要があります。現在、私は自分の辞書の単語を反復処理しておりsub
、コンパイルされた正規表現に置き換えています:
for token, replacement in dictionary.tokens().iteritems():
r = re.compile(word_regex_unicode(token), flags=re.I | re.X | re.UNICODE)
text = r.sub(replacement, text)
私の単語の正規表現はどこですか
# UTF8 unicode word regex
def word_regex_unicode(word):
return r"(?<!\S){}(?!\S)".format(re.escape(word))
これは、新しい正規表現をコンパイルする必要がありsub
、ドキュメントに存在するかどうかにかかわらず、すべてのトークンに対して呼び出しが発生することを意味しますtext
。別のアプローチとして、トークンの出現を見つけて、トークンが見つかった場合re.finditer
に呼び出すことができます。re.sub
for token, replacement in dictionary.tokens().iteritems():
r = re.compile(word_regex_unicode(token), flags=re.I | re.X | re.UNICODE)
for m in r.finditer(token, text):
# now call sub
text = r.sub(replacement, text)
re.sub
したがって、実際には必要ないときの呼び出しを回避します。re.finditer
最後のアプローチは、グループの結果を使用して改善できます。
for m in r.finditer(token, text):
# match start: match.start()
index = match.start()
# replace from start to end
text = text[:index] + token + text[index + 1:]
これらのうち、どれがより速いアプローチですか?