我在导入nltk时遇到了问题。 我配置了Apache并运行一些示例python代码,它在浏览器上运行良好。 URL是:/localhost/cgi-bin/test.py。 当我在test.py中导入nltk时,它未运行。执行不会在“import nltk”行后继续。并且它给了我那个错误ValueError:找不到默认的下载目录 但是当我在命令提示符下运行它的工作完美。 如何清除此错误?ValueError:找不到nltk的默认下载目录
回答
问题可能是因为您没有为您的ntlk下载创建默认目录。如果您在Windows平台上,则只需在您的任一根目录中创建一个名为“nltk_data”的目录,并为该目录授予写入权限。自然语言工具包最初在所有根目录中搜索名为“nltk_data”的目标。
比如:建立在C文件夹:名为\驱动器“nltk_data”
后,确保一切都做精,执行脚本摆脱这种错误的。
希望这会有所帮助。
问候。
CGI脚本执行的环境与从终端或类似环境运行CGI脚本的环境不同。具体而言,像$PYTHONPATH
这样的环境变量可能不会设置为您所需的值。
丑陋但安全的解决办法是添加必需的目录里面的脚本,之前的任何第三方import语句:
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'>
所以,你会追加在这种情况下,“/usr/local/lib/python3.4/dist-packages”到sys.path
。
我不完全确定这是否也适用于“默认下载目录”,但您可以尝试一下。
问题是,在导入时,nltk
会尝试初始化一个Downloader
对象(即使您尚未尝试下载任何资源),但无法识别可用的下载位置。让它开心的最简单方法是在环境中定义NLTK_DATA
,初始化为(a)存在的文件夹,以及(b)您的服务器具有写入权限。
如果出于某种原因不可能发生这种情况,让我们来看看引发错误的代码。 nltk\downloader.py
中的函数default_download_dir()
首先查找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")
因此,弄清楚你可以对环境做些什么来使这个功能开心。
问题
NLTK包试图找到
os.environ["APPDATA"]
变量加载它的内容。XAMPP或任何其他CGI服务器不会加载所有通常在Windows上可用的os变量。
因此,我们必须明确提供APPDATA SET变量。 这可以通过2种方法完成。
解决方案
里面Python本身从NLTK包加载任何东西之前。 通过添加appdata文件夹路径。
import os os.environ['APPDATA']="C:\Users\YOUR_USER\AppData\Roaming"
通过加入这一行,将它设置在XAMPP的的http.conf 文件中的环境变量。
SetEnv APPDATA "${APPDATA}"
- 1. Python 3.5:NLTK下载默认URL不会改变
- 2. 查找默认的本地Jupyter目录
- 3. 找不到模块默认
- 4. 在Chrome Webdriver中更改默认下载目录
- 5. 需要在IIS中找到默认网站的主目录
- 6. NSKeyedArchiver的默认目录
- 7. 带默认目录的QFileDialog
- 8. WIX:WixUI_InstallDir中的默认目录
- 9. 选择默认值时,在没有找到记录下
- 10. 基于默认目录确定目录
- 11. htaccess重写到默认目录
- 12. 默认文件到主目录
- 13. Microsoft.Build.Engine错误(默认目标):目标GetFrameworkPaths:找不到.NET Framework SDK
- 14. 使Visual Studio的文件查找默认为项目目录?
- 15. classpath不默认当前目录
- 16. 在NLTK中找不到ghostscript?
- 17. 下载到当前目录
- 18. 下载到相关目录
- 19. Webpack默认/公共目录
- 20. 默认目录索引
- 21. FXRuby FXFileDialog框默认目录
- 22. 默认安装目录whonix?
- 23. Rails irb默认目录
- 24. Java默认编译目录
- 25. 火炬默认目录
- 26. 更改默认目录6
- 27. 找不到默认的端点元素
- 28. 找不到默认的RealmConfiguration。调用setDefaultConfiguration()
- 29. StructureMap找不到HttpServerUtility的默认实例
- 30. 找不到默认的构造函数
如果缺省目录完全丢失,那么根据OP,从提示符运行脚本会导致相同的错误,而不是。 – lenz
@lenz创建一个自定义目录将是安全的,节省时间,将是一个更好的方法,而不是在脚本中尝试一些故障。如果针对提示提出相同的问题,可以使用我在答案中提到的方法进行纠正。 –
据我了解的OP,问题不在于nltk_data目录丢失,而是它没有被CGI脚本找到(虽然它存在于某处)。显然,你的答案仍然有帮助,因为它被接受了。 – lenz