2017-02-22 167 views
2

在AWS Lambda中使用NLTK語料庫(特別是停用詞)時遇到困難。我知道需要下載語料庫,並使用NLTK.download('stopwords')來完成,並將它們包含在用於上載nltk_data/corpora/stopwords中的lambda模塊的zip文件中。在Python中使用帶有AWS Lambda函數的NLTK語料庫

在代碼中的用法如下:

from nltk.corpus import stopwords 
stopwords = stopwords.words('english') 
nltk.data.path.append("/nltk_data") 

這從拉姆達日誌輸出

module initialization error: 
********************************************************************** 
    Resource u'corpora/stopwords' not found. Please use the NLTK 
    Downloader to obtain the resource: >>> nltk.download() 
    Searched in: 
    - '/home/sbx_user1062/nltk_data' 
    - '/usr/share/nltk_data' 
    - '/usr/local/share/nltk_data' 
    - '/usr/lib/nltk_data' 
    - '/usr/local/lib/nltk_data' 
    - '/nltk_data' 
********************************************************************** 

我還試圖直接通過包括

加載數據返回以下錯誤
nltk.data.load("/nltk_data/corpora/stopwords/english") 

這產生了一個不同的錯誤,低於

module initialization error: Could not determine format for file:///stopwords/english based on its file 
extension; use the "format" argument to specify the format explicitly. 

它有可能從Lambda zip加載數據時出現問題,需要它存儲在外部..說在S3上,但這似乎有點奇怪。

任何想法什麼格式

有沒有人知道我可能會出錯?

+0

試'停用詞= nltk.corpus.stopwords.words(「英語」)'和在代碼塊,它看起來像它看起來在corpora.stopwords的'nltk_data'文件夾,但中間/不見了。這可能只是一個目錄地址問題。不是100%確定這會起作用,因爲我看不到您的系統或文件,但它看起來不錯。 – sconfluentus

+0

使用完整路徑,例如'/ home/sbx_user1062/nltk_data'並嘗試:http://stackoverflow.com/a/22987374/610569 – alvas

+0

如果沒有任何效果,請參閱'magically_find_nltk_data()'from http://stackoverflow.com/questions/36382937/nltk- doesnt-add-nltk-data-to-search-path/36383314#36383314 – alvas

回答

0

如果你禁用詞語料庫是/nltk_data下(基於根,而不是在你的主目錄),你需要告訴NLTK您嘗試訪問語料庫前:在AWS上LAMBDA你

from nltk.corpus import stopwords 
nltk.data.path.append("/nltk_data") 

stopwords = stopwords.words('english') 
+0

我認爲OP的問題比看起來更深。無服務器系統假設所有事情都可以通過代碼完成,只需要最少的外部資源(數據/模型)落在硬盤上。 – alvas

+0

很可能;但是如果資源不在路徑上,也沒有關係...... – alexis

2

需要包括NLTK Python包與Lambda和修改data.py:

path += [ 
    str('/usr/share/nltk_data'), 
    str('/usr/local/share/nltk_data'), 
    str('/usr/lib/nltk_data'), 
    str('/usr/local/lib/nltk_data') 
] 

path += [ 
    str('/var/task/nltk_data') 
    #str('/usr/share/nltk_data'), 
    #str('/usr/local/share/nltk_data'), 
    #str('/usr/lib/nltk_data'), 
    #str('/usr/local/lib/nltk_data') 
] 

您不能包含整個nltk_data目錄,刪除所有zip文件,如果您只需要停用詞,請保存nltk_data - > corpora - >停用詞並轉儲剩下的部分。如果你需要記號器保存nltk_data - >記號器 - > punkt。要下載nltk_data文件夾使用Anaconda Jupyter筆記本電腦和運行

nltk.download()

https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/stopwords.zip

python -m nltk.downloader all 
+0

其中data.py是需要修改的嗎? –

1

我收到了同樣的問題,但我解決它使用環境變量。

  1. 執行「nltk.download()」並將其複製到AWS lambda應用程序的根文件夾中。 (該文件夾應該稱爲「nltk_data」。)
  2. 在您的lambda函數(在AWS控制檯中)的用戶界面中添加「NLTK_DATA」=「./nltk_data」。請參閱圖片。 Configure NLTK DATA for AWS Lambda
相關問題