有什么方法可以将Python的nltk.download('punkt')导入Google Cloud Functions吗?

Luc*_*ike 1 python nltk google-cloud-platform google-cloud-functions

有什么方法可以将Python的nltk.download('punkt')导入Google Cloud Functions吗?我发现手动将语句添加到 main.py 中的代码块中会显着减慢我的函数处理速度,因为每次运行时都必须下载 punkt。有没有什么方法可以通过以其他方式调用 punkt 来消除这种情况?

编辑#1:-我编辑了我的代码和程序结构以匹配巴拉克的建议,但我不断收到相同的错误:

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'
    - ''
**********************************************************************
Run Code Online (Sandbox Code Playgroud)

小智 5

将 nltk 添加到您的requirements.txt

在本地计算机上安装 nltk(如果尚未安装):

pip install nltk
Run Code Online (Sandbox Code Playgroud)

然后下载 nltk_data 文件。就我的分词器而言,我需要Punkt分词器模块:

python -m nltk.downloader punkt  
Run Code Online (Sandbox Code Playgroud)

将它们(它们位于 Roaming/ for Windows 中)复制到您的根文件夹(即与您的函数一起):

cp -r C:\Users\<USER>\AppData\Roaming\nltk_data\* YOUR\ROOT\FOLDER\nltk_data\       
Run Code Online (Sandbox Code Playgroud)

在主要 python 函数的开头,或者在使用 nltk 之前,添加以下代码 - 基本上,它获取nltk_data 所在的路径,并告诉nltk查看此文件夹内部:

  root = os.path.dirname(os.path.abspath(__file__))
  download_dir = os.path.join(root, 'nltk_data')
  os.chdir(download_dir)
  nltk.data.path.append(download_dir)
Run Code Online (Sandbox Code Playgroud)

最后,提交/推送后(如果您使用的是 Cloud Source Repos),(重新)部署您的函数!