我有一個需要分析的具有原始文本的數據庫。例如,我收集了數億個個人網頁的標題標籤,並根據主題對它們進行了聚類。我現在想對每個主題集羣的子集執行一些額外的測試。問題是雙重的。首先,我無法將所有文字都放入記憶中來評估它。其次,我需要同時運行這些分析中的幾個,所以即使我可以將一個子集放入內存中,我當然也無法將許多子集放入內存中。無法放入內存的數據分析
我一直在使用生成器,但通常需要了解有關已經加載和評估的數據行的信息。
我的問題是:什麼是處理和分析不能適應內存的數據的最佳方法。必須從某種數據庫中提取數據(目前是mysql,但很可能會很快轉換爲更強大的解決方案)。
我正在構建用於處理Python中的數據的軟件。
謝謝
編輯
我會研究,並在繼續發佈我的想法和發現集思廣益這一整天的計劃。請留下您可能有的任何意見或建議。
想法1:標記單詞和n元並保存到文件。 對於從數據庫中提取的每個字符串,使用已存在的文件中的標記進行標記化。如果令牌不存在,請創建它。對於每個單詞標記,從右到左組合,直到存在一個字符串中所有單詞的單個表示形式。搜索由簡化的標記組成的現有列表(可以放在內存中)以查找潛在的匹配和相似性。每個縮小的標記將包含一個指示標記類別的標識符。如果發現縮減的標記(由單詞標記的組合創建的標記)與感興趣的標記化字符串進行分類匹配,但不是直接匹配,那麼縮減的標記將被分解爲其對應詞並通過詞 - 令牌到感興趣的字符串。
我不知道如果已經存在一個庫或模塊可以做到這一點,我也不知道我會從中獲得多少收益。但是,我的優先事項是:1)節約內存,2)擔心運行時間。思考?
EDIT 2
Hadoop是肯定會成爲解決這一問題。我在python和hadoop中發現了一些關於自然語言處理的優秀資源。請看下圖:
- http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
- http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
- http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
- https://github.com/klbostee/dumbo/wiki/Short-tutorial
感謝您的幫助!
Upvoted。您需要在概念上將您的算法分解爲不同的步驟,每個步驟都有自己的輸入,工作存儲和輸出。每一步都應該針對數據的不同分區進行工作。工作存儲是唯一需要擔心其內存佔用空間的數據。不要害怕爲算法的每一步構建所需的所有元模型和分組/彙總 - 磁盤比RAM便宜很多。 – 2012-07-18 02:13:10
這是完美的。 Hadoop絕對是這個問題的解決方案。 – 2012-07-19 03:52:52