我在翻译迭代中的数千个文本数据时有一个错误:
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行后会收到此错误。
我有点弄清楚了这个问题。我认为这是关于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)
这是我绕过他们的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
Google可能会阻止您的IP,使用VPN,并且应该有效。
可能有两个原因:
1. IP地址暂时被阻止。
2.您已经达到了角色限制。
我遇到了同样的问题,最终使用了另一个称为translate
的软件包,并且它可以完美地工作。语法也非常相似。您可以在这里找到它或做pip install translate
在我的情况下,这是由字符串中的表情符号引起的。我删除了它们,一切都很好。
在我的情况下,错误是由于短时间内的请求太多而引起的,我的IP地址暂时被阻止。我第二天再次尝试了它,一切都很好。
我将给出一个修改的奥斯汀·马里诺(Austin Marino(的答案,在这里,在2000个单词列表中对我有用的解决方案(也可以在更大的列表中起作用(。
首先,您需要安装nordvpn并将其添加到系统路径中检查此链接:
https://support.nordvpn.com/connectivition/windows/1350897482/connect-to-nordvpn-app-onapp-on-windows-using-command-command-prompt.htm
目标是这样您可以连接/断开连接并选择CMD的服务器(您可以在Linux中执行相同的操作(,因此您可以通过python代码来cantole the theS thes 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在服务器上连接/断开连接,以确保一切都可以。
欢呼。
我也遇到了这个问题。就我而言,这是由于将文本(英语(翻译成英文。
作为解决方法,我已经使用了另一个软件包langdetect来路由使用Google Translate翻译的非英语文本。
来自代码的一些摘要:
from langdetect import detect
lang = detect(title)
if lang == 'en':
temp_dict['title'] = title
else:
temp_dict['title'] = translator.translate(title, dest='en').text
这是由于翻译限制而发生的。您可以使用VPN或TOR绕过限制。但是,您可以使用跨语言python软件包来绕过它。另外,可以在此处访问语言代码,语言代码。
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())
这是由于API限制所致。每个初始化的翻译限制。因此,通过分解代码在限制后重新开始翻译器。
from googletrans import Translator
translator = Translator()
问题在于一个设备可以使用相同IP提出的请求。更改VPN可以解决问题。NORDVPN的免费替代品是隧道式的替代品。您可以从这里下载它。
对我来说,对Googletranslate API的最大请求为200。因此,每200个请求我手动更改VPN,然后我继续下一个请求。
不幸的是,这里有一些手动工作,因为您每次都需要更改VPN连接。但是,如果您想取得快速的结果并避免编程Python的VPN更改,这很有帮助。