2017-10-20 63 views
4

我正在写一个python脚本来分析一段文本并以JSON格式返回数据。我正在使用NLTK来分析数据。基本上,这是我的流程:不支持NLTK文件大小的Lambda

创建一个端点(API网关) - >调用我的lambda函数 - >返回所需数据的JSON。

我写我的剧本,部署到拉姆达,但我遇到了这个问题:找不到

资源\ u001b [93mpunkt \ u001b [0米。请使用NLTK 下载来获得资源:

\ u001b [31米>>>进口NLTK nltk.download( 'PUNKT')\ u001b [搜查0米
: - “/家庭/ sbx_user1058/nltk_data ' - '在/ usr /共享/ nltk_data' - '在/ usr/local/share下/ nltk_data' - '/ usr/lib目录/ nltk_data' - '在/ usr/local/lib目录/ nltk_data' - '/ 'var/lang/nltk_data' - '/ var/lang/lib/nltk_data'

即使下载'punkt',我的剧本仍然给了我同样的错误。我试过的解决方案在这里:

Optimizing python script extracting and processing large data files

但问题是,在nltk_data文件夹是巨大的,而拉姆达的​​大小限制。

我该如何解决这个问题? 或者我还可以在哪里使用我的脚本并仍然集成API调用?

我使用无服务器来部署我的Python脚本。

+1

您的文件夹有多大? –

+0

1.4G,这是由于nltk库和standford库。关于如何或在哪里可以托管代码的任何想法? – noor

+0

你不需要下载完整的nltk,如果你只需要'punkt'为什么不下载? –

回答

4

有两件事情可以做:

  1. 的错误好像没有被正确定义的路径,也许将它设置为一个环境变量?

sys.path.append(os.path.abspath('/var/task/nltk_data/')

或这样

  1. 一旦运行nltk.download(),然后把它复制到你的AWS拉姆达应用程序的根文件夹中。 (将名称命名为“nltk_data”。)

  2. 在lambda函数仪表板(在AWS控制台中)中,将NLTK_DATA = ./nltk_data作为key-var环境变量添加。


  • 降低NLTK下载的大小,因为你将不会需要所有这些。

    1. 删除所有zip文件,只保留所需的部分,例如:停用词。可以将其移入:save nltk_data/corpora/stopwords并删除其余部分。

    2. 或者如果您需要标记物保存到nltk_data/tokenizers/punkt。其中大部分可以单独下载:python -m nltk.downloader punkt,然后复制文件。