2013-10-20 4 views
2

저는 Python 및 Gensim을 처음 사용합니다. 현재 gensim (http://radimrehurek.com/gensim/tut1.html)에있는 자습서 중 하나를 통해 작업하고 있습니다. 사전 내장 취득을 시작하기 전에모든 텍스트를로드하지 않고 사전 작성

# collect statistics about all tokens 
>>> dictionary = corpora.Dictionary(line.lower().split() for line in open('mycorpus.txt')) 

1) 파일 mycorpus.txt 완전히 메모리에로드 : 나는이 코드 라인에 대한 두 가지 질문이 있습니다?

Similarly, to construct the dictionary without loading all texts into memory 

하지만 난 내 활동 모니터에서 RAM 사용을 모니터링 할 때, 파이썬 프로세스는 3 기가 파일 (I 프로세스 중간에 사망)에 대한 1 기가 조회수 : 튜토리얼은 명시 적으로 어떤을 말한다. 이것은 3 기가의 텍스트 파일에 대한 사전이 훨씬 더 작을 것이라고 가정 할 때 이상합니다. 누군가 나를 위해이 점을 명확히 할 수 있습니까?

2) 각 행을 읽는 동안 할 수 있도록이 행을 어떻게 다시 코딩 할 수 있습니까? 진행 상황을 보려면 화면에 인쇄하고 싶습니다. 내 시도는 다음과 같습니다.

i = 1 

for line in f: 
    if i % 1000 == 0: 
     print i 
    dictionary = corpora.Dictionary([line.lower().split()]) 
    i += 1 

사전은 모든 줄마다 다시 초기화되므로이 기능이 작동하지 않습니다.

나는 이것이 매우 n00b 문제라는 것을 알고 있습니다. 당신의 도움과 인내심에 감사드립니다.

답변

3

1) 아니요, 그들은 사전 생성자에게 한 번에 한 줄만 출력하는 생성기 개체를 전달하고 있습니다. 파이썬에서 내부적으로 수행하는 캐싱 외에도, 기본적으로 한 번에 한 줄만 읽습니다.

사전을 만든 후에는 원래 파일과 거의 같은 양의 메모리가 사용됩니다. 결국 모든 정보가 저장 될 것입니다.

2) 지금까지 그것을 레코딩으로, 당신은 당신의 작업을 수행하고 전에 그랬던 것처럼 라인 산출 새로운 생성 할 수 있습니다 : 나는 사전은 별개의 단어를 저장하는 생각

def generator(f) 
    for i, line in enumerate(f): 
     if i % 1000 == 0: 
      print i 
     yield line 

with open('mycorpus.txt') as f: 
    dictionary = corpora.Dictionary(line.lower().split() for line in generator(f)) 
+0

1) 자신의 코퍼스의 모든 문서에 대한 관련 단어 수? 나는. 문서 당 정보가 손실되고 집계 정보 만 남아 있습니다. – mchangun

+0

@mchangun - 아마도 가능합니다. 나는'corpora.Dictionary'에 대해서는 전혀 모른다. 나는 그것이 정규 사전과 대략 동일하다고 가정했다. – mgilson