2016-10-01 117 views
1

我在導入nltk時遇到了問題。 我配置了Apache並運行一些示例python代碼,它在瀏覽器上運行良好。 URL是:/localhost/cgi-bin/test.py。 當我在test.py中導入nltk時,它未運行。執行不會在「import nltk」行後繼續。並且它給了我那個錯誤ValueError:找不到默認的下載目錄 但是當我在命令提示符下運行它的工作完美。 如何清除此錯誤?ValueError:找不到nltk的默認下載目錄

回答

-1

問題可能是因爲您沒有爲您的ntlk下載創建默認目錄。如果您在Windows平臺上,則只需在您的任一根目錄中創建一個名爲「nltk_data」的目錄,併爲該目錄授予寫入權限。自然語言工具包最初在所有根目錄中搜索名爲「nltk_data」的目標。

比如:建立在C文件夾:名爲\驅動器「nltk_data」

後,確保一切都做精,執行腳本擺脫這種錯誤的。

希望這會有所幫助。

問候。

+0

如果缺省目錄完全丟失,那麼根據OP,從提示符運行腳本會導致相同的錯誤,而不是。 – lenz

+0

@lenz創建一個自定義目錄將是安全的,節省時間,將是一個更好的方法,而不是在腳本中嘗試一些故障。如果針對提示提出相同的問題,可以使用我在答案中提到的方法進行糾正。 –

+0

據我瞭解的OP,問題不在於nltk_data目錄丟失,而是它沒有被CGI腳本找到(雖然它存在於某處)。顯然,你的答案仍然有幫助,因爲它被接受了。 – lenz

0

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

我不完全確定這是否也適用於「默認下載目錄」,但您可以嘗試一下。

+0

它不工作。 – jonii

+0

我只是猜出來,或多或少,因爲你在帖子中沒有提供很多信息。如果您更新問題以包含更多關於您在做什麼的詳細信息,在什麼情況下會發生什麼,那麼我會盡力相應地更新我的答案。 – lenz

0

問題是,在導入時,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") 

因此,弄清楚你可以對環境做些什麼來使這個功能開心。

0

問題

  1. NLTK包試圖找到os.environ["APPDATA"]變量加載它的內容。

  2. XAMPP或任何其他CGI服務器不會加載所有通常在Windows上可用的os變量。

因此,我們必須明確提供APPDATA SET變量。 這可以通過2種方法完成。

解決方案

  1. 裏面Python本身從NLTK包加載任何東西之前。 通過添加appdata文件夾路徑。

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

  2. 通過加入這一行,將它設置在XAMPP的的http.conf 文件中的環境變量。

    SetEnv APPDATA "${APPDATA}"