Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:找不到nltk的默认下载目录_Python_Nltk - Fatal编程技术网

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

Python ValueError:找不到nltk的默认下载目录,python,nltk,Python,Nltk,我在进口nltk方面有问题。 我配置了apache并运行了一些示例python代码,它在浏览器上运行良好。 URL为:/localhost/cgi-bin/test.py。 当我在test.py中导入nltk时,它没有运行。执行在“import nltk”行之后无法继续。它给了我错误值error:找不到默认下载目录 但是当我在命令提示符下运行时,它的工作状态非常好。 如何删除此错误?执行CGI脚本的环境与从终端或类似设备运行CGI脚本的环境不同。具体来说,像$PYTHONPATH这样的环境变量可

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

执行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'>
>>导入nltk
>>>nltk
因此,在本例中,您需要将“/usr/local/lib/python3.4/dist包”附加到
sys.path


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

问题是,导入时,
nltk
尝试初始化
下载程序
对象(即使您没有尝试下载任何资源),并且无法识别可用的下载位置。最简单的方法是在环境中定义
NLTK_数据
,初始化为一个文件夹,该文件夹(a)存在,并且(b)您的服务器具有写入权限

在某些原因不可能的情况下,让我们来看看抛出错误的代码。

nltk\downloader.py
中的函数
default\u downloader\u dir()
首先在
nltk.data.path
中查找可写位置(从
nltk\u data
初始化)。如果找不到任何数据,它将进行最后一次尝试:尝试在主目录中查找文件夹
nltk_data
(Windows除外)。显然,您的环境设置阻止Python将
~/
解析到主目录,从而导致错误

# 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")

因此,请找出您可以对您的环境做些什么,以使此功能更愉快。

问题的出现可能是因为您没有为ntlk下载创建默认目录。如果您在Windows平台上,则只需在任何根目录中创建一个名为“nltk_data”的目录,并授予该目录的写入权限。自然语言工具包最初在所有根目录中搜索名为“nltk_data”的目标

例如:在C:\驱动器中创建一个名为“nltk\ U数据”的文件夹

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

希望这有帮助


问候。

问题

  • NLTK包尝试查找
    os.environ[“APPDATA”]
    变量以加载其内容

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

  • 因此,我们必须显式地提供APPDATA集变量。 这可以通过两种方法完成

    解决方案

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

    导入操作系统
    os.environ['APPDATA']=“C:\Users\YOUR\U USER\APPDATA\Roaming”

  • 在Xampp的http.conf中设置环境变量 通过将此行添加到该文件

    SetEnv APPDATA“${APPDATA}”


  • 我只是猜测,或多或少,因为你没有在你的帖子中给出很多信息。如果您更新问题以包含更多关于您正在做什么、在什么情况下会发生什么的详细信息,那么我将尝试相应地更新我的答案。如果默认目录完全丢失,那么从提示符运行脚本将导致相同的错误,但事实并非如此,根据OP.@lenz的说法,创建自定义目录将是安全、省时的,并且是一种更好的方法,而不是在脚本中尝试一些小故障。如果针对提示提出相同的问题,可以使用我在回答中提到的方法来纠正。据我所知,问题不是nltk_数据目录丢失,而是CGI脚本没有找到它(尽管它存在于某处)。很明显,你的答案还是有帮助的,因为它被接受了。这很有效。重要的是在调用任何导入之前设置env变量@汤姆洛克提到了这一点。我希望它能为其他人节省一些时间。