妹子是做翻译相关的,遇到个问题,要求得到句子中的所有单词的 音标;
有道翻译只能对单个单词翻译音标,不能对多个单词或者句子段落翻译音标;
手工一个一个翻的话那就要累死人了.....于是就让我写个翻译音标工具
一开始没想到该怎么搞,,之后突然想到了利用有道api网页翻译来做每个单词的音标翻译;
选择了python语言来写;也想过用C#或者c++来做,但是要用到curl库,解析json代码也麻烦;就直接用python写了;
有道翻译api网站: 需要申请key,直接替换 self.key = 'xxxx' self.keyfrom = 'xxxx' 就可以了
http://fanyi.youdao.com/openapi?path=data-mode
后来妹子说,他们有时候需要处理 字幕srt 文件的音标翻译,一句一句太慢了,
想直接读取srt,输出txt的工具;
下面上代码: 支持单行输入及输出:
# -*- coding: utf-8 -*- import sys import urllib2 import re import json import string class Youdao: def __init__(self): self.url = 'http://fanyi.youdao.com/openapi.do' self.key = '1106591478' self.keyfrom = 'left69' def get_translation(self,words): url = self.url + '?keyfrom=' + self.keyfrom + '&key='+self.key + '&type=data&doctype=json&version=1.1&q=' + words result = urllib2.urlopen(url).read() json_result = json.loads(result) json_result = json_result["translation"] for i in json_result: print i youdao = Youdao() def get_yinbiao(words): splitStr = words for c in string.punctuation: if c != "'": splitStr = splitStr.replace(c, ' ') print " "+splitStr listu = splitStr.split(' ') output = "" for j in listu: output = output + ' ' + SendGet(j) print output def SendGet(str): judge = str.lower() if judge.lower()=="it": return "it" if judge.lower()=="mr": return "'miste(r)" #print str url = "http://fanyi.youdao.com/openapi.do?keyfrom=left69&key=1106591478&type=data&doctype=json&version=1.1&q="+str req = urllib2.Request(url) res_data = urllib2.urlopen(req) res = res_data.read() #print res if(res == "no query"): return judge hjson = json.loads(res) #print hjson['basic']['uk-phonetic'] #danci = hjson['basic']['uk-phonetic'] if(hjson['errorCode']!=0): return judge if hjson.has_key('basic'): if hjson['basic'].has_key('uk-phonetic'): danci=hjson['basic']['uk-phonetic'] else: return judge danci = danci.replace('[','') danci = danci.replace(']','') if danci.find(";") != -1: listu = danci.split(';') for j in listu: if len(j)>0 : return j if danci.find(",") != -1: listu = danci.split(',') for j in listu: if len(j)>0 : return j return danci elif hjson.has_key('query'): danci=hjson['query'] if danci.find(";") != -1: listu = danci.split(';') for j in listu: return j return danci return judge while True: msg=raw_input("Enter input:") if msg == 'quit': break get_yinbiao(msg) #youdao.get_translation(msg)
上代码: 支持 srt格式的字幕
# -*- coding: utf-8 -*- import sys import urllib2 import re import json import string import os import sys reload(sys) sys.setdefaultencoding( "utf-8" ) class Youdao: def __init__(self): self.url = 'http://fanyi.youdao.com/openapi.do' self.key = '1106591478' self.keyfrom = 'left69' def get_yinbiao(self,words): splitStr = words for c in string.punctuation: if c != "'": splitStr = splitStr.replace(c, ' ') #print " "+splitStr listu = splitStr.split(' ') output = "" for j in listu: output = output + ' ' + self.SendGet(j) return output def SendGet(self,str): judge = str.lower() if judge.lower()=="it": return "it" if judge.lower()=="mr": return "'miste(r)" #print str url = "http://fanyi.youdao.com/openapi.do?keyfrom="+self.keyfrom+"Trans&key="+self.key+"&type=data&doctype=json&version=1.1&q="+str req = urllib2.Request(url) res_data = urllib2.urlopen(req) res = res_data.read() #print res if(res == "no query"): return judge hjson = json.loads(res) #print hjson['basic']['uk-phonetic'] #danci = hjson['basic']['uk-phonetic'] if(hjson['errorCode']!=0): return judge if hjson.has_key('basic'): if hjson['basic'].has_key('uk-phonetic'): danci=hjson['basic']['uk-phonetic'] else: return judge danci = danci.replace('[','') danci = danci.replace(']','') if danci.find(";") != -1: listu = danci.split(';') for j in listu: if len(j)>0 : return j if danci.find(",") != -1: listu = danci.split(',') for j in listu: if len(j)>0 : return j return danci elif hjson.has_key('query'): danci=hjson['query'] if danci.find(";") != -1: listu = danci.split(';') for j in listu: return j return danci return judge youdao = Youdao() srt_path = sys.path[0] #print srt_path os.chdir(srt_path) FileNames = os.listdir(srt_path) #print FileNames #for d_file in FileNames:# # if ('.txt' not in d_file and '.srt' not in d_file): # continue # print d_file while True: #file = open(d_file, 'r+','utf8') d_file = raw_input("Enter file name:") if d_file == 'q': break file = open(d_file, 'r+') count = len(open(d_file, 'r+').readlines()) print count w_file = d_file.split('.')[0] + "_out.txt" #print w_file Wfile = open(w_file,'w') line = 0 pocess = 1 while 1: line = line + 1 line2 = 1 data = file.readline() if not data : break lines = line % 5 if lines == 3: pp = pocess*500/count ppp = '%d' %pp pos = "Process:"+ppp + "%" print pos pocess = pocess+1 Wfile.write(data) writedata=youdao.get_yinbiao(data) Wfile.write(writedata+" ") if lines == 4: Wfile.write(data+" ") Wfile.write("") print "翻译 success!" print " " Wfile.close()