分析する必要がある生のテキストを含むデータベースがあります。たとえば、何億もの個々の Web ページのタイトル タグを収集し、トピックに基づいてそれらをクラスタ化しました。現在、各トピック クラスタのサブセットに対して追加のテストを実行することに関心があります。問題は 2 つあります。まず、すべてのテキストをメモリに収めて評価することはできません。次に、これらの分析のいくつかを並行して実行する必要があるため、サブセットをメモリに収めることができたとしても、多くのサブセットをメモリに収めることはできません。
私はジェネレーターを扱ってきましたが、多くの場合、既に読み込まれて評価されたデータの行に関する情報を知る必要があります。
私の質問は次のとおりです。メモリに収まらないデータを処理および分析するための最良の方法は何ですか。データは何らかのデータベースから抽出する必要があります (現在は mysql ですが、すぐにより強力なソリューションに切り替える可能性があります)。
Pythonでデータを扱うソフトウェアを構築しています。
ありがとうございました、
編集
私はこれについて一日中調査し、ブレインストーミングを行い、私の考えや発見を投稿し続ける予定です. ご意見やアドバイスをお寄せください。
アイデア 1: 単語と n-gram をトークン化し、ファイルに保存します。データベースから取得した文字列ごとに、既存のファイルのトークンを使用してトークン化します。トークンが存在しない場合は作成します。単語トークンごとに、文字列内のすべての単語の単一表現が存在するまで、右から左に結合します。縮小されたトークンで構成される既存のリスト (メモリに収まる) を検索して、潜在的な一致と類似を見つけます。削減された各トークンには、トークン カテゴリを示す識別子が含まれます。縮小されたトークン (単語トークンの組み合わせによって作成されたトークン) が、関心のあるトークン化された文字列に対してカテゴリ的に一致するが直接一致しないことが判明した場合、縮小されたトークンは対応するトークンに分解され、単語トークンが単語ごとに比較されます。関心のある文字列へのトークン。
これを行うことができるライブラリまたはモジュールが既に存在するかどうかはわかりません。また、それからどれだけの利益が得られるかもわかりません。ただし、私の優先事項は次のとおりです。1) メモリを節約する、2) ランタイムを心配する。考え?
編集2
Hadoop は間違いなくこの問題の解決策になるでしょう。Python と Hadoop の自然言語処理に関する優れたリソースをいくつか見つけました。下記参照:
- http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
- http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
- http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
- https://github.com/klbostee/dumbo/wiki/Short-tutorial
ご協力いただきありがとうございます!