JSONDecodeError: использование модуля googletrans - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь перевести 100 000 английских слов на корейский с помощью модуля "googletrans".Но после некоторой итерации он вызывает

'JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ 0)'.

Я пытался выяснить это, но решения в Интернете у меня не сработали.
Я попробовал

  1. Повторная инициализация Translator () для каждой итерации,
  2. Время ожидания (.4) для каждой итерации.

Самое странное, что это происходит случайно.Иногда он поднимается после нескольких сотен итераций, иногда после нескольких итераций.

Я проверил руководство к этому модулю, и единственное ограничение, которое я смог найти, это то, что оно ограничивает только длину слова.Однако все слова, которые я пытаюсь перевести, - это буквально слова, а не фразы или предложения.

key_list = list(senticnet.keys())
for key in key_list:
  translator = Translator()
  time.sleep(.4)
  print(translator.translate(key, dest='ko'))

В приведенном выше коде senticnet является словарной переменной.Это выглядит как

senticnet['abusive_conduct'] = ['0', '0', '0.853', '-0.84', '#anger', '#disgust', 'negative', '-0.84', 'flagrant', 'cry', 'glaring', 'gross', 'rank']
senticnet['abusive_father'] = ['0', '0', '0.821', '-0.95', '#anger', '#disgust', 'negative', '-0.88', 'student', 'serious_student', 'addiction', 'graduate_student', 'hard_worker']

Вот сообщение об ошибке

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/client.py in translate(self, text, dest, src)
170 
171         origin = text
--> 172         data = self._translate(text, dest, src)
173 
174         # this code will be updated when the format is changed.

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/client.py in _translate(self, text, dest, src)
 79         r = self.session.get(url, params=params)
 80 
---> 81         data = utils.format_json(r.text)
 82         return data
 83 

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/utils.py in format_json(original)
 60         converted = json.loads(original)
 61     except ValueError:
---> 62         converted = legacy_format_json(original)
 63 
 64     return converted

/content/gdrive/My Drive/Colab Notebooks/py-googletrans/googletrans/utils.py in legacy_format_json(original)
 52             text = text[:p] + states[j][1] + text[nxt:]
 53 
---> 54     converted = json.loads(text)
 55     return converted
 56 

/usr/lib/python3.6/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
352             parse_int is None and parse_float is None and
353             parse_constant is None and object_pairs_hook is None and not kw):
--> 354         return _default_decoder.decode(s)
355     if cls is None:
356         cls = JSONDecoder

/usr/lib/python3.6/json/decoder.py in decode(self, s, _w)
337 
338         """
--> 339         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
340         end = _w(s, end).end()
341         if end != len(s):

/usr/lib/python3.6/json/decoder.py in raw_decode(self, s, idx)
355             obj, end = self.scan_once(s, idx)
356         except StopIteration as err:
--> 357             raise JSONDecodeError("Expecting value", s, err.value) from None
358         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

1 Ответ

0 голосов
/ 15 октября 2018

Вопрос : я проверил руководство к этому модулю, и единственное ограничение, которое я смог найти, это то, что он ограничивает только длину слова.


Есть и другие ограничения!

Из Документация Googletrans 2.3.0

Примечание по использованию библиотеки

  • Из-за ограничений веб-версии google translate этот API не гарантирует, что библиотека будет работать должным образом .(поэтому, пожалуйста, используйте эту библиотеку, если вам не нужна стабильность.)
  • Если вы хотите использовать стабильный API, я настоятельно рекомендую вам использовать официальный API Google для перевода.
  • Если выполучить ошибку HTTP 5xx или ошибки типа # 6, возможно, это связано с тем, что Google заблокировал IP-адрес вашего клиента.
...