我正在尝试使用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()......
有什么问题?
答案 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页面上提出问题。