Je rencontre cette erreur lors de la traduction de milliers de données texte dans une itération:
Expecting value: line 1 column 1 (char 0)
Mon code pour traduire de grandes quantités de texte:
translatedList = []
for index, row in df.iterrows():
newrow = copy.deepcopy(row)
try:
# translate the 'text' column
translated = translator.translate(row['text'], dest='en')
newrow['translated'] = translated.text
except Exception as e:
print(str(e))
continue
translatedList.append(newrow)
Je reçois cette erreur après avoir traduit environ 2-3k lignes.
J'ai en quelque sorte compris le problème. Je pense qu'il s'agit de la limite de demande des API Google.
J'ai résolu cela en initialisant l'API du traducteur à chaque itération:
import copy
from googletrans import Translator
translatedList = []
for index, row in df.iterrows():
# REINITIALIZE THE API
translator = Translator()
newrow = copy.deepcopy(row)
try:
# translate the 'text' column
translated = translator.translate(row['text'], dest='en')
newrow['translated'] = translated.text
except Exception as e:
print(str(e))
continue
translatedList.append(newrow)
Google peut bloquer votre adresse IP, utiliser un VPN et cela devrait fonctionner.
Dans mon cas, l'erreur a été causée par trop de demandes en peu de temps et mon adresse IP a été temporairement bloquée. Je l'ai essayé à nouveau le lendemain et tout a bien fonctionné.
Dans mon cas, c'est causé par des emoji dans les chaînes. Je les ai supprimés et tout fonctionne bien.
C'est ce que j'ai dû faire pour contourner leur restriction d'appels API ... J'utilise un VPN, en particulier Nord-Vpn, donc pour le faire comme je le faisais, vous devriez pouvoir vous connecter/déconnecter de/vers un VPN via le terminal...
def translate_text(text, dest_language="en"):
# Used to translate using the googletrans library
import json
translator = googletrans.Translator()
try:
translation = translator.translate(text=text, dest=dest_language)
except json.decoder.JSONDecodeError:
# api call restriction
process = subprocess.Popen(["nordvpn", "d"], stdout=subprocess.PIPE)
process.wait()
process = subprocess.Popen(["nordvpn", "c", "canada"], stdout=subprocess.PIPE)
process.wait()
return Process_Data.translate_text(text=text, dest_language=dest_language)
return translation
J'ai également rencontré ce problème. Dans mon cas, c'était dû à la traduction du texte (en anglais) en anglais.
Pour contourner ce problème, j'ai utilisé un autre paquet langdetect pour acheminer le texte non anglais à traduire à l'aide de google translate.
n extrait du code:
from langdetect import detect
lang = detect(title)
if lang == 'en':
temp_dict['title'] = title
else:
temp_dict['title'] = translator.translate(title, dest='en').text