首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中将NLTK语料库与AWS Lambda函数结合使用

在Python中将NLTK语料库与AWS Lambda函数结合使用
EN

Stack Overflow用户
提问于 2017-02-22 12:20:18
回答 4查看 8.1K关注 0票数 14

在AWS Lambda中使用NLTK语料库(特别是停用词)时,我遇到了一个困难。我知道需要下载语料库,并且已经使用NLTK.download('stopwords')完成了下载,并将它们包含在用于上传nltk_data/ corpora /stopwords中的lambda模块的压缩文件中。

代码中的用法如下:

代码语言:javascript
复制
from nltk.corpus import stopwords
stopwords = stopwords.words('english')
nltk.data.path.append("/nltk_data")

这将从Lambda日志输出中返回以下错误

代码语言:javascript
复制
module initialization error: 
**********************************************************************
  Resource u'corpora/stopwords' not found.  Please use the NLTK
  Downloader to obtain the resource:  >>> nltk.download()
  Searched in:
    - '/home/sbx_user1062/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/nltk_data'
**********************************************************************

我还尝试通过包含以下内容来直接加载数据

代码语言:javascript
复制
nltk.data.load("/nltk_data/corpora/stopwords/english")

这会产生不同的错误,如下所示

代码语言:javascript
复制
module initialization error: Could not determine format for file:///stopwords/english based on its file
extension; use the "format" argument to specify the format explicitly.

它可能在从Lambda zip加载数据时出现问题,需要将其存储在外部。比如在S3上,但这似乎有点奇怪。

知道什么格式的

有谁知道我可能会出错的地方吗?

EN

回答 4

Stack Overflow用户

发布于 2017-08-29 05:35:28

我以前也遇到过同样的问题,但我使用环境变量解决了它。

  1. 执行"nltk.download()“并将其复制到您的AWS lambda应用程序的根文件夹中。(该文件夹应命名为“nltk_data”。)

为此,您可以使用以下代码

代码语言:javascript
复制
import nltk
nltk.download('punkt', download_dir='nltk_data/')

这将下载'punkit‘到你的根目录,然后放在下面的dockerfile中

代码语言:javascript
复制
COPY nltk_data ./nltk_data

  1. 在您的lambda函数的用户界面中(在亚马逊网络服务控制台中),您可以添加"NLTK_DATA“= "./nltk_data”。请看图片。

票数 16
EN

Stack Overflow用户

发布于 2019-03-20 09:48:57

另一种解决方案是在位置/tmp使用Lambda的临时存储

所以,你会有这样的东西:

代码语言:javascript
复制
import nltk
import json
from nltk.tokenize import word_tokenize

nltk.data.path.append("/tmp")

nltk.download("punkt", download_dir = "/tmp")

在运行时,punkt将下载到/tmp目录,该目录是可写的。然而,如果你有巨大的并发性,这可能不是一个很好的解决方案。

票数 15
EN

Stack Overflow用户

发布于 2017-07-13 07:47:06

在AWS Lambda上,您需要在lambda中包含nltk python包,并修改data.py:

代码语言:javascript
复制
path += [
    str('/usr/share/nltk_data'),
    str('/usr/local/share/nltk_data'),
    str('/usr/lib/nltk_data'),
    str('/usr/local/lib/nltk_data')
]

代码语言:javascript
复制
path += [
    str('/var/task/nltk_data')
    #str('/usr/share/nltk_data'),
    #str('/usr/local/share/nltk_data'),
    #str('/usr/lib/nltk_data'),
    #str('/usr/local/lib/nltk_data')
]

您不能包含整个nltk_data目录,删除所有压缩文件,如果您只需要停用字,则保存nltk_data ->语料库->停用字并转储其余部分。如果您需要令牌化器,请保存nltk_data ->令牌化器-> punkt。要下载nltk_data文件夹,请使用anaconda Jupyter notebook并运行

nltk.download()

https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/stopwords.zip

代码语言:javascript
复制
python -m nltk.downloader all
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42382662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档