下载nltk中的所有语料库有什么缺点吗?

Dhr*_*hak 0 python nltk

假设服务器空间不是限制,是否仍然建议下载选择性语料库而不是全部?

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

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

Nat*_*Coy 5

简单的答案是no

NLTK 使用一个名为LazyCorpusLoader语料库的类,该类在需要时才会加载。因此,即使您导入语料库,它也不会立即加载到内存中。

例如,对于棕色语料库:

>>> from nltk import corpus
>>> type(corpus.brown)
<class 'nltk.corpus.util.LazyCorpusLoader'>
Run Code Online (Sandbox Code Playgroud)

内存使用情况

至于内存使用情况,语料库在读取之前不会被加载。我们可以通过使用该模块来查看这一点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
Run Code Online (Sandbox Code Playgroud)

如您所见,内存使用情况没有变化。只有在将语料库数据加载到内存中后,它才会增加,在本例中通过调用tagged_sents()

>>> sents = corpus.brown.tagged_sents()
>>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
78276
Run Code Online (Sandbox Code Playgroud)

空间使用

默认情况下,NLTK 将类 Unix 系统上的语料库数据下载到~/nltk_data/corpora. 在写完这个回复后,我应该拥有所有语料库的最新下载。

快速检查尺寸显示:

 $ du -sh ~/nltk_data/corpora/
 8.5G   ~/nltk_data/corpora/
Run Code Online (Sandbox Code Playgroud)

我知道您提到服务器空间不是一个限制,但由于LazyCorpusLoader,您可能有兴趣考虑它。