Использование NLTK-корпусов с функциями AWS Lambda в Python

Я сталкиваюсь с трудностями при использовании NLTK-корпусов (в частности, стоп-слов) в AWS Lambda. Я знаю, что корпуса необходимо загрузить и сделать это с помощью NLTK.download («стоп-слова») и включить их в zip-файл, используемый для загрузки модулей лямбда в nltk_data / corpora / stopwords.

Использование в коде выглядит следующим образом:

from nltk.corpus import stopwords stopwords = stopwords.words('english') nltk.data.path.append("/nltk_data") 

Это возвращает следующую ошибку из вывода журнала Lambda

 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' ********************************************************************** 

Я также попытался загрузить данные напрямую, включив

 nltk.data.load("/nltk_data/corpora/stopwords/english") 

Это приводит к другой ошибке ниже

 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. 

Возможно, у него возникла проблема с загрузкой данных из zamba Lambda и требуется, чтобы он хранился извне .. скажем, на S3, но это кажется немного странным.

Любая идея, какой формат

Кто-нибудь знает, где я могу ошибиться?

3 Solutions collect form web for “Использование NLTK-корпусов с функциями AWS Lambda в Python”

на AWS Lambda вам нужно включить пакет nltk python с лямбдой и изменить data.py:

 path += [ str('/usr/share/nltk_data'), str('/usr/local/share/nltk_data'), str('/usr/lib/nltk_data'), str('/usr/local/lib/nltk_data') ] 

в

 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, удалять все zip-файлы, и если вам нужны только стоп-слова, сохраните nltk_data -> corpora -> stopwords и сбрасывайте остальные. Если вам нужны токенизаторы, сохраните nltk_data -> токенизаторы -> punkt. Чтобы скачать папку nltk_data, используйте записную книжку anaconda Jupyter и запустите

nltk.download()

или

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

или

 python -m nltk.downloader all 

Если ваш файл подстановок находится под /nltk_data (на основе root, а не под домашним каталогом), вам нужно сообщить nltk, прежде чем пытаться получить доступ к корпусу:

 from nltk.corpus import stopwords nltk.data.path.append("/nltk_data") stopwords = stopwords.words('english') 

Раньше у меня была такая же проблема, но я решил ее использовать переменную окружения.

  1. Выполните «nltk.download ()» и скопируйте его в корневую папку вашего приложения AWS лямбда. (Папка должна называться «nltk_data».)
  2. В пользовательском интерфейсе вашей лямбда-функции (в консоли AWS) вы добавляете «NLTK_DATA» = «./nltk_data». См. Изображение. Настройка данных NLTK для AWS Lambda
  • Проблема с импортом stanford pos tagger в nltk
  • NLTK tag голландское предложение
  • Загрузка SSL-данных NLTK
  • Python: извлечение предложения с определенным словом
  • Список остановок NLTK
  • Существуют ли в NLTK классы для нормализации и канонизации текста?
  • Извлечение слов из txt-файла с помощью python
  • Эффективный анализатор грамматики без контекста, предпочтительно Python-friendly
  • Какой спам-корпус я могу использовать в NLTK?
  • как я могу использовать библиотеки python в C ++?
  • получить индексы исходного текста из nltk word_tokenize
  • Python - лучший язык программирования в мире.