是否可以将Python的nltk.download('punkt')导入Google Cloud Functions?

问题描述 投票:0回答:1

是否可以将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'
    - ''
**********************************************************************
python google-cloud-platform google-cloud-functions nltk
1个回答
1
投票

查看uploading files with your Cloud function的说明。具体来说,由于您可以上传文件,因此可以修改nltk以仅使用这些文件:

跟随official NLTK documentation,您可以“将您的NLTK_DATA环境变量设置为指向顶级nltk_data文件夹。”

将它们组合在一起,您将得到:

  1. 使用python -m nltk.downloader punkt下载数据(在计算机上)
  2. 将NLTK目录(在上述文档中的计算机上的路径上载为nltk_data目录,在您的功能环境的根目录中创建]上传>]
  3. 配置代码以找到该文件夹​​:

  4. 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
    

    编辑:似乎使用环境变量导出路径并没有达到预期的效果,所以让代码中明确显示该路径

  1. [在您的计算机上下载数据

    import os
    download_dir = os.path.abspath('my_nltk_dir')
    os.makedirs(download_dir)
    import nltk
    nltk.download('punkt', download_dir=download_dir)
    
  2. 将目录my_nltk_dir添加到python脚本的同一文件夹中。这将是

  3. PROJECT_ROOT/
    |-- my_code.py
    |-- my_nltk_dir/
        |-- ...
    
  4. 在您的代码中,使用引用数据

  5. 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')
    )
    
© www.soinside.com 2019 - 2024. All rights reserved.