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でテキストファイルに書き込んでテキストを解析すること、その他数百万ものことです。Python2.7とMeCab0.98を実行しています。これが答えられない場合は、エラーに少しでも光を当てていただければ幸いです。

4

2 に答える 2

2

IDLEとIPythonの両方のコマンドラインでPython2.7とMeCab0.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 に答える