Python を使用して Web アプリケーションにtf-idfアルゴリズムを実装していますが、動作が非常に遅くなります。私が基本的にしていることは次のとおりです。
1) 2 つの辞書を作成します。
- 最初の辞書: キー (ドキュメント ID)、値 (ドキュメント内で見つかったすべての単語 (繰り返しを含む) のリスト)
- 2 番目の辞書。キー (ドキュメント ID)、値 (ドキュメントの一意の単語を含むセット)
ここで、ドキュメント d の tfidf 結果を取得するようユーザーから請願があります。私がすることは:
2) ドキュメント d の 2 番目の辞書の一意の単語をループし、一意の単語 w ごとに次を取得します。
2.1) tf スコア (d に w が出現する回数: ドキュメントの最初の辞書の単語のリストをループ)
2.2) df スコア (w を含むドキュメントの数: すべてのドキュメント (2 番目の辞書) の単語のセットをループし、w が含まれているかどうかを確認します)。リストと比較して、セットに単語が含まれているかどうかを確認する方が速いように見えるため、セットを使用しています。
ステップ 2.2 は非常に遅いです。たとえば、1000 個のドキュメントがあり、2313 個の一意の単語を含むドキュメントの場合、結果を出力するのに約 5 分かかります。
ステップ 2.2 を高速化する他の方法はありますか? 反復処理が遅い辞書はありますか?