2017-02-22 6 views
2

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

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

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

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

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, но это кажется немного странным.

Любая идея, что форматирование

Кто-нибудь знает, где я мог бы быть неправильно?

+0

попробовать выполнить 'игнорируемых слов = nltk.corpus.stopwords.words («английский»)' и в блоке кода, он выглядит, как он выглядит в 'nltk_data' папку для corpora.stopwords, но промежуточный/пропал, отсутствует. Это может быть проблема с адресом каталога. Не 100% уверены, что это сработает, потому что я не вижу вашу систему или файл, но в противном случае выглядит ОК. – sconfluentus

+0

Используйте полный путь, например. '/ home/sbx_user1062/nltk_data' и попробуйте: http://stackoverflow.com/a/22987374/610569 – alvas

+0

Если ничего не работает, см.' magically_find_nltk_data() 'из http://stackoverflow.com/questions/36382937/nltk- doesnt-add-nltk-data-to-search-path/36383314 # 36383314 – alvas

ответ

0

Если игнорируемых слов корпус находится под /nltk_data (основано на корню, а не под вашей домашней директории), вы должны сказать NLTK перед тем вы пытаетесь получить доступ к корпус:

from nltk.corpus import stopwords 
nltk.data.path.append("/nltk_data") 

stopwords = stopwords.words('english') 
+0

Я думаю проблема ОП глубже, чем кажется. Безсерверные системы предполагают, что все может быть выполнено в коде с минимальным внешним ресурсом (данными/моделями), который падает на жесткий диск. – alvas

+0

Вполне может быть; но не имеет значения, если ресурс еще не на пути ... – alexis

2

на AWS Lambda вас должны включать в себя пакет питона NLTK с лямбда и изменить 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 использовать папку анаконды Jupyter ноутбук и запустить

nltk.download()

или

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

или

python -m nltk.downloader all 
+0

где data.py, который необходимо изменить? –

1

У меня была такая же проблема и раньше, но я решил его с помощью переменная среды.

  1. Выполните «nltk.download()» и скопируйте его в корневую папку вашего приложения AWMS лямбда. (Папка должна называться «nltk_data».)
  2. В пользовательском интерфейсе вашей лямбда-функции (в консоли AWS) вы добавляете «NLTK_DATA» = «./nltk_data». См. Изображение. Configure NLTK DATA for AWS Lambda
Смежные вопросы