问题描述
我已成功安装了一个名为 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}里面}}。
这可以通过在以下任一方式中创建路径来实现:
-
在 Lambda 控制台中手动(右键单击以创建文件夹/文件并将语料库内容粘贴到编辑器中)
-
通过在本地机器上创建文件结构
nltk_data
,压缩文件并将压缩文件上传到 Lambda 编辑器。
注意 - 您可能还需要修改 lambda 代码以反映语料库的预期路径,如下所示:
nltk_data/corpora/cmudict/cmudict
您可能还希望设置环境变量并修改文件 import nltk
from nltk.corpus import cmudict
nltk.data.path.append("/var/task/nltk_data")
,如上面链接的答案中所述。