ValueError:找不到nltk的默认下载目录

时间:2016-10-01 10:46:12

标签: python nltk

我在导入nltk时遇到问题。 我配置了apache并运行了一些示例python代码,它在浏览器上运行良好。 URL为:/ localhost/cgi-bin/test.py。 当我在test.py中导入nltk时它没有运行。在“import nltk”行之后执行没有继续。它给了我那个错误ValueError:找不到默认的下载目录 但是当我在命令提示符下运行时它的工作完美。 如何删除此错误?

4 个答案:

答案 0 :(得分:1)

<强>问题

  1. NLTK包试图找到os.environ["APPDATA"]变量来加载它的内容。

  2. XAMPP或任何其他CGI服务器不会加载Windows上通常可用的所有操作系统变量。

  3. 因此我们必须明确提供APPDATA SET变量。 这可以通过2种方法完成。

    <强>解决方案

    1. 在从nltk包加载任何内容之前,在Python本身内部。 通过添加appdata文件夹路径。

      import os os.environ['APPDATA']="C:\Users\YOUR_USER\AppData\Roaming"

    2. 在Xampp的http.conf中设置环境变量 将此行添加到文件中。

      SetEnv APPDATA "${APPDATA}"

答案 1 :(得分:0)

执行CGI脚本的环境与从终端或类似程序运行CGI脚本时的环境不同。具体而言,$PYTHONPATH等环境变量可能未设置为您需要的值。

一个丑陋但安全的解决方法是在任何第三方导入语句之前在脚本中添加所需的目录:

import sys
sys.path.append('path/to/package-parent')  # change this to what you actually need
import nltk

要查找NLTK的位置或导致问题的原因,请在交互式会话中导入。 然后,键入模块/包名称将打印位置:

>>> import nltk
>>> nltk
<module 'nltk' from '/usr/local/lib/python3.4/dist-packages/nltk/__init__.py'>

所以,你会附加&#39; /usr/local/lib/python3.4/dist-packages'在这种情况下为sys.path

我不完全确定这是否也适用于&#34;默认下载目录&#34;,但您可以尝试一下。

答案 2 :(得分:0)

问题是,在导入时,nltk尝试初始化Downloader对象(即使您没有尝试下载任何资源),也无法识别可用的下载位置。令人满意的最简单方法是在环境中定义NLTK_DATA,初始化为(a)存在的文件夹,以及(b)您的服务器具有写访问权限。

如果由于某种原因不可能,那么让我们来看看抛出错误的代码。 default_download_dir()中的函数nltk\downloader.py首先在nltk.data.path中查找可写位置(从NLTK_DATA初始化)。如果找不到,则最后一次尝试:它在您的HOME目录中尝试文件夹nltk_data(在Windows上除外)。显然,您的环境设置会阻止Python将~/解析为您的HOME目录,从而导致错误。

# On Windows, use %APPDATA%
if sys.platform == 'win32' and 'APPDATA' in os.environ:
    homedir = os.environ['APPDATA']

# Otherwise, install in the user's home directory.
else:
    homedir = os.path.expanduser('~/')
    if homedir == '~/':
        raise ValueError("Could not find a default download directory")

请弄清楚您可以对您的环境做些什么来使这个功能变得快乐。

答案 3 :(得分:-1)

引发问题可能是因为您没有为ntlk下载创建默认目录。如果您使用的是Windows平台,那么您需要做的就是在任何根目录中创建名为“nltk_data”的目录,并授予该目录的写入权限。 Natural Language Tool Kit最初在所有根目录中搜索名为“nltk_data”的目标。

For Instance:在名为“nltk_data”的C:\驱动器中创建一个文件夹

确保一切正常后,执行脚本以消除此错误。

希望这会有所帮助。

问候。