私は、生物医学実体に関する用語の長い辞書を持っています。各用語 (キー) には、識別子 (値) のリストがあります。
私はこの用語をフリーテキストで見つけなければなりません。私は約 300,000 用語の辞書をいくつか持っており、このタスクでは速度を評価するために Python と Java を使用しています。
アルゴリズムは次のようになります (Python の場合):
for sentence in text_list:
terms = dictionary.keys()
pattern = re.compile("|".join(terms))
matches = pattern.finditer(sentence)
for m in matches:
ini = m.start()
end = m.end()
match = m.group(1)
save_result(ini, end, match)
標準の re パッケージでは長い正規表現をコンパイルできないため、pypi.python.org/pypi/regexパッケージを使用しています。また、Java で同じアルゴリズムを実行しました。
私は約 650,000 文を使用しています。Python では、コンパイルに 3 ~ 4 分かかり、アルゴリズムは 3 ~ 4 時間で終了します。
Java は数秒で正規表現をコンパイルしますが、アルゴリズムには 16 ~ 18 時間かかります...O_o
私はさまざまな Web サイトを読んでおり、http://swtch.com/~rsc/regexp/regexp1.htmlには興味深い情報がありますが、処理方法がわかりません。
私の質問は... 私は 3 時間以内にすべての文を完成させました。同じことをより短い時間で達成する別の方法を知っていますか? 多分他の言語で、または他のライブラリやパッケージを使用していますか? (Java では、標準ライブラリを使用していますjava.util.regex.*
)。上記の Web サイトでは、Thonpson NFA アルゴリズムについて説明しています。Java、Python などのこのアルゴリズムのライブラリまたはパッケージはありますか? grep
(Linux) は強力なツールですが、使用できると思いますか?