Можно ли увеличить объем оперативной памяти, используемой процессом Python? - PullRequest
0 голосов
/ 15 июня 2011

Я запускаю задачу классификации / извлечения функций на сервере Windows с 64 ГБ ОЗУ, и почему-то 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 ГБ ОЗУ ... Я так не думаю ... Почему это происходит, и как я могу настроить python для использования всей доступной оперативной памяти на моей машине?

Ответы [ 2 ]

4 голосов
/ 15 июня 2011

Просто перепишите вашу программу, чтобы прочитать ваш огромный текстовый файл по одной строке за раз.Это легко сделать, просто изменив get_all_words(path) на:

def get_all_words(path):
    return sum((words(line) for line in open(path))

Обратите внимание на использование генератора в скобках, который ленив и будет оценивать по требованию функцию суммы.

1 голос
/ 15 июня 2011

Мне кажется, что проблема в использовании re.findall () для чтения всего текста в виде списка слов в памяти.Вы читаете таким образом более 64 ГБ текста?В зависимости от того, как реализован ваш алгоритм NaiveBayes, вы можете лучше построить свой частотный словарь так, чтобы в памяти содержался только словарь (не весь текст).Еще немного информации о вашей реализации может помочь ответить на ваш вопрос более прямо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...