Python 2.7 - как записать проанализированную информацию MeCab в текстовый файл? - PullRequest
2 голосов
/ 25 октября 2011

Я написал графический интерфейс, который позволяет вводить на японском языке, и когда вы идете в файл> parse пишет в текстовый файл. Этот текстовый файл затем запускается через MeCab, где между словами ставятся пробелы. После этого он должен быть снова записан в текстовый файл, чтобы его можно было отобразить в другом окне графического интерфейса.

Проблема в том, что я не хочу записывать проанализированные данные в текстовый файл. Это не проблема писать это в первый раз. Кроме того, он выводит разобранную информацию на 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)

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Анализируемые данные не являются Unicode, это строка байтов.

Поэтому, когда вы пытаетесь записать данные в файл, он пытается декодировать его в кодировку Unicode до кодирования в utf-8. Так как ваш кодек по умолчанию ascii, но у вас фактически есть utf-8, он подавляется первым символом со значением байта 128 или выше.

Вам следует .decode('utf-8') вернуть данные или использовать метод mecab, который возвращает данные в кодировке Unicode.

0 голосов
/ 26 октября 2011

Вот рабочий код. Спасибо 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)
...