2017-03-09 2 views
3

ウェブとディスクからのテキストへのアクセスについては、NLTKの書籍(第3章)からいくつかの演習を行っています。 word_tokenizeを呼び出すときにエラーが発生します。nltkを使ったエラーword_tokenize

これは私のコードです:

>>> import nltk 
>>> from urllib.request import urlopen 
>>> url = "http://www.gutenberg.org/files/2554/2554.txt" 
>>> raw = urlopen(url).read() 
>>> tokens = nltk.word_tokenize(raw) 

そして、これはトレースバックです:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    for sl1, sl2 in _pair_iter(slices): 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 310, in _pair_iter 
    prev = next(it) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1289, in _slices_from_text 
    for match in self._lang_vars.period_context_re().finditer(text): 
TypeError: cannot use a string pattern on a bytes-like object 
>>> File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\__init__.py", line 109, in word_tokenize 
    return [token for sent in sent_tokenize(text, language) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\__init__.py", line 94, in sent_tokenize 
    return tokenizer.tokenize(text) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1237, in tokenize 
    return list(self.sentences_from_text(text, realign_boundaries)) 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1285, in sentences_from_text 
    return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)] 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1276, in span_tokenize 
    return [(sl.start, sl.stop) for sl in slices] 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1276, in <listcomp> 
    return [(sl.start, sl.stop) for sl in slices] 
    File "C:\Users\u0084411\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1316, in _realign_boundaries 

誰かがここで何が起こっているか私には私に説明していただけますと、なぜ私が正しくword_tokenizeを使用するように見えることはできません?

多くの感謝!

+2

あなたはNLTKブックのバージョンは何を読んでいますか? [オンライン版](http://www.nltk.org/book/ch03.html#electronic-books)は 'read()'結果に '.decode(" utf8 ")'を適用します(これは動作し、受け入れられた答えと同等)。 – alexis

+0

印刷されたバージョンは古くなっています; Pそして時にはオンラインのものもあります:http://www.nltk.org/book =( – alvas

+0

私は印刷版 –

答えて

2

あなたはdecode('utf-8')を使用して文字列に(バイトオブジェクトとして取得された)HTMLを変換する必要があります。

>>> import nltk 
>>> from urllib.request import urlopen 
>>> url = "http://www.gutenberg.org/files/2554/2554.txt" 
>>> raw = urlopen(url).read() 
>>> raw = raw.decode('utf-8') 
>>> tokens = nltk.word_tokenize(raw) 
+0

を読んでいますありがとう、これは私の問題を解決します –

+0

これらはhtmlではなく平文(utf)ファイルです。 – alexis

関連する問題