約 100,000 の用語に対して検索を実行したい短いテキスト (具体的にはツイートなので、最大長は 140 文字) があります。
これは従来の検索の問題 (大きなドキュメント、小さな検索語) をひっくり返しています。各検索時間を反復してマッピングを試行する単純なアプローチは、この問題に取り組む最も効率的な方法ではありません。
この種の検索の問題に対処する方法についてのリソースや洞察はありますか?
約 100,000 の用語に対して検索を実行したい短いテキスト (具体的にはツイートなので、最大長は 140 文字) があります。
これは従来の検索の問題 (大きなドキュメント、小さな検索語) をひっくり返しています。各検索時間を反復してマッピングを試行する単純なアプローチは、この問題に取り組む最も効率的な方法ではありません。
この種の検索の問題に対処する方法についてのリソースや洞察はありますか?
この状況で非常にうまく機能している Aho-Corasick アルゴリズムに出くわしました。
http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
Javascript 実装を使用すると、次のパフォーマンスを得ることができます。
一致する単語: 要約英語辞書 (~250,000 単語)
1 秒あたりのセンテンス数: ~80,000
単語の境界が重要な場合は、単語の境界を確認するために追加のフィルタリングが必要です。アルゴリズムはテキスト内の一致位置を吐き出すので、単語の境界を効率的にチェックするのは簡単です。
これが同様の問題を探している人に役立つことを願っています:)