Pythonに大規模な(〜10 GB)リストを保存およびアクセスする方法は?

StackOverflow https://stackoverflow.com/questions/4778089

質問

自然言語処理の研究に使用している文字列の大きなセットがあり、Pythonに保管する良い方法が欲しいです。

ピクルスを使用できますが、リスト全体をメモリにロードすることは不可能です(私は信じています)。現在、私は棚ライブラリに保存されているリストを持っています...棚には文字列「0」、「1」、...、「n」が少し不格好です。

そのようなオブジェクトを単一のファイルに保存するより良い方法はありますか?

最良の選択肢は、複数のリストに分割することです。

ありがとう!

役に立ちましたか?

解決

データを取得する方法に応じて、SQLite3が最良のアプローチかもしれません。 SQLite3は、リレーショナルデータへのランダムアクセスで優れていますが、データがあまりリレーショナルでない場合、それほど意味がない場合があります。 (たとえあなたが持っているすべての人が「ID」番号であり、あなたの文字列であっても、私はあなたの文字列の基礎となるストレージのためのSQLite3が素晴らしいかもしれないと思います。)

文字列を使用する方法で文字列をグループ化するメカニズムを把握できる場合(たとえば、文章の一部がオブジェクトや主題を暗示している場合、特に調査したい場合、または依存しています。文字列のソースは、それが形式的でも非公式でも、性的な性能であろうと、そのようなものであろうと、それを分割することでデータの「作業セット」を大幅に削減し、研究のスループットを大幅に改善する可能性があります。しかし、本当にランダムなアクセスをするつもりなら、1つの大きな山が最適かもしれません。

お役に立てれば。

他のヒント

データベースの使用を検討できます。たぶん、文字列ごとに1つの行を備えた文または文字列テーブル。

いくつかのオブジェクトリレーショナルマッパーの助けを借りて(例: sqlalchemy)データに対するオブジェクト指向のビューを持ち、文字列を反復的にするか、データのより大きなサブセットを順番に動作させることができます(タスクに適用可能な場合)。

さらに、各文の追加データを保存して、操作するアイテムのセットに対してより微調整された制御を獲得することができます。

shelve(BDBバックエンドを使用)またはsqlite3を使用します。
私はSQLite3を使用して、簡単なリストのようなテーブルを使用します CREATE TABLE list(idx int primary key, value text); 十分でなければなりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top