这次接到一个需求,需要把postgresql数据库中批量的地名进行翻译,大约200多个,自己翻译也非常的慢。于是想到用百度翻译的API对数据库的数据逐条进行翻译。正好也在学习Python语言,正好可以用Python对数据库的内容进行朱行翻译。数据如下所示:
百度API
标准版:提供基础文本翻译服务,QPS(每秒并发请求量)=1,个人或企业用户均可申请使用
高级版:提供基础文本翻译服务,同时可申请自定义词表功能(敬请期待),QPS=10,供个人认证用户申请使用
尊享版:提供基础文本翻译服务,同时可申请词典、语音合成、自定义词表功能,QPS=100,供企业认证用户申请使用
标准版:免费使用,不限使用字符量
高级版、尊享版:每月翻译字符数低于200万,享免费服务;超过200万字符,按照49元/百万字符支付当月超出部分字符量费用
为了速度快一点,我这里选择的是高级版,毕竟数据不是非常多。
python代码
import psycopg2import hashlibimport psycopg2.extrasimport randomimport jsonimport requestsimport timeconn = psycopg2.connect(database="bike", user="postgres", password="postgres", host="localhost", port="5432")cursor = conn.cursor()print("Opened database successfully")def translate(cn):url = "http://api./api/trans/vip/translate?from=zh&to=en&appid=0816000327052&q=" + cnappid = "自己的百度翻译appid"secret = "自己的百度翻译secret"# 随机数salt = str(random.randint(5000, 10000))data = appid + cn + salt + secretmm = hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()# md5加密url = url + "&salt=" + salt + "&sign=" + mmresponse = requests.get(url)print(response.text)data = json.loads(response.text)return data["trans_result"][0]["dst"]save_data = []sql_select = "select gid,street from shanghai1"cursor.execute(sql_select)rows = cursor.fetchall()for row in rows:result =translate(row[1]).replace("'","")save_data.append({"gid": str(row[0]), "name": result})time.sleep(0.2) # 避免频繁调用百度翻译失败,账号有迸发限制mit()cursor.close()conn.close()conn = psycopg2.connect(database="bike", user="postgres", password="postgres", host="localhost", port="5432")cursor = conn.cursor()for item in save_data:sql_update = "update shanghai1 set name = '"+item["name"]+"' where gid ="+item["gid"]+";"print(sql_update)cursor.execute(sql_update)print(cursor.rowcount)mit()print(cursor.rowcount)cursor.close()conn.close()
翻译结果
运行前面的python代码,最终的翻译结果如下图所示
感觉这个小功能还是非常有用的,和大家分享一下
如果觉得《基于百度翻译API和python的批量地名翻译的实现》对你有帮助,请点赞、收藏,并留下你的观点哦!