是否有可能增加python进程使用的RAM量

时间:2011-06-14 20:15:07

标签: python regex nltk

我在具有64GB RAM的Windows服务器上运行分类/功能提取任务,不知何故,python认为我的内存不足:

misiti@fff /cygdrive/c/NaiveBayes
$ python run_classify_comments.py > tenfoldcrossvalidation.txt
Traceback (most recent call last):
  File "run_classify_comments.py", line 70, in <module>
    run_classify_comments()
  File "run_classify_comments.py", line 51, in run_classify_comments
    NWORDS = get_all_words("./data/HUGETEXTFILE.txt")
  File "run_classify_comments.py", line 16, in get_all_words
    def get_all_words(path): return words(file(path).read())
  File "run_classify_comments.py", line 15, in words
    def words(text): return re.findall('[a-z]+', text.lower())
  File "C:\Program Files (x86)\Python26\lib\re.py", line 175, in findall
    return _compile(pattern, flags).findall(string)
MemoryError

所以re模块崩溃了64 GB的RAM ......我不这么认为...... 为什么会发生这种情况,如何配置python以使用我机器上的所有可用RAM?

2 个答案:

答案 0 :(得分:4)

只需重写程序,一次只读一行大文本文件。只需将get_all_words(path)更改为:

即可轻松完成此操作
def get_all_words(path):
    return sum((words(line) for line in open(path))

请注意在括号中使用生成器,该生成器是惰性的,并将通过sum函数按需评估。

答案 1 :(得分:1)

我认为问题在于使用re.findall()将整个文本作为单词列表读入内存。您是否以这种方式阅读超过64GB的文本?根据您的NaiveBayes算法的实现方式,您可以更好地逐步构建频率字典,以便只将字典保存在内存中(而不是整个文本)。有关您的实施的更多信息可能有助于更直接地回答您的问题。