2011-06-14 7 views
0

64GB RAM이 장착 된 Windows 서버에서 분류/기능 추출 작업을 실행하고 있습니다. 파이썬에서 필자는 메모리가 부족하다고 생각합니다.파이썬 프로세스가 사용하는 RAM의 양을 늘릴 수 있습니까

[email protected] /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 

다시 모듈이 64GB RAM으로 충돌하는 중 ... 나는 그렇게 생각하지 않는다 ... 왜 이런 일이 일어나고, 내 컴퓨터에서 사용 가능한 모든 RAM을 사용하도록 python을 구성 할 수 있습니까?

+3

Windows 버전이 64 비트입니까? 파이썬 버전이 64 비트입니까? 프로세스가 실제로 사용하고있는 메모리 용량을 확인 했습니까? –

+3

프로그램 파일 (x86)은 윈도우가 64 비트이지만 파이썬은 – unbeli

+0

이 아님을 암시합니다. – josephmisiti

답변

4

한 번에 한 줄씩 거대한 텍스트 파일을 읽도록 프로그램을 다시 작성하십시오.

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

주 게으름과 합 기능에 의한 수요에 평가합니다 괄호에 발전기의 사용이 쉽게 단지에 get_all_words(path)을 변경하여 수행됩니다.

1

문제는 re.findall()을 사용하여 전체 텍스트를 단어 목록으로 메모리에 읽는 것입니다. 이런 식으로 64GB 이상의 텍스트를 읽고 있습니까? NaiveBayes 알고리즘이 구현 된 방법에 따라 사전 만 메모리에 보관되도록 주파수 사전을 점진적으로 작성하는 것이 좋습니다 (전체 텍스트가 아님). 구현에 대한 추가 정보는 질문에 대한 직접적인 대답을 도울 수 있습니다.

+0

사실은 교차 검증 중에 기능을 생성하는 루프에서 "del"을 호출하여 수정했습니다. – josephmisiti

관련 문제