2016-05-24 26 views
1

我是新Python和NLTK 當我在Python控制檯測試以下行導入錯誤在一個簡單的例子NLTK

import nltk.data 
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') 
text ="toto. titi. tutu" 
tokens = tokenizer.tokenize(text) 
print(tokens) 

我得到了我的期望。但是,當我從一個文件來執行這些方針,例如使用命令行> python tokenize.py,我得到的錯誤:

C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\python.exe C:/Documents/Dvpt/SemanticAndOpenData/scholar/scholar.py/tokenize.py 
Traceback (most recent call last): 
    File "C:/Documents/Dvpt/SemanticAndOpenData/scholar/scholar.py/tokenize.py", line 1, in <module> 
    import nltk.data 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\nltk\__init__.py", line 89, in <module> 
    from nltk.internals import config_java 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\nltk\internals.py", line 11, in <module> 
    import subprocess 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\subprocess.py", line 395, in <module> 
    import threading 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\threading.py", line 10, in <module> 
    from traceback import format_exc as _format_exc 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\traceback.py", line 3, in <module> 
    import linecache 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\linecache.py", line 10, in <module> 
    import tokenize 
    File "C:\Documents\Dvpt\SemanticAndOpenData\scholar\scholar.py\tokenize.py", line 2, in <module> 
    tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\nltk\data.py", line 786, in load 
    resource_val = pickle.load(opened_resource) 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\nltk\tokenize\__init__.py", line 63, in <module> 
    from nltk.tokenize.simple import (SpaceTokenizer, TabTokenizer, LineTokenizer, 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\nltk\tokenize\simple.py", line 38, in <module> 
    from nltk.tokenize.api import TokenizerI, StringTokenizer 
    File "C:\outils\Python\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\site-packages\nltk\tokenize\api.py", line 13, in <module> 
    from nltk.internals import overridden 
ImportError: cannot import name 'overridden' 
Process finished with exit code 1 

而且我卡上的問題,我無法找到一個方法來解決它。預先感謝任何有用的建議。

+2

你可以在問題中粘貼你的PYTHONPATH變量值嗎? – minocha

+2

嘗試將您的python腳本文件名改爲'my_tokenizer.py'而不是'tokenize.py'。另外,你能告訴我們你已經安裝了哪個NLTK版本,以及你如何安裝它?這樣,我們可以幫助你更好。 – alvas

+1

謝謝。重命名文件解決了這個問題。所以,這是一個問題 - 衝突 - 關於文件的名稱。但是,如果沒有明確的錯誤信息和python的糟糕體驗,就很難走上這條路。有避免這種衝突的良好做法嗎? (namspaces或其他方式) –

回答

3

您需要命名比tokenize.py

+0

有些解釋會很有用 – Daniel

1

其他腳本的東西這裏的問題是,你命名你的腳本tokenize.py。嘗試將文件重命名爲my_tokenizer.py。實際上正在發生的事情是,當你使用

import tokenize

它是什麼做的是試圖導入當前文件本身,因此,你所得到的錯誤。