es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

Imagen 1

Imagen 2

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:

  1. Cambié el nombre de la ruta en data.py de NLTK.
  2. Creé una variable de entorno en la función lambda.
  3. Intenté descargar los datos de nltk mientras ejecutaba la función lambda. Esto no funcionará, ya que no tenemos acceso a internet.
  4. Había descargado todos los datos de NLTK y probado.
  5. 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

Tags:  ,

Answer

  1. Avatar for 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:

    1. Verifica si los datos de NLTK se están extrayendo correctamente en la función Lambda. Puedes imprimir el contenido del directorio /tmp/nltk_data para comprobar si los datos se están extrayendo correctamente.
    2. 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.

    3. También puedes intentar descargar los datos de NLTK durante la ejecución de la función Lambda utilizando el siguiente código:

      import nltk
      nltk.download('wordnet', download_dir='/var/task/nltk_data/')
      nltk.download('omw', download_dir='/var/task/nltk_data/')
      

      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.

    4. 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:

    • Descarga el paquete NLTK y los datos en tu máquina local.
    • Crea un nuevo directorio y copia el directorio nltk del paquete NLTK en el nuevo directorio.
    • Copia el directorio nltk_data extraído en el nuevo directorio.
    • Comprime el nuevo directorio en un archivo ZIP.
    • Crea una nueva capa de Lambda y carga el archivo ZIP.
    • 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.

Comments are closed.