数十億語のコーパスで検索したい数百万語があります。これを行うための効率的な方法は何でしょうか。
私はトライを考えていますが、トライのオープンソース実装は利用できますか?
ありがとうございました
- 更新しました -
正確に何が必要かについて、もう少し詳しく説明します。
ニュースソースをクロールし、単語の頻度に基づいて人気のある単語を取得するシステムがあります。百万の言葉があるかもしれません。
データは次のようになります。
Word1 Frequency1 Word2 Frequency2(タブ区切り)
また、上記の形式のデータを含む別のソースから最も人気のある単語(10億)を入手しました。
これが私が出力として取得したいものです。
- 両方の情報源に共通する言葉
- 単語は私たちのソースにのみ存在し、参照ソースには存在しません。
- 単語は参照ソースにのみ存在し、ソースには存在しません。
上記の情報に対してcomm(bashコマンド)を使用できるのは単語だけです。commを使用して、両方の列ではなく1つの列とのみ比較する方法がわかりません。
システムはスケーラブルである必要があり、これを毎日実行して結果を比較したいと思います。また、おおよその一致を取得したいと思います。
だから、私はマップリデュースの仕事を書くことを考えています。以下のようにマップを作成して関数を減らす予定ですが、質問はほとんどありません。
Map
For each word
output key = word and value = structure{ filename,frequency}
done
Reduce
For each key
Iterate through all the values and check if both file1 and file2 are contained.
If yes, then write it to appropriate file.
If only in file1, write it to file1only file
If only in file2, write it to file2only file.
Done.
2つの質問があります。マップリデュースでは、2つのファイルを含むディレクトリを入力として指定できます。単語を読んでいるファイル名を取得する方法がわかりません。この情報を取得する方法は?削減フェーズはpart-xxxxxという名前のデフォルトファイルにのみ自動的に書き込むため、さまざまな出力ファイルに書き込むにはどうすればよいですか。さまざまな出力ファイルに書き込む方法。
これを読んでくれてありがとう。