Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 12, 2018 13:44:11

wery
Зарегистрирован: 2018-04-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод с API Microsoft Translator

 # -*- coding: utf-8 -*-
import http.client, urllib.parse
import nltk.data
subscriptionKey = '***************'
host = 'api.microsofttranslator.com'
path = '/V2/Http.svc/Translate'
with open('Test.TXT', 'r') as f:
    lst = f.read().splitlines()
one = ' '.join(lst)
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
dow = tokenizer.tokenize(one, realign_boundaries=True)
ru_dow = []
target = 'ru'
params = '?to=' + target + '&text=' + urllib.parse.quote (text)
def get_suggestions ():
    headers = {'Ocp-Apim-Subscription-Key': subscriptionKey}
    conn = http.client.HTTPSConnection(host)
    conn.request ("GET", path + params, None, headers)
    response = conn.getresponse ()
    return response.read ()
result = get_suggestions ()
for i in dow:
    text = i
    ru_dow.append(result.decode("utf-8"))
      
with open('RU_TEST.txt', "w") as file:
    file.write(' '.join(ru_dow))
print('END')

Подскажите, по какой причине в списке ru_dow все строки переписываются на перевод последней строки. Допустим в файле 6 строк и последняя строка имеет значение ‘Привет’, тогда в списке оказывается 6 строк “Привет”. А перевод предыдущих затирается.

А если убрать функцию get_suggestions() и вставить ее тело в цикл for, то все ок. Но при этом перевод идет очень долго. На перевод 1 млн.символов требуется порядка 3 часов.
 for i in dow:
    text = i
    params = '?to=' + target + '&text=' + urllib.parse.quote (text)
    headers = {'Ocp-Apim-Subscription-Key': subscriptionKey}
    conn = http.client.HTTPSConnection(host)
    conn.request ("GET", path + params, None, headers)
    response = conn.getresponse ()
    result = response.read ()
    ru_dow.append(result.decode("utf-8"))

Отредактировано wery (Апрель 12, 2018 13:45:56)

Офлайн

#2 Апрель 12, 2018 15:30:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Перевод с API Microsoft Translator

wery
Подскажите, по какой причине в списке ru_dow все строки переписываются на перевод последней строки.
В цикле делаешь несколько append() для одного и того же result, а text вообще не используешь.



Офлайн

#3 Апрель 12, 2018 16:45:29

wery
Зарегистрирован: 2018-04-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Перевод с API Microsoft Translator

py.user.next
В моем представлении это должно было работать так, что на каждую итерацию создается свое значение переменной text, и соответственно, когда цикл обращается к result, то в каждой итерации значение result уже другое, т.к. text используется в функции get_suggestions ().
Можете на пальцах объяснить, почему присоединяется один и тот же result?

Офлайн

#4 Апрель 13, 2018 01:33:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Перевод с API Microsoft Translator

wery
почему присоединяется один и тот же result?
В этом фрагменте
  
result = get_suggestions ()
for i in dow:
    text = i
    ru_dow.append(result.decode("utf-8"))
Объект result создаётся один раз перед циклом. Дальше запускается цикл и использует созданный перед циклом result несколько раз.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version