
文字実
この記事は、株式会社シグマ・デザイン社長の文字実が執筆しました。
最近、またコツコツと自然言語処理の勉強をしています。
PythonでNLTKを使っているといろんなところでこのエラーが出ますよね。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
その度に、encode('utf-8')を使ってみたりunicode()を使ってみたりでその場しのぎをしてきましたけど、今回はどうしてもうまくいかなかった。
そこでオライリーの入門自然言語処理を読んでみるとばっちし対処法が書いてあった。
import codecs, sys
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
sys.stdin = codecs.getreader('utf_8')(sys.stdin)
最初にこれを追加してやると嘘のようにうまくいきました。
NLTKでいろいろやってて文字コードのエラーで困っている人はぜひ試してみて下さい。
オライリーの本はクオリティに差があるけどいい本は本当にいい。