2011-10-01 67 views
1

的代碼是:我怎樣才能將一個var傳遞給MeCab for Python?

import MeCab 

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

的問題是,進入串入的raw_input後,給出了空閒的錯誤:如果我這樣做,但是

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

我能夠在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') 
+0

這太好了,謝謝。它幫助我解決了我也遇到的GUI編碼問題。 – jeffberhow

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()來打開FUNC。爲什麼?也許你可以告訴我。 :/