如何从代码配置nltk数据目录?


Answers:


71

只需更改的项目nltk.data.path,这是一个简单的列表。


29
或设置NLTK_DATA环境变量。
schemacs 2013年

我的nltk.data.path已'/home/aankney/nltk_data'作为列表的第一个元素,但我在服务器上,并且希望nltk_data由使用该服务器的其他人共享。如何防止nltk将其用作下载路径之一?
奥斯丁

41

通过代码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``.

然后在代码中:

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

要修改路径,只需将其追加到可能的路径列表中即可:

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

或在Windows中:

import nltk
nltk.data.path.append("C:\somewhere\farfar\away\path")

哪个目录包含此文件?
hlin117

它在NLTK的原始源代码中。转到保存源代码的目录,然后转到nltk/nltk/data
alvas 2014年

magically_find_nltk_data()stackoverflow.com/questions/36382937/…
alvas

28

我用追加示例

nltk.data.path.append('/libs/nltk_data/')

14

nltk.data.path.append('your/path/to/nltk_data')NLTK不会添加到每个脚本中,而是接受NLTK_DATA环境变量。(代码链接

打开~/.bashrc(或~/.profile)用文本编辑器(例如nanovimgedit),并添加以下行:

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

执行source加载环境变量

source ~/.bashrc


测试

打开python并执行以下几行

import nltk
nltk.data.path

您可以在其中看到您的nltk数据路径。

参考:@alvations对nltk / nltk#1997的回答


1

对于使用uwsgi的用户:

我遇到了麻烦,因为我想让uwsgi应用程序(以与我不同的用户身份运行)可以访问以前下载的nltk数据。对我有用的是将以下行添加到myapp_uwsgi.ini

env = NLTK_DATA=/home/myuser/nltk_data/

这将设置环境变量NLTK_DATA,如@schemacs所建议。
进行此更改后,您可能需要重新启动uwsgi进程。


0

另一个解决方案是超越它。

尝试导入nltk nltk.download()

弹出窗口询问您是否要下载语料库时,您可以在此处指定要将其下载到的目录。


0

使用以上fnjn的建议打印出路径:

print(nltk.data.path)

我在Windows上看到了这种格式的路径字符串:

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

所以我在使用path.append时将路径从python类型的正斜杠'/'切换为双反斜杠'\\'。

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

异常消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.