2016-06-21 110 views
0

我正在嘗試使用bleualign(https://github.com/rsennrich/Bleualign)來對齊某些.txt文件的句子。這個工具的工作方式是在終端發送命令通過以下方式:通過python發送命令時出現類型錯誤

python ../../Bleualign/bleualign.py -s circle_en-us_pre_aligned.txt -t circle_pt-br_pre_aligned.txt --srctotarget - -o output 

文件的名稱是特定於我在做什麼。如果我直接在終端上使用它,這項工作。

然而,當我試圖通過Python來做到這一點,

def align_sentences(folder_name, src_lang, trgt_lang): 

    string = u"python ../../Bleualign/bleualign.py -s "+\ 
     folder_name+u"_"+src_lang+u"_pre_align.txt "+\ 
     u"-t "+folder_name+u"_"+trgt_lang+u"_pre_align.txt "+\ 
     u"--srctotarget -"+\ 
     u" -o outputfile" 


    os.system(string) 

當我:

align_sentences(u"circle",u"en-us",u"pt-br") 

我得到:

Traceback (most recent call last): 


File "../../Bleualign/bleualign.py", line 14, in <module> 
    a = Aligner(options) 



File "/home/goncalo/Bleualign/bleualign/align.py", line 159, in __init__ 
    self._inputObjectFromParameter(self.options['srcfile']) 
    File "/home/goncalo/Bleualign/bleualign/align.py", line 198, in _inputObjectFromParameter 
    inputObject = self._stringArray2stringIo(parameter) 
    File "/home/goncalo/Bleualign/bleualign/align.py", line 187, in _stringArray2stringIo 
    return io.StringIO('\n'.join([line.rstrip() for line in stringArray])) 
TypeError: initial_value must be unicode or None, not str 

正如你看到的我試着通過在字符串前添加'u'將字符串轉換爲unicode。我也做了沒有你,使用unicode(),嘗試.decode()...

什麼是錯的?

回答

0

這似乎是Bleualign中的一個錯誤。對https://github.com/rsennrich/Bleualign/blob/master/bleualign/align.py#L187他們的作者當前行有:

return io.StringIO('\n'.join([line.rstrip() for line in stringArray])) 

這最終得到的選項參數__init__這裏https://github.com/rsennrich/Bleualign/blob/master/bleualign/align.py#L159

其中傳遞一個字符串"srcfile"這是不是一個unicode字符串。因此,連接函數將兩個非Unicode字符串組合爲另一個非Unicode字符串,其被io.StringIO拒絕。作者可能需要將選項參數更改爲u"srcfile"

我會在他們的Github頁面上提出問題。

+0

謝謝你的回答!我去做。 –