2017-02-21 4 views
0

内部的にNLTKトークンを使用するPythonスクリプトを実行しようとしています。ここで私は、次のエラーnltk 'unknown url'エラー

Traceback (most recent call last): 
    File "C:\Users\Uzair\Desktop\phrasemachine_test.py", line 3, in <module> 
    phrasemachine.get_phrases(text) 
    File "C:\Program Files\Python36-32\lib\site-packages\phrasemachine\phrasemachine.py", line 260, in get_phrases 
    tagger = TAGGER_NAMES[tagger]() 
    File "C:\Program Files\Python36-32\lib\site-packages\phrasemachine\phrasemachine.py", line 173, in get_stdeng_nltk_tagger 
    tagger = NLTKTagger() 
    File "C:\Program Files\Python36-32\lib\site-packages\phrasemachine\phrasemachine.py", line 140, in __init__ 
    self.tagger.load(tagger_fn) 
    File "C:\Program Files\Python36-32\lib\site-packages\nltk\tag\perceptron.py", line 209, in load 
    self.model.weights, self.tagdict, self.classes = load(loc) 
    File "C:\Program Files\Python36-32\lib\site-packages\nltk\data.py", line 801, in load 
    opened_resource = _open(resource_url) 
    File "C:\Program Files\Python36-32\lib\site-packages\nltk\data.py", line 924, in _open 
    return urlopen(resource_url) 
    File "C:\Program Files\Python36-32\lib\urllib\request.py", line 223, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Program Files\Python36-32\lib\urllib\request.py", line 526, in open 
    response = self._open(req, data) 
    File "C:\Program Files\Python36-32\lib\urllib\request.py", line 549, in _open 
    'unknown_open', req) 
    File "C:\Program Files\Python36-32\lib\urllib\request.py", line 504, in _call_chain 
    result = func(*args) 
    File "C:\Program Files\Python36-32\lib\urllib\request.py", line 1388, in unknown_open 
    raise URLError('unknown url type: %s' % type) 
urllib.error.URLError: <urlopen error unknown url type: c> 

私はWindows 7とNLTK 3.2.1でPython 3.6を使用していますを取得していますNLTK

class NLTKTagger: 
''' 
class that supplies part of speech tags using NLTK 
note: avoids the NLTK downloader (see __init__ method) 
''' 
def __init__(self): 
    import nltk 
    from nltk.tag import PerceptronTagger 
    from nltk.tokenize import TreebankWordTokenizer 
    tokenizer_fn = os.path.abspath(resource_filename('phrasemachine.data', 'punkt.english.pickle')) 
    tagger_fn = os.path.abspath(resource_filename('phrasemachine.data', 'averaged_perceptron_tagger.pickle')) 
    # Load the tagger 
    self.tagger = PerceptronTagger(load=False) 
    self.tagger.load(tagger_fn) 

    # note: nltk.word_tokenize calls the TreebankWordTokenizer, but uses the downloader. 
    #  Calling the TreebankWordTokenizer like this allows skipping the downloader. 
    #  It seems the TreebankWordTokenizer uses PTB tokenization = regexes. i.e. no downloads 
    #  https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L25 
    self.tokenize = TreebankWordTokenizer().tokenize 
    self.sent_detector = nltk.data.load(tokenizer_fn) 

を初期化スクリプトからコードの一部です。 私は の回答を試みましたherehere しかし何も働いていませんでした。他の解決策?

+0

https://gist.github.com/alvations/0ed8641d7d2e1941b9f9 – alvas

答えて

2

データローダーは、http:のようなプロトコル名のために、パス内の接頭辞C:と間違っています。私はこれがすでに修正されていると思った...問題を回避するには、パスの先頭にfile:"プロトコルを追加してください。例えば、

self.tagger.load("file://"+tagger_fn) 

は(あなたのコードを構造化するためのより良い方法がありますが、それはあなた次第です。)nltk.data.load()はURLではなく、ファイルシステムのパスを期待するので

は、技術的に、これはバグではありません。しかし実際には修正する必要があります.Windowsのパスを処理するのは難しくありません。

+0

からの手順で再インストールありがとうございました....それはworrked –