是否可以将Python的nltk.download('punkt')导入Google Cloud Functions?我发现将语句手动添加到main.py的代码块中会极大地减慢我的函数处理速度,因为每次运行时都必须下载punkt。是否有其他方法可以通过以其他方式调用punkt来消除这种情况?
EDIT#1:-我编辑了代码和程序结构以匹配Barak的建议,但是我仍然遇到相同的错误:
Error: function terminated. Recommended action: inspect logs for termination reason. Details:
**********************************************************************
Resource [93mpunkt[0m not found.
Please use the NLTK Downloader to obtain the resource:
[31m>>> import nltk
>>> nltk.download('punkt')
[0m
For more information see: https://www.nltk.org/data.html
Attempted to load [93mtokenizers/punkt/PY3/english.pickle[0m
Searched in:
- '/tmp/nltk_data'
- '/env/nltk_data'
- '/env/share/nltk_data'
- '/env/lib/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
- ''
**********************************************************************
查看uploading files with your Cloud function的说明。具体来说,由于您可以上传文件,因此可以修改nltk以仅使用这些文件:
跟随official NLTK documentation,您可以“将您的NLTK_DATA环境变量设置为指向顶级nltk_data文件夹。”
将它们组合在一起,您将得到:
python -m nltk.downloader punkt
下载数据(在计算机上)nltk_data
目录,在您的功能环境的根目录中创建]上传>]配置代码以找到该文件夹:
import os
root = os.path.dirname(path.abspath(__file__))
nltk_dir = os.path.join(root, 'nltk_data') # Your folder name here
os.environ['NLTK_DATA'] = nltk_dir
编辑:似乎使用环境变量导出路径并没有达到预期的效果,所以让代码中明确显示该路径
[在您的计算机上下载数据
import os
download_dir = os.path.abspath('my_nltk_dir')
os.makedirs(download_dir)
import nltk
nltk.download('punkt', download_dir=download_dir)
将目录my_nltk_dir
添加到python脚本的同一文件夹中。这将是
PROJECT_ROOT/
|-- my_code.py
|-- my_nltk_dir/
|-- ...
在您的代码中,使用引用数据
import ntlk.data
root = os.path.dirname(path.abspath(__file__))
download_dir = os.path.join(root, 'my_nltk_dir')
nltk.data.load(
os.path.join(download_dir, 'tokenizers/punkt/english.pickle')
)