1

mongo db にドキュメントのコレクションがあります。このコレクションにアクセスして挿入するために Pymongo を使用しています。私がやりたいことは:

Python では、map reduce を使用して、コーパス全体で -gram 句が使用された回数を効率的にクエリします。

単一の単語に対してこれを行う方法は知っていますが、n-gram に拡張するのに苦労しています。私がやりたくないのは、NLTK ライブラリを使用してトークン化してから map reduce を実行することです。それがソリューションの効率を低下させると私は信じています。ありがとう。

4

1 に答える 1

1

効率的なシステムが必要な場合は、事前に n グラムを分解してインデックスを作成する必要があります。5-Gram Experimentを作成したとき(残念ながら、ハードウェアを返さなければならなかったため、バックエンドは現在オフラインになっています)、 のマップを作成しword => integer id、コレクションのドキュメント キー フィールドに 16 進数の ID シーケンスを MongoDB に保存しました。 (例: [10, 2] => "a:2")。次に、約 3 億 5000 万の 5 グラムを MongoDB を実行する 10 台のマシンにランダムに分散すると、データ セット全体のクエリ時間が 1 秒未満になりました。

同様のスキームを作成できます。次のようなドキュメントを使用します。

{_id: "a:2", seen: [docId1, docId2, ...]}

指定された n-gram が見つかった場所を見つけることができます。

更新:実際には、小さな修正: ライブになったシステムでは、同じスキームを使用することになりましたが、スペース効率のために n グラムキーをバイナリ形式でエンコードしました (~350M は5 グラムの多くです!)。それ以外の場合、メカニズムはすべて同じでした。

于 2013-08-23T20:36:21.680 に答える