2017-01-02 31 views
0

假设服务器空间不是一个约束,是否还建议下载选择性语料库而不是全部?在nltk中下载所有语料库有什么不利吗?

我知道,它会增加某些操作的时间,例如创建virtualenv。

但是如果选择性的语料库被下载或者全部下载,会不会有一些nltk的性能差异?

+0

我想它最终会成为个人偏好。你喜欢'电池包括'和'全套收藏',或者你喜欢'每个单独出售'更多? – alvas

+1

@ Nathan的回答是完全正确的:在'nltk_data'中没有任何运行时或内存损失。应该补充的是,如果你只是不喜欢必须一次又一次地运行下载程序,无论何时你尝试新的东西,或者冒险忽略某个virtualenv,通常足以**下载“book”集合(交互地或''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 

正如你所看到的,内存使用率没有变化。它不仅会语料数据加载到内存中后,通过调用tagged_sents()

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

使用空间

默认下载UNIX上的语料数据,如系统~/nltk_data/corpora NLTK增加,在这个例子中。在撰写此回复时,我应该为所有语料库提供最新的下载。

规模上的快速检查显示:

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

我知道你提到的服务器空间不是约束,但由于LazyCorpusLoader,你可能有兴趣在把它考虑进去。

0

我不认为它有任何区别,因为语料库是独立的,你将不得不单独加载每一个来使用它。如果你愿意的话,你可以下载它们。

当然,有一个假设,你不打算为所有这些通配符导入做一个

相关问题