妹子是做翻译相关的,遇到个问题,要求得到句子中的所有单词的 音标;
有道翻译只能对单个单词翻译音标,不能对多个单词或者句子段落翻译音标;
手工一个一个翻的话那就要累死人了.....于是就让我写个翻译音标工具
一开始没想到该怎么搞,,之后突然想到了利用有道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+"\n")
if lines == 4:
Wfile.write(data+"\n")
Wfile.write("")
print "翻译 success!"
print " "
Wfile.close()