假设服务器空间不是约束,是否仍建议下载选择性语料库而不是全部?
我知道,它会增加某些操作的时间。例如virtualenv的创建。
但如果下载选择性语料库,或者全部下载了,那么nltk会有一些性能差异吗?
答案 0 :(得分: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
NLTK默认情况下将unix类系统上的语料库数据下载到~/nltk_data/corpora
。写完这个回复后,我应该拥有所有语料库的最新下载。
快速检查尺寸显示:
$ du -sh ~/nltk_data/corpora/
8.5G ~/nltk_data/corpora/
我知道您提到服务器空间不是约束,但由于LazyCorpusLoader
,您可能有兴趣将其考虑在内。
答案 1 :(得分:0)
我认为它没有任何区别,因为语料库是独立的,你必须分别加载每个语料库才能使用它。如果您愿意,可以下载所有这些内容。
当然,假设您不打算为所有这些通配符导入。