2017-02-18 7 views
1

私は約6億語のコーパスを持っています。私はそれを文字列のリストにして、それを使って作業したいと思いますが、600万要素のリストを使って作業することはかなり遅くなると心配しています。私はPythonで(単語の)リストのための高性能同等物があるかどうか疑問に思っています。文字列を扱うための最も効率的な配列

UPDATE:

私は彼らのためにいくつかのスコアを計算した後に2つのラベルの一つに各単語をマップします。スコアは基本的には小数であり、分子は特定の環境(例えば特定の単語の前)に現れる頻度であり、分母はそれらの全体のコーパス頻度である。これは私が心に留めている仕事です。

+0

「働いている」と正確に何が関係していますか?述べているように、問題は幅広い側面です。 – MSeifert

+0

Pythonはおそらく大きなデータセットを扱うための言語ではありません。 – intboolstring

+0

それはあなたが文字を集計したり、言葉をクラスタリングしたり、自動翻訳したりしたいのであれば、おそらくもっと説明を与えるでしょう –

答えて

2

本当にあなたのユースケースとあなたが「6億の言葉」で何をしたいのかが分かります。

Pythonにバインドされている場合は、Dask.distributedまたはdispyをチェックしてください。しかし、intboolstringが述べたように、Pythonはあなたの最良の選択ではないかもしれません。

代わりに、HadoopなどのMapReduceは大量のデータを処理する優れた方法です。あなたは実際にアプリケーション環境を説明していないので、多くの洞察を提供するのは難しいです。

+1

これはメモリ内のデータセットであり、本当に大変なことです。 – pvg

+0

私は、質問に応じて詳細を追加しました。 –

+0

あなたのデータセットは今後成長しますか?あなたがおそらく異なるコーパスを使用しているので、私はそれを仮定します。どんなレートで?あなたのプログラムには、単語の処理速度の要件がありますか?これは一度だけ実行する操作ですか?現在の操作は明らかですが、環境は少しばかりです。 –

0

@shadowrangerが正しいとすれば、あなたがしたいことの詳細を教えてください。これらは私のアドバイスです。まず

  • 、あなたが何をしたいのかだけではなくguessing.Ifあなたのコードをチェックアウトして、問題のボトルネックを見つけることはI/Oバウンドについて、多分マルチプロセッシングは良い選択ではありません。

  • データ構造は非常に重要な要素です。大きなオブジェクトを扱う場合は、最も適したデータ構造を選択することをお勧めします。dequeは、リストのようなコンテナで、末尾にlistの代わりに入力します。

Dequeとは、スタックやキュー(名前は「デック」と発音 で、「両端キュー」の略である)の一般化されています。デキュー は、 いずれかの方向におおよそ同じO(1)のパフォーマンスで両端キューの 側からスレッドセーフ、メモリ効率の良い追加とポップをサポートします。

  • メモリ管理データのサイズが非常に大きい場合、代わりにアイテムの大きなリストのgeneratorsiteratorsの周りにこのコードを構築しようと、それはあなたがメモリ不足回避し、あなたのコードを改善します。

  • mmap大きなファイルの処理に役立つ可能性があります。

メモリマップファイルオブジェクト両方の文字列などのファイル オブジェクトのように振る舞います。

詳細はHigh-performance container datatypesを参照してください。

+0

詳細が追加されました! –

関連する問題