2012-07-17 35 views
3

我有一個需要分析的具有原始文本的數據庫。例如,我收集了數億個個人網頁的標題標籤,並根據主題對它們進行了聚類。我現在想對每個主題集羣的子集執行一些額外的測試。問題是雙重的。首先,我無法將所有文字都放入記憶中來評估它。其次,我需要同時運行這些分析中的幾個,所以即使我可以將一個子集放入內存中,我當然也無法將許多子集放入內存中。無法放入內存的數據分析

我一直在使用生成器,但通常需要了解有關已經加載和評估的數據行的信息。

我的問題是:什麼是處理和分析不能適應內存的數據的最佳方法。必須從某種數據庫中提取數據(目前是mysql,但很可能會很快轉換爲更強大的解決方案)。

我正在構建用於處理Python中的數據的軟件。

謝謝

編輯

我會研究,並在繼續發佈我的想法和發現集思廣益這一整天的計劃。請留下您可能有的任何意見或建議。

想法1:標記單詞和n元並保存到文件。 對於從數據庫中提取的每個字符串,使用已存在的文件中的標記進行標記化。如果令牌不存在,請創建它。對於每個單詞標記,從右到左組合,直到存在一個字符串中所有單詞的單個表示形式。搜索由簡化的標記組成的現有列表(可以放在內存中)以查找潛在的匹配和相似性。每個縮小的標記將包含一個指示標記類別的標識符。如果發現縮減的標記(由單詞標記的組合創建的標記)與感興趣的標記化字符串進行分類匹配,但不是直接匹配,那麼縮減的標記將被分解爲其對應詞並通過詞 - 令牌到感興趣的字符串。

我不知道如果已經存在一個庫或模塊可以做到這一點,我也不知道我會從中獲得多少收益。但是,我的優先事項是:1)節約內存,2)擔心運行時間。思考?

EDIT 2

Hadoop是肯定會成爲解決這一問題。我在python和hadoop中發現了一些關於自然語言處理的優秀資源。請看下圖:

  1. http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
  2. http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
  3. http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
  4. https://github.com/klbostee/dumbo/wiki/Short-tutorial

感謝您的幫助!

回答

2

​​是爲此目的而創建的。

最好的地圖縮小引擎是Hadoop,但它有很高的學習曲線,需要很多節點才值得。如果這是一個小項目,您可以使用MongoDB,這是一個非常易於使用的數據庫,幷包含使用Javascript的內部映射縮減引擎。 map reduce框架非常簡單易學,但缺少使用Hadoop可以在JDK中獲得的所有工具。

警告:您一次只能在MongoDB的地圖縮減引擎上運行一個地圖縮減作業。這對於鏈接作業或中等數據集(< 100GB)來說是正確的,但它缺少Hadoop的並行性。

+1

Upvoted。您需要在概念上將您的算法分解爲不同的步驟,每個步驟都有自己的輸入,工作存儲和輸出。每一步都應該針對數據的不同分區進行工作。工作存儲是唯一需要擔心其內存佔用空間的數據。不要害怕爲算法的每一步構建所需的所有元模型和分組/彙總 - 磁盤比RAM便宜很多。 – 2012-07-18 02:13:10

+0

這是完美的。 Hadoop絕對是這個問題的解決方案。 – 2012-07-19 03:52:52

0

目前是mysql,但可能很快就會切換到更強大的解決方案。

請不要讓更糟的時間 - 對於大多數類型的任務tunned MySQL是最好的解決方案。

爲了處理海量數據massives使用iteratoolsBuild a Basic Python Iterator

關於如何迭代數據。這取決於你的算法。