2017-10-20 16 views
4

J'écris un script python qui analyse un morceau de texte et renvoie les données au format JSON. J'utilise NLTK, pour analyser les données. Fondamentalement, ceci est mon flux:Lambda ne supportant pas la taille du fichier NLTK

Créer un point de terminaison (passerelle API) -> appelle ma fonction lambda -> renvoie le JSON des données requises.

j'ai écrit mon script, déployé à lambda, mais je suis tombé sur cette question:

ressources \ u001b [93mpunkt \ u001b [0m introuvable. S'il vous plaît utiliser le NLTK Downloader pour obtenir la ressource:

\ u001b [31m >>> import NLTK nltk.download ('Punkt') \ u001b [0 m
Chercher dans: - «/home/sbx_user1058/nltk_data ' - '/ usr/share/nltk_data' - '/ usr/local/share/nltk_data' - '/ usr/lib/nltk_data' - '/ usr/local/lib/nltk_data' -'/var/lang/nltk_data » - '/ var/lang/lib/nltk_data'

Même après le téléchargement ing 'punkt', mon script m'a toujours donné la même erreur. J'ai essayé les solutions ici:

Optimizing python script extracting and processing large data files

mais la question est, le dossier nltk_data est énorme, alors que lambda a une restriction de taille.

Comment puis-je résoudre ce problème? Où puis-je utiliser mon script et intégrer l'appel d'API? J'utilise serverless pour déployer mes scripts Python.

+1

Quelle est votre dossier? –

+0

1.4G, cela est dû à la bibliothèque nltk et la bibliothèque standford. Des idées sur comment ou où je peux héberger le code? – noor

+0

Vous n'avez pas besoin de télécharger full nltk, Si vous avez juste besoin de 'punkt' pourquoi ne pas télécharger juste cela? –

Répondre

4

Il y a deux choses que vous pouvez faire:

  1. Les erreurs semble que le chemin n'est pas défini correctement, réglez peut-être comme une variable d'env?

sys.path.append(os.path.abspath('/var/task/nltk_data/')

ou cette façon

  1. Une fois que vous exécutez nltk.download(), puis copiez-le dans le dossier racine de votre application AWS lambda. (Nom du répertoire à appeler "nltk_data".)

  2. Dans la fonction lambda tableau de bord (dans la console AWS), ajoutez NLTK_DATA = ./nltk_data comme une variable d'environnement clé var.


  1. réduire la taille des téléchargements NLTK, puisque vous ne serez pas besoin tous.

    1. Supprimer tous les fichiers zip, ne conserver que la section nécessaire, par exemple: mots vides. Cela peut être déplacé dans: save nltk_data/corpora/stopwords et supprimer le reste.

    2. ou Si vous avez besoin de tokenizers enregistrer à nltk_data/tokenizers/punkt. La plupart d'entre eux peuvent être téléchargés séparément: python -m nltk.downloader punkt, puis copier sur les fichiers.