2017-01-02 1 views
0

서버 공간이 제약 조건이 아니라고 가정 할 때, 전체 선택이 아니라 선택형 자료를 다운로드하는 것이 좋습니다.nltk에서 모든 자료를 다운로드 할 때 단점이 있습니까?

나는 virtualenv의 특정 작업 .e.g 생성시 추가 될 것이라고 알고 있습니다.

그러나 선택 카탈로그를 다운로드했거나 모두 다운로드 한 경우 성능 차이가 있습니까?

+0

개인적인 취향으로 끝나는 것 같습니다. '배터리 포함'과'풀 세트 콜렉션'을 좋아 하느냐'따로 따로 팔고 싶니?'더 좋아하니? – alvas

+1

@ Nathan의 대답은 전적으로 정확합니다 :'nltk_data'에서 사용되지 않은 리소스를 갖는 것에 대한 런타임이나 메모리 패널티가 없습니다. 새로운 무언가를 시도하거나 virtualenv에 대한 무언가를 간과 할 위험이있을 때마다 반복적으로 다운로더를 반복적으로 실행해야한다는 것을 싫어하는 경우, 일반적으로 "책"컬렉션을 다운로드하는 것만으로 충분합니다 (대화식으로 또는 'nltk.download ("book")'). **''all "'다운로드는 과도하다 (무해하지만). – alexis

답변

4

간단한 대답은 no

가 NLTK이 필요할 때까지로드되지 않은 말뭉치에 대한 LazyCorpusLoader라는 클래스를 사용합니다. 따라서 코퍼스를 가져 오더라도 즉시 메모리에로드되지 않습니다. 갈색 코퍼스와 예를 들어

:

메모리 사용에 관해서는
>>> from nltk import corpus 
>>> type(corpus.brown) 
<class 'nltk.corpus.util.LazyCorpusLoader'> 

메모리 사용

의 말뭉치 못해 읽기까지로드 할 수. 우리는 resource 모듈을 사용하여 이것을 볼 수 있습니다. 다음은 갈색 코퍼스의 예입니다.

>>> import resource 
>>> from nltk import corpus 
>>> 
>>> # show memory used after importing corpus 
... 
>>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 
77780 
>>> # show memory usage after import ALL corpuses 
... 
>>> from nltk.corpus import * 
>>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 
77780 

여기서 알 수 있듯이 메모리 사용에는 변화가 없습니다. 당신이 메모리에 코퍼스 데이터를로드 한 후 그것은 단지 기본 다운로드 ~/nltk_data/corpora에 시스템과 같은 유닉스에 말뭉치 데이터에 의해 tagged_sents()

>>> sents = corpus.brown.tagged_sents() 
>>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 
78276 

공간 사용

NLTK를 호출하여이 예에서 증가 할 것이다. 이 답변을 작성하면 모든 자료를 최신으로 다운로드해야합니다.

크기에 대한 빠른 검사는 보여줍니다

$ du -sh ~/nltk_data/corpora/ 
8.5G ~/nltk_data/corpora/ 

난 당신이 해당 서버 공간 제약이 아니라 인해 LazyCorpusLoader에, 당신은 계정에 복용에 관심이있을 수 있습니다 언급 알고있다.

0

코퍼스가 독립적이고 각기 별도로로드해야하기 때문에 차이가 있다고 생각하지 않습니다. 원하면 모두 다운로드 할 수 있습니다.

물론 모든 항목에 대해 와일드 카드 가져 오기을 만들지 않을 것이라는 가정이 있습니다.

관련 문제