Университет
-
Приветствую. Я снова мучаю питон, а он - меня.
Хочу использовать гугл транслейт, но без гугл-апи.
Поскольку переводить собираюсь отдельные слова или короткие предложения, достаточно гет-запроса.
В ответе сервер отдает строку такого вот вида:
[[["изнасилование","rape","iznasilovanie",""]],[["noun",["изна силование","рапс","похищение","с урепица","полевая капуста"]],["verb",["изнасиловат ь","насиловать","насильничать"," похищать женщину"]]],"en",,[["изнасилован ие",[5],1,,835,0,1,0]],[["rape", 4,,,""],["rape",5,[["изнасилован ие",835,1,],["изнасилования",164 ,1,],["изнасилованиями",0,1,],[" изнасилованиям",0,1,],["рапс",0, 1,]],[[0,4]],"rape"]],,,,3] Как бы привести это к списку, например, такого вида [["noun", noun1, noun2, nounX], ["verb", verb1, verb2, verbX], ["adjective", adjective1, adjective2, adjectiveX], ...]?
В девелоперс гайде, где предлагают пользоваться апи, пишут, что сервер отдает ответ в формате json, но это на него не похоже. Неужели парсить регулярными выражениями?
И что могут обозначать цифры, да еще в таком количестве? -
А чем это не жсон? Не нужно парсить регулярками, import json, Luke.
Вообще, то что ты хочешь, делается простым костылем под названием for.out = [[]]for i in json.loads(string):out[0].append[i[0]]out.append[i[1:]]Как-то так, вот только мне странно, вроде гугль отдает совсем другое. Хотя, это наверное через апи.
-
Падает с ошибкой
File "D:\programs\Python26\Lib\json\decoder.py", line 219, in JSONArray *raise ValueError(errmsg("Expecting object", s, end))*ValueError: Expecting object: line 1 column 202 (char 202)
202й символ - это первая запятая в куске "en",,
Пробовал со строкой, укороченной до
[["изнасилование","rape","iznasilovanie",""]],[["noun",["изнас илование","рапс","похищение","су репица","полевая капуста"]],["verb",["изнасиловат ь","насиловать","насильничать"," похищать женщину"]]]
Стало падать на
File "D:\programs\Python26\Lib\json\decoder.py", line 322, in decode *raise ValueError(errmsg("Extra data", s, end, len(s)))*ValueError: Extra data: line 1 column 45 - line 1 column 195 (char 45 - 195)
45й символ - вторая скобка в "iznasilovanie",""]]Может это все же не совсем json?
Вопрос о назначении цифр по-прежнему открыт. -
> Может это все же не совсем json?
Тут проблема в конструкциях вида [1,,,,2] (несколько запятых подряд). По всей видимости гуголу не нравится отдавать списки вида [1,None,None,None,4] - вот он и экономить. Можно сделать
a = """ String from gogl here """while a.find(',,') <> -1: a=a.replace(',,', ', "",')bizzarreListFromGoogol = eval(a)Вообще за eval в приличных сообществах убивают, но за такой формат данных - тоже. Факапа в твоем случае скорее всего не будет, потому что в строках у тебя чистые слова без всяких запятых.
-
Спасибо большое!
Для разбора получающегося списка написал совершенно нечитабельную хрень, но все работает, независимо от количества вариантов перевода и частей речи.retStr = translate( 'next', 'en', 'ru' )
while retStr.find(',,') <> -1: retStr=retStr.replace(',,', ', "",')
res = eval(retStr)
close_translate = res[0][0][0]
print close_translate.decode('utf-8')for i in range( len(res[1]) ):
printprint res[1][i][0].decode('utf-8')for k in range ( 1, len(res[1][i]) ):for j in res[1][i][k]:print j.decode('utf-8')На выходе получаем:
Следующийadjective
следующий
ближайший
будущий
соседнийadverb
рядом
дальше
затем
около
после
потом
в следующий раз
сноваpreposition
около -
4 пробела перед каждой строчкой исходного кода.
-
Это же 1/2 оотекр!