2016-06-21 35 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

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