2017-01-02 54 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

我不認爲它有任何區別,因爲語料庫是獨立的,你將不得不單獨加載每一個來使用它。如果你願意的話,你可以下載它們。

當然,有一個假設,你不打算爲所有這些通配符導入做一個

相關問題