首页 > 解决方案 > 在 Google Cloud 函数中包含 NLTK

问题描述

我正在尝试使用来自 Python 的 NLTK 库的词形还原和标记器部署谷歌云功能。NLTK 需要使用 punct 和 wordnet 包下载

import nltk
nltk.download('punct')
nltk.download('wordnet')

因此这些不能在 requirements.txt 文件中指定。在requirement.txt中唯一可以提到的是nltk。

我确实查看了这个类似的问题,该问题引导我进入关于在 python 中指定依赖项的谷歌文档页面,并按照那里的所有步骤进行操作。

首先,我将整个虚拟环境的依赖项移动到一个名为 lib 的目录中

pip install -t lib nltk

然后我在__init__.pylib 目录中创建了文件。并将我所有的导入语句更改为从 lib 导入。但是,当使用 lib 目录中的 nltk 包时,我经常会抛出错误,我认为这是由于相对路径造成的。

Traceback (most recent call last): File "main.py", line 1, in <module> from lib.nltk.stem import WordNetLemmatizer File "/Users/aakashpatel/Documents/resume-compare/lib/nltk/__init__.py", line 99, in <module> from nltk.internals import config_java ModuleNotFoundError: No module named 'nltk'

如果我在lib/nltk文件夹的__init__.py文件下查看有一个导入语句from nltk.internals import config_java,它无法找到,因为它必须转换为from lib.nltk.internals import config_java. 而且我不能继续改变这一件事,因为会有很多其他地方简单地提到导入,例如从 nltk 或其他东西。

我该如何解决这个问题?我是否没有遵循正确部署到 Google Cloud Function 的所有步骤?

标签: pythongoogle-cloud-platformgoogle-cloud-functionsnltk

解决方案


我想到了。

您需要在$PYTHONPATH变量中添加 lib 目录的路径。你可以简单地写

import sys
sys.path.append('lib')

但仅此一项并不能解决问题。NLTK 下载保存在nltk_data目录中,因此必须将目录复制到lib包的文件夹或文件夹,然后将路径附加到nlkt.data.

import sys
sys.path.append('lib/')

import lib.nltk as nltk
nltk.data.path.append('lib/nltk_data/')

因此,按照上面所附链接中描述的步骤,顶部的代码块应该可以解决 Google Cloud Function 中的 NLTK 问题。


推荐阅读