Файлы данных NLTK НЕ НАЙДЕНЫ при использовании AWS-лямбда-слоя для хранения файлов данныхPython

Программы на Python
Ответить
Anonymous
 Файлы данных NLTK НЕ НАЙДЕНЫ при использовании AWS-лямбда-слоя для хранения файлов данных

Сообщение Anonymous »

TLDR: мой вопрос и проблема
  • Используя SAM, я хочу разработать и протестировать лямбда-функции, использующие NLTK локально на моем компьютере.
  • Я создал лямбда-слой для хранения файлов данных NLTK, необходимых для функций NLTK, которые я хочу запускать.
  • Я создал лямбда-функцию, которая вызывает word_tokenize
  • Я создал лямбда-функцию, которая вызывает word_tokenize который требует файл данных punkt для запуска.
  • Я ожидаю, что лямбда-функция получит файлы данных punkt из созданного мной лямбда-слоя.
    < li>Однако, когда я запускаю лямбда-функцию на своем локальном компьютере, лямбда-выражения не получают файлы данных NLTK из созданного мной слоя и сообщает, что файлы данных не найдены.
  • Что мне здесь не хватает? Это структура папок моего слоя или мой файл yml неправильный? Пожалуйста, помогите!
Это ошибка, возникающая при сборке и Сэм локально вызывает мою лямбда-функцию:
**********************************************************************
Resource punkt not found.
Please use the NLTK Downloader to obtain the resource:

>>> import nltk
>>> nltk.download('punkt')

For more information see: https://www.nltk.org/data.html

Attempted to load tokenizers/punkt/PY3/english.pickle

Searched in:
- '/root/nltk_data'
- '/var/lang/nltk_data'
- '/var/lang/share/nltk_data'
- '/var/lang/lib/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
- ''
**********************************************************************
...more errors (see below for details)

Пожалуйста, помогите!
Справочная информация
  • Использование SAM для создания лямбда-кода
  • Python 3.9
  • Использование NLTK для токенизации строки слов.
  • Машина Windows
Цель:
  • Создать и развернуть лямбда-функцию, которая может маркировать строку слов
Что я сделал
Я уже выполнил ту же инициализацию.
Что я сделал:
  • создайте лямбда-функцию «plag_check», которая выполняет tokenizer
  • создать лямбда-слой «nltkDataFilesLayer», который содержит файлы данных NLTK, необходимые для токенизатора NLTK
  • скорректировал мой template.yml
  • Я собираю с помощью sam build
  • Я тестирую код на своем локальном компьютере с помощью Docker с помощью sam local вызова plag_check --event события/event.json
1. plag_check
Для plag_check я создал папку "plag_check" и внутри у меня есть app.py
plag_check/app.py:
import json
from nltk.tokenize import word_tokenize;

def lambda_handler(event, context):

text = "Hello, how are you doing?"
tokens = word_tokenize(text)
print(tokens)

return {
"statusCode": 200,
"body": json.dumps({
"message": "inbound",
"text":text,
"tokens": tokens,
}),
}

2. nltkDataFilesLayer
В моем проекте SAM есть папка «nltkDataFilesLayer». Его содержание:
- nltkDataFilesLayer/
- nltk_data/
- corpora/
- wordnet.zip
- taggers/
- averaged_perceptron_tagger/
- averaged_perceptron_tagger.zip
- tokenizers/
- punkt/
- punkt.zip

Он содержит только nltk_data, созданный nltk.download на моем локальном компьютере.

ДЕТАЛИ: Как я создал nltkDataFilesLayer папка

  • Я запустил файл сценария Python, который вызывает nltk.download
  • nltk загружает файлы в мой Папка AppData/Roaming/nltk_data на моем компьютере с Windows
  • Я скопировала всю папку nltk_data.
  • Я изменила каталог на проект sam и создала папку " nltkDataFilesLayer"
  • Я вставляю папку nltk_data во вновь созданный "nltkDataFilesLayer"
3. Мой шаблон.yaml
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: >
plag1

Sample SAM Template for plag1

Globals:
Function:
Timeout: 60
MemorySize: 512

Resources:
nltkDataFilesLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: nltkDataFilesLayer
Description: Data files for nltk
ContentUri: ./nltkDataFilesLayer
CompatibleRuntimes:
- python3.9

PCheck:
Type: AWS::Serverless::Function
Properties:
CodeUri: plag_check/
Handler: app.lambda_handler
Runtime: python3.9
Layers:
- !Ref nltkDataFilesLayer
Architectures:
- x86_64


4. Я собираю свой код самостоятельно
здесь проблем нет
5. Я тестирую свой код локально
Я запустил sam local вызова plag_check --event event/event.json
ОШИБКА!
[ERROR] LookupError:
**********************************************************************
Resource punkt not found.
Please use the NLTK Downloader to obtain the resource:

>>> import nltk
>>> nltk.download('punkt')

For more information see: https://www.nltk.org/data.html

Attempted to load tokenizers/punkt/PY3/english.pickle

Searched in:
- '/root/nltk_data'
- '/var/lang/nltk_data'
- '/var/lang/share/nltk_data'
- '/var/lang/lib/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
- ''
**********************************************************************
    raise LookupError(resource_not_found), in findnpickle")sent_tokenizee)
END RequestId: 188fc3e0-f33c-4f40-be51-a6a631ac53b7
REPORT RequestId: 188fc3e0-f33c-4f40-be51-a6a631ac53b7 Init Duration: 0.56 ms Duration: 6051.22 ms Billed Duration: 6052 ms Memory Size: 512 MB Max Memory Used: 512 MB
{"errorMessage": "\n**********************************************************************\n Resource \u001b[93mpunkt\u001b[0m not found.\n Please use the NLTK Downloader to obtain the resource:\n\n \u001b[31m>>> import nltk\n >>> nltk.download('punkt')\n \u001b[0m\n For more information see: https://www.nltk.org/data.html\n\n Attempted to load \u001b[93mtokenizers/punkt/PY3/english.pickle\u001b[0m\n\n Searched in:\n - '/root/nltk_data'\n - '/var/lang/nltk_data'\n - '/var/lang/share/nltk_data'\n - '/var/lang/lib/nltk_data'\n - '/usr/share/nltk_data'\n - '/usr/local/share/nltk_data'\n - '/usr/lib/nltk_data'\n - '/usr/local/lib/nltk_data'\n - ''\n**********************************************************************\n", "errorType": "LookupError", "requestId": "188fc3e0-f33c-4f40-be51-a6a631ac53b7", "stackTrace": [" File \"/var/task/app.py\", line 8, in lambda_handler\n tokens = word_tokenize(text)\n", " File \"/var/task/nltk/tokenize/__init__.py\", line 129, in word_tokenize\n sentences = [text] if preserve_line else sent_tokenize(text, language)\n", " File \"/var/task/nltk/tokenize/__init__.py\", line 106, in sent_tokenize\n tokenizer = load(f\"tokenizers/punkt/{language}.pickle\")\n", " File \"/var/task/nltk/data.py\", line 750, in load\n opened_resource = _open(resource_url)\n", " File \"/var/task/nltk/data.py\", line 876, in _open\n return find(path_, path + [\"\"]).open()\n", " File \"/var/task/nltk/data.py\", line 583, in find\n raise LookupError(resource_not_found)\n"]}


Подробнее здесь: https://stackoverflow.com/questions/765 ... data-files
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»