¿Cómo configurar el directorio de datos nltk desde el código?

Respuestas:

71

Simplemente cambie los elementos de nltk.data.path, es una lista simple.

Tim McNamara
fuente
29
o establezca la variable de entorno NLTK_DATA.
schemacs
Mi nltk.data.path tiene '/home/aankney/nltk_data'como primer elemento de la lista, PERO estoy en un servidor y quiero nltk_dataque otras personas lo compartan. ¿Cómo evito que nltk use esto como una de las rutas de descarga?
Austin A
41

Desde el código, http://www.nltk.org/_modules/nltk/data.html :

``nltk:path``: Specifies the file stored in the NLTK data
 package at *path*.  NLTK will search for these files in the
 directories specified by ``nltk.data.path``.

Luego, dentro del código:

######################################################################
# Search Path
######################################################################

path = []
"""A list of directories where the NLTK data package might reside.
   These directories will be checked in order when looking for a
   resource in the data package.  Note that this allows users to
   substitute in their own versions of resources, if they have them
   (e.g., in their home directory under ~/nltk_data)."""

# User-specified locations:
path += [d for d in os.environ.get('NLTK_DATA', str('')).split(os.pathsep) if d]
if os.path.expanduser('~/') != '~/':
    path.append(os.path.expanduser(str('~/nltk_data')))

if sys.platform.startswith('win'):
    # Common locations on Windows:
    path += [
        str(r'C:\nltk_data'), str(r'D:\nltk_data'), str(r'E:\nltk_data'),
        os.path.join(sys.prefix, str('nltk_data')),
        os.path.join(sys.prefix, str('lib'), str('nltk_data')),
        os.path.join(os.environ.get(str('APPDATA'), str('C:\\')), str('nltk_data'))
    ]
else:
    # Common locations on UNIX & OS X:
    path += [
        str('/usr/share/nltk_data'),
        str('/usr/local/share/nltk_data'),
        str('/usr/lib/nltk_data'),
        str('/usr/local/lib/nltk_data')
    ]

Para modificar la ruta, simplemente agregue a la lista de posibles rutas:

import nltk
nltk.data.path.append("/home/yourusername/whateverpath/")

O en windows:

import nltk
nltk.data.path.append("C:\somewhere\farfar\away\path")
alvas
fuente
¿Qué directorio contendría este archivo?
hlin117
está en el código fuente original de NLTK. Vaya al directorio donde guarda el código fuente y luego vaya anltk/nltk/data
alvas
echar un vistazo a magically_find_nltk_data()partir stackoverflow.com/questions/36382937/...
alvas
28

Yo uso adjuntar, ejemplo

nltk.data.path.append('/libs/nltk_data/')
bahlum
fuente
14

En lugar de agregar nltk.data.path.append('your/path/to/nltk_data')a cada script, NLTK acepta la variable de entorno NLTK_DATA. ( enlace de código )

Abierta ~/.bashrc(o ~/.profile) con el editor de texto (por ejemplo nano, vim, gedit), y añadir la línea siguiente:

export NLTK_DATA="your/path/to/nltk_data"

Ejecutar sourcepara cargar la variable ambiental

source ~/.bashrc


Prueba

Abra Python y ejecute las siguientes líneas

import nltk
nltk.data.path

Puede ver su ruta de datos nltk ya allí.

Referencia: respuesta de @ alvations en nltk / nltk # 1997

fnjn
fuente
1

Para aquellos que usan uwsgi:

Tenía problemas porque quería que una aplicación uwsgi (que se ejecutaba como un usuario diferente al mío) tuviera acceso a los datos de nltk que había descargado previamente. Lo que funcionó para mí fue agregar la siguiente línea a myapp_uwsgi.ini:

env = NLTK_DATA=/home/myuser/nltk_data/

Esto establece la variable de entorno NLTK_DATA, como lo sugiere @schemacs.
Es posible que deba reiniciar su proceso de uwsgi después de realizar este cambio.

danyamachine
fuente
0

Otra solución es adelantarse.

intente importar nltk nltk.download ()

Cuando aparezca el cuadro de la ventana preguntando si desea descargar el corpus, puede especificar allí en qué directorio se descargará.

Steve
fuente
0

Siguiendo los consejos de fnjn anteriores para imprimir la ruta:

print(nltk.data.path)

Vi las cadenas de ruta en este tipo de formato en Windows:

C:\\Users\\my_user_name\\AppData\\Roaming\\SPB_Data

Así que cambié mi ruta de la barra inclinada '/' de tipo Python, a una barra invertida doble '\\' cuando usé path.append:

nltk.data.path.append("C:\\workspace\\my_project\\data\\nltk_books")

La excepción desapareció.

Ulises Ítaca
fuente