我正在尝试使用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()...

怎么了?

最佳答案

这似乎是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中获得options参数。

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

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

07-24 19:42