2016-04-27 15 views
0

NLTKパーセプトロンタガーをロードするときに例外IOError

import nltk 
nltk.data.path.append(r"E:\nltk_data") 
nltk.pos_tag(["hello"]) 

を次のようにコードがシンプルで、エラーがURLが/C|/E|/nltk_data/tagg...になり、なぜそれが最初にurl2pathnameを呼び出す必要がどのように来る

File "C:\Program Files (x86)\IronPython 
2.7\lib\site-packages\nltk\tag\__init__.py", line 110, in pos_tag 
    tagger = PerceptronTagger() File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\tag\perceptron.py", line 141, in __init__ 
    self.load(AP_MODEL_LOC) File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\tag\perceptron.py", line 209, in load 
    self.model.weights, self.tagdict, self.classes = load(loc) File "C:\Program Files (x86)\IronPython 
2.7\lib\site-packages\nltk\data.py", line 800, in load 
    # Load the resource. File "C:\Program Files (x86)\IronPython 2.7\lib\site-packages\nltk\data.py", line 921, in _open 
    # urllib might not use mode='rb', so handle this one ourselves: File "C:\Program Files (x86)\IronPython 
2.7\lib\site-packages\nltk\data.py", line 603, in find 
    if zipfile is None: File "C:\Program Files (x86)\IronPython 2.7\Lib\nturl2path.py", line 26, in url2pathname 
    raise IOError, error IOError: Bad URL: /C|/E|/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle 

です場所?私はすでにWindows上にあり、私が提供するURLはWindowsスタイルのURLです。

答えて

1

私はコードを掘り下げて、問題を発見しました。 Nltkは、オペレーティングシステムをif sys.platform.startswith('win'):と決定します(ただし、プロフェッショナルな方法で決定します)

ただし、IronPythonを使用している場合、プラットフォームはCLIです。

これはIronPythonユーザーにとって多くの問題を引き起こしていると思われます。ですから、次にPythonパッケージがUNIX対応のように振る舞うときは、このコードのモジュールをチェックしてください。

編集:私の修正は、チェックコードをsys.platform.startswith('win') or sys.platform.startswith('cli')に置き換えることです。

+0

'NLTK'がIronPythonをサポートしているかどうかは分かりませんが、PyPyがあってもそれが壊れているケースを知っています。インストールページでは、Windows(32ビット)およびMac/Unix上でPython(特にCPython)をサポートし、 'NLTKはPython 2.7または3.2 +' http://www.nltk.org/installを必要とすることが知られています。 html =) – alvas

+0

IronPythonは名前の中にPythonを持っていますが、実際にはPython(つまり 'CPython')ではありません。 – alvas

+0

@alvasこの瞬間、私たちはPythonアプリケーションをIronPythonに完全に移行し、すべてがテストされました。私の結論は、NLTKはIronPythonと完全に互換性があります。 (当然のことながら、私たちが使っていないモジュールやtesteもありますが、アプリケーションはNLTKのmajortiyモジュールをほとんど使用しています) – ozgur

0

あなたのコードは\nをエスケープされています

\\\を置き換えます

import nltk 
nltk.data.path.append(r"E:\\nltk_data") 
nltk.pos_tag(["hello"]) 

あなたはこの質問を参照することができます:リテラルがどのように動作するか、生の文字列の詳細についてはWhat exactly do "u" and "r" string flags do in Python, and what are raw string literals?

+0

これで試しました。それでも同じエラー。 – ozgur

+0

私は[r "E:\ nltk_data"]、["E:\ nltk_data"]、[r "E:\ nltk_data"]、[ur "E:\ nltk_data] \\ nltk_data "]と[u" E:\ nltk_data "]をクリックします。それらのすべてが私に同じエラーを与えます。それが私がそれが道ではないと思う理由です。 – ozgur