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

Имена файлов специфичны к тому, что я делаю. ЭТО работает, если я использую его непосредственно на терминале.

Однако, когда я пытаюсь сделать это через питона,

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 

Как вы видите, я пытался преобразуйте строку в unicode, добавив 'u' перед строками. Я также сделал это без u, используя 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, для создания другой строки, отличной от юникода, которую отклоняет io.StringIO. Авторам, вероятно, нужно просто изменить параметр параметра на u"srcfile".

Я бы поставил вопрос на их страницу Github.

+0

Спасибо за ваш ответ! Я сделаю это. –

Смежные вопросы