Как я могу передать переменную в MeCab для Python? - PullRequest
1 голос
/ 01 октября 2011

Код:

import MeCab

m = MeCab.Tagger("-O wakati")
text = raw_input("Enter Japanese here: ")
print m.parse(text)

Проблема в том, что после ввода строки в raw_input выдает ошибку в IDLE:

Traceback (most recent call last):
  File "C:\Users\---\Desktop\---\Python\japanesetest.py", line 5, in <module>
    print m.parse(text)
  File "C:\Users\---\Desktop\---\Python\lib\site-packages\MeCab.py", line 220...
    def parse(self, *args): return _MeCab.Tagger_parse(self, *args)
TypeError: in method 'Tagger_parse', argument 2 of type 'char const *'

Если я это сделаю, однако:

import MeCab

m = MeCab.Tagger("-O wakati")
print m.parse('なるほど、マルコフ辞書のキーはタプルにしたほうがスッキリしますね。')

Я получаю правильный результат:

なるほど 、 マルコフ 辞書 の キー は タプル に し た ほう が スッキリ し ます ね 。

В начале я попробовал теги Unicode, запись в текстовый файл в Unicode и анализ текста, а также несколько других миллионоввещи.Я использую Python 2.7 и MeCab 0.98.Если это не может быть ответом, была бы признательна даже небольшая информация об ошибке.

Ответы [ 2 ]

2 голосов
/ 25 мая 2012

Я могу успешно запустить ваш фрагмент с использованием Python 2.7 и MeCab 0.98 как в командной строке IDLE, так и в IPython.

import MeCab
m = MeCab.Tagger("-O wakati")
text = raw_input("Enter Japanese here: ")
Enter Japanese here: 私の車はとても高いです。
print m.parse(text)
私 の 車 は とても 高い です 。 

Однако при чтении из файла UTF я получаю ошибки при попытке анализатекст.Для этих случаев я явно кодирую текст в shift-jis.Вы можете попробовать эту технику.Ниже приведен пример.

rawtext = open("UTF.file", "rb").read()
tagger = MeCab.Tagger()
encoded_text = rawtext.encode('shift-jis', errors='ignore')
print tagger.parse(encoded_text).decode('shift-jis', errors='ignore')
0 голосов
/ 01 октября 2011

Это мой текущий обходной путь, и он должен помочь людям, сталкивающимся с одной и той же проблемой:

import MeCab
import codecs

write_to = codecs.open("pholder.txt", "w", "utf-8")
text = raw_input("Please insert Japanese text here: ")
write_to.write(text)
write_to.close()

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

Компромисс здесь добавляет .read () к открытому функционалу.Зачем?Может быть, вы можете сказать мне.: /

...