Como configurar o diretório de dados nltk a partir do código?

Respostas:

73

Basta alterar os itens de nltk.data.path, é uma lista simples.

Tim McNamara
fonte
30
ou defina a variável de ambiente NLTK_DATA.
schemacs de
Meu nltk.data.path tem '/home/aankney/nltk_data'como primeiro elemento da lista, MAS estou em um servidor e quero nltk_dataser compartilhado por outras pessoas usando o servidor. Como evito que o nltk use isso como um dos caminhos de download?
Austin A
43

A partir do 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``.

Então, dentro do 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 o caminho, basta anexar à lista de caminhos possíveis:

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

Ou no windows:

import nltk
nltk.data.path.append("C:\somewhere\farfar\away\path")
Alvas
fonte
Qual diretório conteria este arquivo?
hlin117 de
está no código-fonte original do NLTK. Vá para o diretório onde você salvou o código-fonte e vá paranltk/nltk/data
alvas
dar uma olhada magically_find_nltk_data()a partir stackoverflow.com/questions/36382937/...
alvas
28

Eu uso append, example

nltk.data.path.append('/libs/nltk_data/')
bahlum
fonte
15

Em vez de adicionar nltk.data.path.append('your/path/to/nltk_data')a todos os scripts, o NLTK aceita a variável de ambiente NLTK_DATA. ( link do código )

Abrir ~/.bashrc(ou ~/.profile) com editor de texto (por exemplo nano, vim, gedit), e adicione o seguinte linha:

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

Execute sourcepara carregar a variável ambiental

source ~/.bashrc


Teste

Abra o python e execute as seguintes linhas

import nltk
nltk.data.path

Você pode ver seu caminho de dados nltk já lá.

Referência: resposta de @alvations em nltk / nltk # 1997

fnjn
fonte
1

Para aqueles que usam uwsgi:

Eu estava tendo problemas porque queria que um aplicativo uwsgi (rodando como um usuário diferente do meu) tivesse acesso aos dados nltk que eu havia baixado anteriormente. O que funcionou para mim foi adicionar a seguinte linha a myapp_uwsgi.ini:

env = NLTK_DATA=/home/myuser/nltk_data/

Isso define a variável de ambiente NLTK_DATA, conforme sugerido por @schemacs.
Pode ser necessário reiniciar o processo uwsgi após fazer essa alteração.

danyamachine
fonte
0

Outra solução é se antecipar.

tente importar nltk nltk.download ()

Quando a janela aparecer perguntando se você deseja fazer o download do corpus, você pode especificar lá em qual diretório o download será feito.

Steve
fonte
0

Usando o conselho de fnjn acima sobre como imprimir o caminho:

print(nltk.data.path)

Eu vi as strings de caminho neste tipo de formato no windows:

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

Então, mudei meu caminho de barra '/' do tipo python para barra invertida dupla '\\' quando usei path.append:

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

A exceção foi embora.

Odysseus Ithaca
fonte