做一个英译中的命令行工具
2021/9/26 23:13:04
本文主要是介绍做一个英译中的命令行工具,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
用python
实现,调用了百度翻译和金山词霸的接口
baidu_translate.py
百度翻译实现
# -*- coding:utf-8 -*- import time from urllib import parse import hashlib import requests class BaiduTranslate(object): def __init__(self): self.appid = '百度开发者appid' self.key = '百度开发者appkey' self.url = 'http://api.fanyi.baidu.com/api/trans/vip/translate' self.headers = { 'Content-Type': 'application/x-www-from-urlencoded' } def get_sign(self, q, salt): str1 = self.appid + q + salt + self.key sign = hashlib.md5(str1.encode('utf-8')).hexdigest() return sign def do_translate(self, q, type_=0): """q: 待翻译字符; type_: 翻译类型。0 表示英文转中文,1 表示中文转英文, 2 表示自动选择""" lang_list = [('en', 'zh'), ('zh', 'en'), ('auto', 'auto')] from_lang, to_lang = lang_list[type_] salt = str(round(time.time())) sign = self.get_sign(q, salt) params = { 'q': q, 'from': from_lang, 'to': to_lang, 'appid': self.appid, 'salt': salt, 'sign': sign } result = self.send_req(self.url, params) translate_result = self.process(result) return translate_result @staticmethod def process(result_json): ret = result_json if 'error_code' not in result_json: result = result_json['trans_result'] ret = result[0]['dst'] return ret def send_req(self, url, params): """发送请求,返回结果 json""" req = requests.post(url, params=params, headers=self.headers) res = req.json() return res if __name__ == '__main__': word = 'tear' type_ = 0 tl = BaiduTranslate() data = tl.do_translate(word, type_) print(data)
jinshan_translate.py
金山词霸接口实现
# -*- coding:utf-8 -*- """ 使用金山词霸接口实现翻译 """ import requests from urllib import parse class JinshanTranslate(object): def __init__(self): self.base_url = 'https://dict-mobile.iciba.com/interface/index.php' self.params = { 'c': 'word', 'm': 'getsuggest', 'is_need_mean': 0 } def do_translate(self, q, type_=None): """q 是待翻译的词语,可以是英语也可以是中文。 type_ 没有用,是为了跟百度的翻译接口保持一致""" self.params['word'] = q url = self.base_url + '?' + parse.urlencode(self.params) req = requests.get(url) res = req.json() ret = '(无结果)' if res['status'] != 1: ret = res elif res['message']: key = res['message'][0]['key'] paraphrase = res['message'][0]['paraphrase'] if key != key: ret = f'({key}) {paraphrase}' else: ret = paraphrase return ret if __name__ == '__main__': translator = JinsanTranslate() result = translator.do_translate('tear') print(result)
整合两个,以实现同时获取两个接口的翻译
translator.py
# -*- coding:utf-8 -*- import os import sys from baidu_translate import BaiduTranslate from jinshan_translate import JinshanTranslate class Translation(object): def __init__(self, translate_object): self.translator = translate_object() def translate(self, q, type_=0): """Call do_translate method""" ret = self.translator.do_translate(q, type_) return ret if __name__ == '__main__': argvs = sys.argv word = '' type_ = 0 if len(argvs) < 2: print('参数不足,需要输入待翻译的字符') elif len(argvs) == 2: word = argvs[1] else: word, type_ = argvs[1:3] type_ = int(type_) t1 = Translation(BaiduTranslate) data1 = t1.translate(word, type_) # 保存到本地文件 log_file_path = os.path.join(os.path.dirname(sys.argv[0]), 'query_log.log') log_file = open(log_file_path, 'a', encoding='utf-8') log_file.write('\n') log_file.write('-'*60) print(f'待翻译词语: {word}') print() print(f'百度翻译结果: {data1}') log_file.write(f'\n{word}: {data1}\n') log_file.flush() t2 = Translation(JinshanTranslate) data2 = t2.translate(word) print(f'金山词霸结果:{data2}') log_file.write(f'{word}: {data2}') log_file.close()
使用命令:
# python translator.py文件路径 待翻译单词 # 如下: python3 /mnt/e/temp/Translation/translator.py tear
为前面的命令设置一个别名,编辑 ~/.bashrc 文件,添加
alias trans='python3 /mnt/e/code/python/Translation/translator.py'
执行 source ~/.bashrc
使其生效,就可以使用 trans 单词
的格式来执行翻译,如下:
trans tear
结果如下:
这篇关于做一个英译中的命令行工具的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现