python - what - El recurso ''corpora/wordnet'' no se encuentra en Heroku
nltk reference (6)
Estoy tratando de hacer que NLTK y wordnet trabajen en Heroku. Ya lo hice
heroku run python
nltk.download()
wordnet
pip install -r requirements.txt
Pero me sale este error:
Resource ''corpora/wordnet'' not found. Please use the NLTK
Downloader to obtain the resource: >>> nltk.download()
Searched in:
- ''/app/nltk_data''
- ''/usr/share/nltk_data''
- ''/usr/local/share/nltk_data''
- ''/usr/lib/nltk_data''
- ''/usr/local/lib/nltk_data''
Sin embargo, he mirado en / app / nltk_data y está ahí, así que no estoy seguro de lo que está pasando.
Actualizar
Como señaló Kenneth Reitz , se ha agregado una solución mucho más simple al paquete de construcción heroku-python. Agregue un archivo nltk.txt
a su directorio raíz y enumere sus cuerpos dentro. Consulte https://devcenter.heroku.com/articles/python-nltk para obtener más información.
Respuesta original
Aquí hay una solución más limpia que le permite instalar los datos de NLTK directamente en Heroku sin agregarlos a su repositorio git.
Utilicé pasos similares para instalar https://devcenter.heroku.com/articles/python-nltk en Heroku, que usa NLTK como una dependencia. He realizado algunos ajustes menores en mi código original en los pasos 3 y 4 que deberían funcionar para una instalación solo NLTK.
El paquete de compilación heroku predeterminado incluye un paso post_compile
que se ejecuta después de que se hayan completado todos los pasos de compilación predeterminados:
# post_compile
#!/usr/bin/env bash
if [ -f bin/post_compile ]; then
echo "-----> Running post-compile hook"
chmod +x bin/post_compile
sub-env bin/post_compile
fi
Como puede ver, busca en su directorio de proyectos su propio archivo post_compile
en el directorio bin
, y lo ejecuta si existe. Puede utilizar este gancho para instalar los datos nltk.
Cree el directorio
bin
en la raíz de su proyecto local.Agregue su propio archivo
post_compile
al directoriobin
.# bin/post_compile #!/usr/bin/env bash if [ -f bin/install_nltk_data ]; then echo "-----> Running install_nltk_data" chmod +x bin/install_nltk_data bin/install_nltk_data fi echo "-----> Post-compile done"
Agregue su propio archivo
install_nltk_data
al directoriobin
.# bin/install_nltk_data #!/usr/bin/env bash source $BIN_DIR/utils echo "-----> Starting nltk data installation" # Assumes NLTK_DATA environment variable is already set # $ heroku config:set NLTK_DATA=''/app/nltk_data'' # Install the nltk data # NOTE: The following command installs the wordnet corpora, # so you may want to change for your specific needs. # See http://www.nltk.org/data.html python -m nltk.downloader wordnet # If using Textblob, use this instead: # python -m textblob.download_corpora lite # Open the NLTK_DATA directory cd ${NLTK_DATA} # Delete all of the zip files find . -name "*.zip" -type f -delete echo "-----> Finished nltk data installation"
Agregue
nltk
a su archivotextblob
(O atextblob
si está usando Textblob).- Confíe todos estos cambios a su repositorio.
Establezca la variable de entorno NLTK_DATA en su aplicación heroku.
$ heroku config:set NLTK_DATA=''/app/nltk_data''
- Desplegar a Heroku. Verá el
post_compile
pasopost_compile
al final de la implementación, seguido de la descarga de nltk.
¡Espero que hayas encontrado esto util! ¡Disfrutar!
Éste funciona:
Para usuarios de Mac OS.
python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
Acabo de tener este mismo problema. Lo que me funcionó fue crear un directorio ''nltk_data'' en la carpeta de la aplicación, descargar el corpus en ese directorio y agregar una línea a mi código que le permita a nltk saber qué buscar en ese directorio. Puedes hacer esto localmente y luego enviar los cambios a Heroku.
Entonces, suponiendo que mi aplicación python está en un directorio llamado "myapp /"
Paso 1: Crea el directorio
cd myapp/
mkdir nltk_data
Paso 2: Descargar Corpus a Nuevo Directorio
python -m nltk.downloader
Esto nltk
descargador de nltk
. Establezca su Directorio de descarga en la whatever_the_absolute_path_to_myapp_is/nltk_data/
. Si está utilizando el descargador de GUI, el directorio de descarga se establece a través de un campo de texto en la parte inferior de la interfaz de usuario. Si está utilizando la línea de comando uno, configúrela en el menú de configuración.
Una vez que el descargador sepa apuntar a su directorio nltk_data
recién creado, descargue su corpus.
O en un solo paso desde el código de Python:
nltk.download("wordnet", "whatever_the_absolute_path_to_myapp_is/nltk_data/")
Paso 3: Deja que nltk sepa dónde mirar
ntlk
busca datos, recursos, etc. en las ubicaciones especificadas en la variable nltk.data.path
. Todo lo que necesita hacer es agregar nltk.data.path.append(''./nltk_data/'')
al archivo python que realmente usa nltk, y buscará corpus, tokenizadores y demás, además de las rutas predeterminadas.
Paso 4: Envíalo a Heroku
git add nltk_data/
git commit -m ''super useful commit message''
git push heroku master
¡Eso debería funcionar! Lo hizo por mí de todos modos. Una cosa que vale la pena tener en cuenta es que la ruta desde el archivo python que ejecuta nltk stuff al directorio nltk_data puede ser diferente dependiendo de cómo haya estructurado su aplicación, así que tenga en cuenta eso cuando haga nltk.data.path.append(''path_to_nltk_data'')
Estaba recibiendo este problema. Para aquellos que no están trabajando en un entorno virtual, deberán descargarse en el siguiente directorio en ubuntu:
/usr/share/nltk_data/corpora/wordnet
En lugar de wordnet podría ser marrón o lo que sea. Puede ejecutar este comando directamente en su terminal si desea descargar el corpus.
$ sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet
De nuevo, en lugar de wordnet, podría ser marrón.
Heroku ahora es oficialmente compatible con datos NLTK, integrado!
Solo para usuarios de Mac OS.
python -m nltk.downloader -d /usr/share/nltk_data wordnet
los datos corpora no se pueden descargar directamente a la carpeta /usr/share/nltk_data
. Informes de error "sin permiso", dos soluciones:
Agregue un cambio de permiso adicional al sistema Mac, los detalles se refieren a la Operación No Permitida cuando está en la raíz El Capitán (deshabilitado sin raíz) . Sin embargo, no quiero cambiar a la configuración predeterminada de Mac solo para este cuerpo. Y voy por la segunda solución.
- Descargue los corpus a cualquier directorio al que tenga acceso. `python -m nltk.downloader -d some_user_accessable_directory wordnet ''. Notado, allí solo descarga los corpus requeridos, por ejemplo, wordnet, reuters en lugar de los corpus completos de nltk.
Añadir ruta a la ruta nltk. En el archivo py, agregue las siguientes líneas:
import nltk nltk.data.path.append(''nltk_data'')