通过python

时间:2016-06-21 15:15:07

标签: python unicode

我正在尝试使用bleualign(https://github.com/rsennrich/Bleualign)来对齐某些.txt文件的句子。此工具的工作方式是通过以下方式在终端中发送命令:

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。我也是在没有u的情况下使用unicode(),尝试过.decode()......

有什么问题?

1 个答案:

答案 0 :(得分:1)

这似乎是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

中获取选项参数

传递一个不是unicode字符串的字符串"srcfile"。因此,join函数将两个非unicode字符串组合成另一个io.StringIO拒绝的非unicode字符串。作者可能只需要将选项参数更改为u"srcfile"

我会在他们的Github页面上提出问题。