我在導入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