假設服務器空間不是一個約束,是否還建議下載選擇性語料庫而不是全部?在nltk中下載所有語料庫有什麼不利嗎?
我知道,它會增加某些操作的時間,例如創建virtualenv。
但是如果選擇性的語料庫被下載或者全部下載,會不會有一些nltk的性能差異?
假設服務器空間不是一個約束,是否還建議下載選擇性語料庫而不是全部?在nltk中下載所有語料庫有什麼不利嗎?
我知道,它會增加某些操作的時間,例如創建virtualenv。
但是如果選擇性的語料庫被下載或者全部下載,會不會有一些nltk的性能差異?
簡單的答案是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
,你可能有興趣在把它考慮進去。
我不認爲它有任何區別,因爲語料庫是獨立的,你將不得不單獨加載每一個來使用它。如果你願意的話,你可以下載它們。
當然,有一個假設,你不打算爲所有這些通配符導入做一個。
我想它最終會成爲個人偏好。你喜歡'電池包括'和'全套收藏',或者你喜歡'每個單獨出售'更多? – alvas
@ Nathan的回答是完全正確的:在'nltk_data'中沒有任何運行時或內存損失。應該補充的是,如果你只是不喜歡必須一次又一次地運行下載程序,無論何時你嘗試新的東西,或者冒險忽略某個virtualenv,通常足以**下載「book」集合(交互地或''nltk.download(「book」)')。**下載''all「'是矯枉過正(儘管無害)。 – alexis