在迭代中翻译数千个文本数据时遇到此错误:
Expecting value: line 1 column 1 (char 0)
我的翻译大量文字的代码:
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)
我翻译了大约2-3k行后收到此错误。
答案 0 :(得分:14)
我有点想出了问题。我认为这是关于Google API的请求限制。
我通过在每次迭代中重新初始化翻译器API来解决这个问题:
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)
答案 1 :(得分:2)
Google可能正在阻止您的IP,请使用VPN,它应该可以工作。
答案 2 :(得分:2)
就我而言,该错误是由于在短时间内请求过多而导致的,我的IP地址被暂时阻止。第二天我又尝试了一次,一切正常。
答案 3 :(得分:2)
我将给出奥斯汀·马力诺(Austin Marino)的修改答案,这里提供的解决方案仅在2000个单词列表中对我有用(也可以在更大的列表中使用)。
首先,您需要安装NordVPN并将其添加到系统路径中,然后检查以下链接:
目标是您可以使用CMD连接/断开连接并选择服务器(您可以在Linux中执行相同的操作),以便可以通过Python代码取消这些NordVPN CMD命令。
这里是函数(请导入库):
import random
listofservers = ["South Africa", "Egypt" , "Australia", "New Zealand", "South Korea", "Singapore", "Taiwan", "Vietnam", "Hong Kong", "Indonesia", "Thailand", "Japan", "Malaysia", "United Kingdom", "Netherlands", "Germany", "France", "Belgium", "Switzerland", "Sweden","Spain","Denmark", "Italy", "Norway", "Austria", "Romania", "Czech Republic", "Luxembourg", "Poland", "Finland", "Hungary", "Latvia", "Russia", "Iceland", "Bulgaria", "Croatia", "Moldova", "Portugal", "Albania", "Ireland", "Slovakia","Ukraine", "Cyprus", "Estonia", "Georgia", "Greece", "Serbia", "Slovenia", "Azerbaijan", "Bosnia and Herzegovina", "Macedonia","India", 'Turkey', 'Israel', 'United Arab Emirates', 'United States', 'Canada','Mexico'
,"Brazil", "Costa Rica", "Argentina", "Chile"]
def SelectServer(l):
return random.choice(l)
def translate_text(text, dest_language="en"):
# Used to translate using the googletrans library
translator = googletrans.Translator()
try:
translation = translator.translate(text=text, dest=dest_language)
except json.decoder.JSONDecodeError:
# api call restriction
print("exception !! déconection du VPN ")
process = subprocess.Popen(["nordvpn", "-d"], shell = True ,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
time.sleep(5)
srv = SelectServer(listofservers)
print("sélection du serveur : "+ srv + " et connexion")
process = subprocess.Popen(["nordvpn", "-c", "-g", srv ], shell = True ,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
time.sleep(60)
return translate_text(text=text, dest_language=dest_language)
return translation.text
#translate to EN and remove EN stopwords
ListCapTranslated = []
for row in ListCaptionsCleanFiltred:
# REINITIALIZE THE API
newrow = translate_text(row, dest_language="en")
ListCapTranslated.append(newrow)
ListCapTranslated
在运行代码之前,请将NordVPN添加到系统路径并测试通过CMD在服务器上的连接/断开连接,以确保一切正常。
干杯。
答案 4 :(得分:1)
这是我绕过其API调用限制所要做的...我使用的是VPN,尤其是Nord-Vpn,因此,按照我的方式进行操作,您将需要能够与之连接/断开连接通过终端的VPN ...
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
答案 5 :(得分:1)
我也遇到了这个问题。 就我而言,这是由于将文本(英语)翻译成英语。
作为一种解决方法,我使用了另一个包langdetect来路由要使用Google翻译翻译的非英语文本。
代码中的一些摘要:
from langdetect import detect
lang = detect(title)
if lang == 'en':
temp_dict['title'] = title
else:
temp_dict['title'] = translator.translate(title, dest='en').text
答案 6 :(得分:1)
由于翻译限制,发生这种情况。您可以使用VPN或Tor来绕过限制。 但是,您可以使用跨语言python包来规避此问题。 另外,可以在language codes处访问语言代码。
from translingual import translate
# example
trans = translate.translate(data=['hello world', 'the world is yours', 'whatever you do, whatever I do', '2b or not 2b'],tolang='es',fromlang='en',thread=3)
print(trans.translate())
答案 7 :(得分:0)
就我而言,这是由字符串中的表情符号引起的。 我删除了它们,一切正常。
答案 8 :(得分:0)
可能有两个原因:
1. IP地址被暂时阻止。
2.您已达到字符数限制。
我遇到了同样的问题,最终使用了另一个名为translate
的软件包,它可以完美地工作。语法也非常相似。您可以here找到它,也可以pip install translate
答案 9 :(得分:0)
这是由于API限制所致。每个初始化的翻译限制。 因此,通过分解代码,在限制后重新初始化翻译器。
from googletrans import Translator
translator = Translator()
答案 10 :(得分:0)
问题在于一台设备可以使用相同IP发出的请求。更改VPN可解决问题。 TunnelBear是NordVPN的免费简单替代方案。 You can download it from here.
对我来说,对googletranslate API的最大请求数是200。因此,每200个请求我都会手动更改VPN,然后继续下一个请求。
不幸的是,这里有一些手动工作,因为您每次都需要更改VPN连接。但是,如果希望快速获得结果并避免在Python中编写VPN更改,这将很有帮助。