10

自然言語処理の研究に使用している文字列のセットがたくさんあるので、Pythonで保存するための良い方法が欲しいです。

pickleを使用することもできますが、リスト全体をメモリにロードすることは不可能です(私は信じています)。これは、約10 GBの大きさであり、メインメモリがそれほど多くないためです。現在、リストはシェルフライブラリに保存されています...シェルフは文字列「0」、「1」、...、「n」でインデックス付けされていますが、これは少し不格好です。

そのようなオブジェクトを単一のファイルに保存し、それでもランダムに(っぽい)アクセスできるより良い方法はありますか?

最良のオプションは、それを複数のリストに分割することかもしれません。

ありがとう!

4

3 に答える 3

9

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

文字列を使用する何らかの方法で文字列をグループ化するメカニズムを理解できる場合 (たとえば、文の一部に暗黙の目的語または主題が含まれていて、それらについて具体的に調査したい場合、または文字列のソース (公式、非公式、超非公式のいずれであっても) またはそのようなものであれば、データを分割することでデータの「ワーキング セット」を大幅に削減でき、研究のスループットを大幅に改善できる可能性があります。しかし、真のランダム アクセスを意図している場合は、1 つの大きな山が最適です。

お役に立てれば。

于 2011-01-24T02:42:44.760 に答える
3

データベースの使用を検討できます。おそらく、文字列ごとに 1 つの行を持つ文または文字列テーブルです。

いくつかのオブジェクト リレーショナル マッパー (例: sqlalchemy )の助けを借りて、データのオブジェクト指向ビューを作成して文字列を反復処理したり、データのより大きなサブセットを順番に処理したりできます (それがタスクに適用できる場合)。

さらに、各文に追加のデータを保存して、操作するアイテムのセットをよりきめ細かく制御することもできます。

于 2011-01-24T02:43:28.943 に答える
1

shelve (bdb バックエンドを使用) または Sqlite3 を使用すると思います。
テーブルのような単純なリストCREATE TABLE list(idx int primary key, value text);で十分なはずです。

于 2011-01-24T02:55:59.393 に答える