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?
``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:
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.
Odpowiedzi:
Po prostu zmień pozycje
nltk.data.path
, to prosta lista.źródło
'/home/aankney/nltk_data'
jako pierwszy element listy, ALE jestem na serwerze i chcęnltk_data
być udostępniony innym osobom korzystającym z serwera. Jak zapobiec używaniu tego przez nltk jako jednej ze ścieżek pobierania?Z kodu, http://www.nltk.org/_modules/nltk/data.html :
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")
źródło
nltk/nltk/data
magically_find_nltk_data()
z stackoverflow.com/questions/36382937/...Używam dołączania, przykład
nltk.data.path.append('/libs/nltk_data/')
źródło
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 (npnano
,vim
,gedit
), a następnie dodaj następującą linię:export NLTK_DATA="your/path/to/nltk_data"
Wykonaj,
source
aby załadować zmienną środowiskową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
źródło
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
:To ustawia zmienną środowiskową
NLTK_DATA
, zgodnie z sugestią @schemacs.Po wprowadzeniu tej zmiany może być konieczne ponowne uruchomienie procesu uwsgi.
źródło
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.
źródło
Korzystając z powyższej rady fnjn dotyczącej drukowania ścieżki:
Widziałem ciągi ścieżek w tego typu formacie w systemie Windows:
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ął.
źródło