逆インデックス/転記リストに関連して、最近学んでいる概念のいくつかを実装するために、いくつかの Python コードを書いています。私は Python を初めて使用し、場合によってはその効率を理解するのに苦労しています。
理論的には、それぞれが一意の ID を持つ一連のドキュメント D の逆インデックスを作成するには、次の手順を実行するdoc_id
必要があります。
- Dでの各ドキュメントの構文解析/字句解析の実行
- ストップワードの削除、ステミングの実行など。
(word,doc_id)
すべてのペアのリストを作成する- リストの並べ替え
- 重複を
{word:[set_of_all_doc_ids]}
(逆インデックス)に圧縮する
ステップ 5 は、多くの場合、メタデータ (単語の頻度、バイト オフセット) を含む単語と、投稿リスト (単語が出現するドキュメントのリスト) へのポインターを含む辞書を作成することによって実行されます。投稿リストは、効率的なランダム挿入を可能にするデータ構造、つまりリンクされたリストとして実装されることがよくあります。
私の問題は、Python が高水準言語であり、メモリ ポインター (したがって、リンクされたリスト) などを直接使用することは範囲外のように思われることです。非常に大きなデータセットの場合、適切な時間内にインデックスを計算するあらゆる種類の機能を保持するには、効率を最大化する必要があることが既にわかっているため、プロファイリングの前に最適化しています。
SO には、Python の逆インデックスに関する他のいくつかの投稿があり、MY の現在の実装と同様に、キーをリスト (またはセット) にマッピングする辞書を使用しています。このメソッドは、リンクされたリストへのポインターを直接コーディングできる言語と同様のパフォーマンスを期待できますか?