2017-02-18 76 views
1

我有一個約6億字的語料庫。我想把它變成一個字符串列表,然後與它一起工作,但我擔心的是,處理6億個元素的列表會很慢。我想知道Python中是否有用於列表(單詞)的高性能等價物。用於處理字符串的最有效的陣列

UPDATE:

我想計算一些分數對他們以後每個字兩個標籤中的一個映射。分數基本上是一個分數,其中分子是它們在某些環境中出現的頻率(例如在某些特定詞語之前),分母是它們的整體語料庫頻率。這幾乎是我想到的任務。

+0

「合作」的含義是什麼?如前所述,這個問題有點寬泛。 – MSeifert

+0

Python可能不是處理大數據集的語言。 – intboolstring

+0

它取決於,如果你想計算字母或聚類詞,或自動翻譯..,也許你給更多的解釋 –

回答

2

它真的歸結爲您的用例以及您想要對「6億個單詞」做什麼。

如果你被綁定到Python,請檢查Dask.distributeddispy。正如intboolstring所說,但是,Python可能不是你最好的選擇。

作爲替代方案,MapReduce與Hadoop之類的東西是處理大量數據的好方法。您沒有真正解釋您的應用程序環境,因此很難提供深入的瞭解。

+1

這是一個內存中的數據集,真的是這樣的東西可能是巨大的矯枉過正。 – pvg

+0

我已根據要求添加了更多細節。 –

+0

您的數據集將來會增長嗎?我認爲它會,因爲你可能會使用不同的語料庫。以什麼速度?你的程序是否對處理單詞的速度有任何要求?這是一次只能運行一次的操作嗎?現在手術很清楚,但環境有點模糊。 –

0

@shadowranger是對的,你應該告訴我們更多關於你想做什麼的細節。這是我的建議。

  • 首先,檢查你的代碼並發現問題,而不是僅僅guessing.If的瓶頸,你想做的事是不是I/O密集型,也許是多一個不錯的選擇。

  • 數據結構要與大的物體的工作非常重要factor.If,最好的辦法是選擇最合適的數據structure.Maybe你可以嘗試deque這與快速追加列表類似容器,要麼對持久性有機污染物而不是list

雙端隊列是棧和隊列(名稱是 發音爲「甲板」,並且是短期的「雙端隊列」)的概括。 Deques 支持線程安全,高效的內存追加,並從雙側出現,並在 任一方向大致相同的O(1)性能。

  • 內存管理,如果數據的規模是非常大的,嘗試構建圍繞generatorsiterators,而不是項目的大名單這段代碼,它會幫助你避免耗盡內存,提高你的代碼。

  • mmap也許可以幫助您處理大文件。

內存映射文件對象的行爲像字符串和類似文件 對象。

High-performance container datatypes查看更多詳情。

+0

詳情已添加! –