簡體   English   中英

在 Python 中將 NLTK 語料庫與 AWS Lambda 函數結合使用

[英]Using NLTK corpora with AWS Lambda functions in Python

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

代碼中的用法如下:

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

這會從 Lambda 日志輸出中返回以下錯誤

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 上,但這似乎有點奇怪。

知道什么格式

有誰知道我可能哪里出錯了?

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

  1. 執行“nltk.download()”並將其復制到您的 AWS lambda 應用程序的根文件夾。 (該文件夾應稱為“nltk_data”。)

您可以使用以下代碼

import nltk
nltk.download('punkt', download_dir='nltk_data/')

這會將“punkit”下載到您的根目錄,然后放在您的 dockerfile 下面

COPY nltk_data ./nltk_data
  1. 在 lambda 函數的用戶界面中(在 AWS 控制台中),您添加“NLTK_DATA”=“./nltk_data”。 請看圖片。 為 AWS Lambda 配置 NLTK 數據

另一種解決方案是在 /tmp 位置使用 Lambda 的臨時存儲

所以,你會有這樣的事情:

import nltk
import json
from nltk.tokenize import word_tokenize

nltk.data.path.append("/tmp")

nltk.download("punkt", download_dir = "/tmp")

在運行時,punkt 將下載到可寫的 /tmp 目錄。 但是,如果您有大量並發,這可能不是一個很好的解決方案。

在 AWS Lambda 上,您需要使用 lambda 包含 nltk python 包並修改 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 -> stopwords 並轉儲其余的。 如果您需要分詞器,請保存 nltk_data -> 分詞器 -> punkt。 要下載 nltk_data 文件夾,請使用 anaconda Jupyter notebook 並運行

nltk.download()

要么

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

要么

python -m nltk.downloader all

如果您的停用詞語料庫在/nltk_data (基於 root,而不是您的主目錄下),則您需要嘗試訪問語料庫之前告訴 nltk:

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

stopwords = stopwords.words('english')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM