nltk没有将$NLTK_DATA添加到搜索路径中吗?

11 浏览
0 Comments

nltk没有将$NLTK_DATA添加到搜索路径中吗?

在Linux下,我已经设置了环境变量$NLTK_DATA('/home/user/data/nltk'),并且上面的测试按预期工作。

但是当运行另一个Python脚本时,我得到了以下错误:

查找错误:

**********************************************************************

资源u'tokenizers/punkt/english.pickle'未找到。请使用NLTK Downloader获取资源:>>>

nltk.download()

搜索路径:

- '/home/user/nltk_data'

- '/usr/share/nltk_data'

- '/usr/local/share/nltk_data'

- '/usr/lib/nltk_data'

- '/usr/local/lib/nltk_data'

- u''

正如我们所看到的,nltk没有将$NLTK_DATA添加到搜索路径中。在手动添加NLTK_DATA目录之后:

nltk.data.path.append("/NLTK_DATA_DIR");

脚本按预期运行,问题是:

如何让nltk自动将$NLTK_DATA添加到其搜索路径中?

0
0 Comments

问题出现的原因是因为NLTK在搜索路径中没有添加$NLTK_DATA。解决方法是在python脚本中使用

import nltk
nltk.path.append('/home/alvas/some_path/nltk_data/')

将$NLTK_DATA添加到搜索路径中。

具体操作如下:

1. 将nltk_data目录移动到NLTK无法自动找到的非标准路径下。

2. 使用nltk.path.append()方法将路径添加到NLTK的搜索路径中。

3. 检查是否成功添加路径。

4. 将nltk_data目录移回原始路径并检查是否正常工作。

如果希望NLTK自动找到nltk_data目录,可以使用以下代码:

import scandir
import os, sys
import time
import nltk
def find(name, path):
    for root, dirs, files in scandir.walk(path):
        if root.endswith(name):
            return root
def find_nltk_data():
    start = time.time()
    path_to_nltk_data = find('nltk_data', '/')
    print >> sys.stderr, 'Finding nltk_data took', time.time() - start
    print >> sys.stderr,  'nltk_data at', path_to_nltk_data
    with open('where_is_nltk_data.txt', 'w') as fout:
        fout.write(path_to_nltk_data)
    return path_to_nltk_data
def magically_find_nltk_data():
    if os.path.exists('where_is_nltk_data.txt'):
        with open('where_is_nltk_data.txt') as fin:
            path_to_nltk_data = fin.read().strip()
        if os.path.exists(path_to_nltk_data):
            nltk.data.path.append(path_to_nltk_data)
        else:
            nltk.data.path.append(find_nltk_data())
    else:
        path_to_nltk_data  = find_nltk_data()
        nltk.data.path.append(path_to_nltk_data)
magically_find_nltk_data()
print nltk.pos_tag('this is a foo bar'.split())

如果想要一次性解决此问题,可以添加系统变量。在调用python脚本之前,在终端中执行export NLTK_DATA=/home/alvas/some_path/nltk_data/命令。

如果在Windows中运行出现错误AttributeError: module 'nltk' has no attribute 'path',可能是因为文件名为nltk.py,请更改文件名尝试。

正确的语法是nltk.data.path.append,如原始问题中所示。

0
0 Comments

NLTK是一个流行的自然语言处理工具包,可以用于文本分析和处理。在使用NLTK时,有时可能会遇到一个问题,即NLTK不会将NLTK_DATA添加到搜索路径中。这个问题的出现是因为在conda环境中安装NLTK数据时,我们不希望在每个脚本中指定数据位置或导出环境变量。为了解决这个问题,我们可以按照以下步骤进行操作:

1. 激活所需的conda环境。

2. 在conda环境中打印sys.prefix,并复制该路径(假设为/home/dickens/envs/nltk_env)。

3. 在conda环境中运行nltk.download(),选择所需的包,并将上述路径追加为下载位置的一部分。例如,在我们的情况下,路径将变为/home/dickens/envs/nltk_env/share/nltk_data。

4. 现在,问题已解决,可以开始使用NLTK了。

通过按照以上步骤操作,我们可以成功解决NLTK不将NLTK_DATA添加到搜索路径中的问题,从而在使用NLTK时无需指定数据位置或导出环境变量。

0