2

私は、日本語入力を許可する GUI を作成しました。ファイル > パースに移動すると、テキスト ファイルに書き込みます。そのテキスト ファイルは、MeCab を介して実行され、単語の間にスペースが挿入されます。その後、もう一度テキスト ファイルに書き込まれることになっているので、別の GUI ウィンドウで表示できます。

私が抱えている問題は、解析されたデータをテキスト ファイルに書きたくないということです。初めて書いても問題ありません。また、解析された情報を問題なく IDLE に出力します。パーサーとエラーは次のとおりです。

#!/usr/bin/python
# -*- coding: <utf-8> -*-
import sys

import MeCab
import codecs

read_from = open("pholder.txt").read()
mecab = MeCab.Tagger("-Owakati")
output = mecab.parse(read_from)
print output


text = output
write_to = codecs.open("pholder.txt", "w", "utf-8")
write_to.write(text)
write_to.close()

Traceback (most recent call last):
  File "C:\...\mecabSpaces.py", line 16, in <module>
    write_to.write(text)
  File "C:\...\codecs.py", line 691, in write
    return self.writer.write(data)
  File "C:\...\codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
4

2 に答える 2

4

解析されたデータはUnicodeではなく、バイト文字列です。

したがって、データをファイルに書き込もうとすると、にエンコードする前に、データをユニコードにデコードしようとします。デフォルトのコーデックはですが、実際にはがありますので、バイト値が128以上の最初の文字でチョークします。utf-8asciiutf-8

.decode('utf-8')返されたデータを使用するか、mecabUnicodeデータを返すメソッドを使用する必要があります。

于 2011-10-25T16:07:05.083 に答える
0

これが作業コードです。尻から頭を引き抜くのを手伝ってくれた agf に感謝します。

#!/usr/bin/python
# -*- coding: <utf-8> -*-
import MeCab

read_from = open("pholder.txt", "r").read()
mecab = MeCab.Tagger("-Owakati")
output = mecab.parse(read_from)
print output

text = output
write_to = open("pholder.txt", "w").write(text)
于 2011-10-26T01:43:26.867 に答える