2017-10-20 64 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,然後複製文件。