AWS Lambda y NLTK: Recurso wordnet no encontrado
Sé que esta pregunta ha sido respondida en muchos lugares, pero desafortunadamente ninguna de las soluciones mencionadas está funcionando para mí. Así que voy a detallar aquí mi desafío:
Había escrito un programa local de Python con las siguientes importaciones, que funcionaba muy bien. Después de la primera descarga de los datos de nltk, había comentado las últimas 3 líneas.
import nltk
logging.info(nltk.data.path)
from nltk.stem import WordNetLemmatizer
nltk.data.path.append("/tmp")
nltk.download("wordnet", download_dir = "/tmp")
nltk.download("omw-1.4", download_dir = "/tmp")
Más tarde había copiado el paquete nltk y los datos de nltk como nltkdata, comprimidos y subidos a la función lambda cuya arquitectura es x8664:
Cuando subo la función a la función lambda y pruebo la función, recibo el siguiente mensaje de error:
Recurso wordnet no encontrado.
Había buscado en Google y probado diferentes opciones para resolver el desafío:
- Cambié el nombre de la ruta en data.py de NLTK.
- Creé una variable de entorno en la función lambda.
- Intenté descargar los datos de nltk mientras ejecutaba la función lambda. Esto no funcionará, ya que no tenemos acceso a internet.
- Había descargado todos los datos de NLTK y probado.
- Había probado diferentes versiones de Python en AWS Lambda.
¿Puede por favor informarme si hay alguna opción que no haya probado o si estoy cometiendo algún error?
Gracias por su apoyo de antemano.
Saludos,
Chaitanya
davy.ai
Solución
Según la información proporcionada, parece que el paquete NLTK y los datos se cargaron correctamente en la función Lambda. Sin embargo, el mensaje de error “Recurso wordnet no encontrado” indica que la biblioteca NLTK no puede localizar el recurso wordnet descargado.
Una posible razón de este problema podría ser que los datos de NLTK descargados no sean accesibles para la función Lambda. Esto podría deberse al hecho de que los datos se almacenan en el directorio
/tmp
, que puede no ser accesible para la función Lambda que se ejecuta en una arquitectura x86_64.Para resolver este problema, puedes intentar los siguientes pasos:
/tmp/nltk_data
para comprobar si los datos se están extrayendo correctamente.Intenta cambiar la ruta de los datos de NLTK a un directorio diferente que sea accesible para la función Lambda. Por ejemplo, puedes intentar cambiar la ruta a
/var/task/nltk_data
.También puedes intentar descargar los datos de NLTK durante la ejecución de la función Lambda utilizando el siguiente código:
Esto asegurará que los datos de NLTK se descarguen y almacenen en el directorio
/var/task/nltk_data
durante la ejecución de la función Lambda.Nota: Asegúrate de actualizar la ruta de los datos de NLTK en tu código Python en consecuencia.
Alternativamente, también puedes intentar usar una capa de Lambda para incluir la biblioteca NLTK y los datos en tu función. Esto garantizará que los datos de NLTK sean accesibles para la función Lambda que se ejecuta en una arquitectura x86_64.
Puedes crear una capa de Lambda con la biblioteca NLTK y los datos siguiendo estos pasos:
nltk
del paquete NLTK en el nuevo directorio.nltk_data
extraído en el nuevo directorio.Adjunta la capa de Lambda a tu función Lambda.
Una vez que la capa de NLTK esté adjunta, puedes importar y utilizar la biblioteca NLTK en tu función sin tener que preocuparte por la ubicación de los datos de NLTK.
Espero que esto ayude a resolver tu problema. Avísame si tienes alguna otra pregunta o inquietud.