Jak skonfigurować katalog danych nltk z kodu?

Odpowiedzi:

71

Po prostu zmień pozycje nltk.data.path, to prosta lista.

Tim McNamara
źródło
29
lub ustaw zmienną środowiskową NLTK_DATA.
schematy z
Mój nltk.data.path ma '/home/aankney/nltk_data'jako pierwszy element listy, ALE jestem na serwerze i chcę nltk_databyć udostępniony innym osobom korzystającym z serwera. Jak zapobiec używaniu tego przez nltk jako jednej ze ścieżek pobierania?
Austin A
41

Z kodu, 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``.

Następnie w kodzie:

######################################################################
# 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')
    ]

Aby zmodyfikować ścieżkę, po prostu dołącz do listy możliwych ścieżek:

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

Lub w oknach:

import nltk
nltk.data.path.append("C:\somewhere\farfar\away\path")
alvas
źródło
Jaki katalog zawierałby ten plik?
hlin117
jest w oryginalnym kodzie źródłowym NLTK. Przejdź do katalogu, w którym zapisujesz kod źródłowy, a następnie przejdź donltk/nltk/data
alvas
zapoznać się magically_find_nltk_data()z stackoverflow.com/questions/36382937/...
alvas
28

Używam dołączania, przykład

nltk.data.path.append('/libs/nltk_data/')
bahlum
źródło
14

Zamiast dodawać nltk.data.path.append('your/path/to/nltk_data')do każdego skryptu, NLTK akceptuje zmienną środowiskową NLTK_DATA. ( link do kodu )

Otwarte ~/.bashrc(lub ~/.profile) z edytora tekstu (np nano, vim, gedit), a następnie dodaj następującą linię:

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

Wykonaj, sourceaby załadować zmienną środowiskową

source ~/.bashrc


Test

Otwórz Pythona i wykonaj następujące linie

import nltk
nltk.data.path

Możesz zobaczyć swoją ścieżkę danych nltk już tam.

Odniesienie: odpowiedź @ alvations na nltk / nltk # 1997

fnjn
źródło
1

Dla osób używających uwsgi:

Miałem problem, ponieważ chciałem, aby aplikacja uwsgi (działająca jako inny użytkownik niż ja) miała dostęp do danych nltk, które wcześniej pobrałem. U mnie zadziałało dodanie następującego wiersza do myapp_uwsgi.ini:

env = NLTK_DATA=/home/myuser/nltk_data/

To ustawia zmienną środowiskową NLTK_DATA, zgodnie z sugestią @schemacs.
Po wprowadzeniu tej zmiany może być konieczne ponowne uruchomienie procesu uwsgi.

danyamachine
źródło
0

Innym rozwiązaniem jest wyprzedzenie go.

spróbuj import nltk nltk.download ()

Kiedy pojawi się okno z pytaniem, czy chcesz pobrać korpus, możesz określić, do którego katalogu ma zostać pobrany.

Steve
źródło
0

Korzystając z powyższej rady fnjn dotyczącej drukowania ścieżki:

print(nltk.data.path)

Widziałem ciągi ścieżek w tego typu formacie w systemie Windows:

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

Więc zmieniłem ścieżkę z ukośnika typu Python „/” na podwójny lewy ukośnik „\\”, kiedy użyłem path.append:

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

Wyjątek zniknął.

Odyseusz Itaka
źródło