在 AWS Lambda 中找不到 NLTK 模块

问题描述

我已成功安装了一个名为 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 函数。 然后,根据 this suggestion,我将 cmudict内容(我已手动下载到本地计算机)放入文本文件中,位于 Lambda 根文件夹中名为 nltk_data文件夹中. 我还尝试通过添加具有键/值 NLTK_DATA & ./nltk_data 的环境变量来缓解该问题,并在函数顶部添加nltk.download('cmudict',download_dir="/var/task/nltk_data"),但无济于事。

2. 由于怀疑 data.py 是不工作。

3.我还按照此 suggestion 手动将下载路径设置为 nltk.data.path.append(),但这似乎也不起作用。

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

问题

我需要做什么来确保 nltk.download('cmudict',download_dir='/tmp/') 在我的 Lambda 函数中可供 nltk 使用?

解决方法

已解决

发布答案以帮助遇到类似问题的任何人。

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

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

也就是说文件cmudict需要放在一个叫cmudict的文件夹中,需要放在corpora里面,需要放在{{1}里面}}。

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

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

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

enter image description here

enter image description here

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

nltk_data/corpora/cmudict/cmudict

您可能还希望设置环境变量并修改文件 import nltk from nltk.corpus import cmudict nltk.data.path.append("/var/task/nltk_data") ,如上面链接的答案中所述。