<「ntlk」を用いて日本語でもn-gramを使用できるようにしたい>
pythonのnltkでn-gramを使用しようと思い、サンプルプログラムを実行しているのですが、
入力する文章が英語だとうまく実行できるのですが、日本語になると文字化けしてしまいます。
python
1import nltk 2f = open(u'context.txt',encoding = 'utf8') 3raw = f.read() 4tokens = nltk.word_tokenize(raw) #テキストをトークンに分割 5print(tokens) 6 7<実行結果> 8['�|�b�g��100���ȏ�ɂȂ�����A�ۉ����[�h�ɑJ�ڂ���']
<試したこと>
自分で調べたところ、文字化けしないようにするコードがあったのですが、
エラーが出力されてしまいます。
python
1import nltk 2from nltk.corpus.reader import * 3from nltk.corpus.reader.util import * 4from nltk.text import Text 5 6#下記の3つのコードが、日本語コーパスを取り扱うようにする 7jp_sent_tokenizer = nltk.RegexpTokenizer(u' [^「」!?。]*[!?。]') 8jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[^ぁ-んァ-ンー\u4e00-\u9FFF]+)') 9text = PlaintextCorpusReader(r"C:\Users\nltk_data", r'text.txt',encoding='utf-8', 10para_block_reader=read_line_block,sent_tokenizer=jp_sent_tokenizer,word_tokenizer=jp_chartype_tokenizer) 11 12tokens = nltk.word_tokenize(text) #テキストをトークンに分割 13print(tokens) 14 15<実行結果> 16Traceback (most recent call last): 17 File "C:\Users\神龍\word_separate\sample.py", line 15, in <module> 18 tokens = nltk.word_tokenize(text) #テキストをトークンに分割 19 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\__init__.py", line 130, in word_tokenize 20 sentences = [text] if preserve_line else sent_tokenize(text, language) 21 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\__init__.py", line 97, in sent_tokenize 22 return tokenizer.tokenize(text) 23 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1235, in tokenize 24 return list(self.sentences_from_text(text, realign_boundaries)) 25 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1283, in sentences_from_text 26 return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)] 27 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1274, in span_tokenize 28 return [(sl.start, sl.stop) for sl in slices] 29 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1274, in <listcomp> 30 return [(sl.start, sl.stop) for sl in slices] 31 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1314, in _realign_boundaries 32 for sl1, sl2 in _pair_iter(slices): 33 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 312, in _pair_iter 34 prev = next(it) 35 File "C:\Users\Public\Anaconda3\lib\site-packages\nltk\tokenize\punkt.py", line 1287, in _slices_from_text 36 for match in self._lang_vars.period_context_re().finditer(text): 37TypeError: expected string or bytes-like object
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/21 16:41