在 AWS Lambda 中找不到 NLTK 模块

NLTK module not found in AWS Lambda

我已经成功安装了一个名为 pronounceable 的软件包,用于 Lambda 函数。 然而,似乎 NLTK 语料库 cmudict 是一个无法定位的依赖项。 这意味着使用命令 import pronounceable 会导致以下错误。

>  Resource [93mcmudict[0m not found.   Please use the NLTK Downloader
> to obtain the resource:
> 
>   [31m>>> import nltk
>   >>> nltk.download('cmudict')   [0m   For more information see: https://www.nltk.org/data.html
> 
>   Attempted to load [93mcorpora/cmudict[0m
> 
>   Searched in:
>     - './nltk_data'
>     - '/home/sbx_user1051/nltk_data'
>     - '/var/lang/nltk_data'
>     - '/var/lang/share/nltk_data'
>     - '/var/lang/lib/nltk_data'
>     - '/usr/share/nltk_data'
>     - '/usr/local/share/nltk_data'
>     - '/usr/lib/nltk_data'
>     - '/usr/local/lib/nltk_data'

我尝试了什么

1. 这是我用来安装包的代码,方法是创建一个层以应用于我的 Lambda 函数。

# STEP 1 
mkdir folder
cd folder
virtualenv v-env
source ./v-env/bin/activate
pip install pronounceable
deactivate 


# STEP 2
mkdir python
cd python
cp -r ../v-env/lib64/python3.6/dist-packages/* .
cd ..
zip -r pronounceable_layer.zip python
aws lambda publish-layer-version --layer-name pronounceable --zip-file fileb://panda_layer.zip --compatible-runtimes python3.6

然后我简单地选择了结果层并将其添加到 Lambda 函数中。 然后,根据 ,我将 cmudict 的内容(我已手动下载到我的本地计算机)放入 Lambda 根文件夹中名为 nltk_data 的文件夹内的文本文件中. 我还尝试通过添加带有 key/value NLTK_DATA./nltk_data 的环境变量来缓解此问题,并在函数顶部添加 nltk.download('cmudict', download_dir="/var/task/nltk_data"),但无济于事。

2. 我还使用 Cloud9 打开 NLTK 文件 data.py 并根据此 修改路径,因为怀疑 nltk.data.path.append() 没有工作。

3. 我也按照这个手动设置下载路径到nltk.download('cmudict', download_dir='/tmp/'),但是这似乎也不起作用。

我不知道接下来需要做什么。

问题

我需要做什么来确保 cmudict 可供 nltk 在我的 Lambda 函数中使用?

已解决

发布答案以防遇到类似问题的人有所帮助。

我通过再次查看表明无法找到语料库文件 cmudict 的错误消息解决了这个问题。 该文件的预期完整路径如下:

/var/task/nltk_data/corpora/cmudict/cmudict

也就是说,文件cmudict需要放在一个名为cmudict的文件夹中,这个文件夹需要放在corpora里面,这个文件夹需要放在nltk_data.

这可以通过在以下任一方式中创建路径来实现:

  1. 在 Lambda 控制台中手动(右键单击创建 folder/file 并将语料库内容粘贴到编辑器中)

  2. 通过在本地计算机上创建文件结构 nltk_data/corpora/cmudict/cmudict,压缩文件并将 zip 文件上传到 Lambda 编辑器。

注意 - 您可能还需要修改 lambda 代码以反映语料库的预期路径,如下所示:

import nltk
from nltk.corpus import cmudict
nltk.data.path.append("/var/task/nltk_data")

您可能还希望设置环境变量并修改文件 data.py,如上面链接的答案中所述。