1

代码是:

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。如果这不能回答,即使是对错误的一点点了解也将不胜感激。

4

2 回答 2

2

我能够在 IDLE 和 IPython 命令行中使用 Python 2.7 和 MeCab 0.98 成功运行您的代码片段。

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')
于 2012-05-25T07:07:00.063 回答
0

这是我目前的解决方法,应该可以帮助遇到同样问题的人:

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() 添加到打开的函数中。为什么?也许你可以告诉我。:/

于 2011-10-01T17:10:59.223 回答