正文:
背景
在中国的有一些餐馆,菜单上不仅有个中文名,还有英文名,有很专业的翻译,也有让人笑Cry的翻译。配上几张图感受一下。
1、Husband and Wife Lung Slice
丈夫和妻子的肺切片?老外看到心里怕是WTF?
2、Keeping the baby
这个餐厅难道有袭击儿童事件吗?先护送孩子离开?
本文主题
不慌,作为一名Python程序猿,岂会被这种问题难倒,接下来分享一款来之辽宁抚顺的Python爱好者编写的一个菜谱汉英译名查询程序。
翻译个夫妻肺片感受下。
是不是很想知道怎么做的?,分享代码如下(请忽略作者面向过程的写法,各路小伙伴可自行优化):
#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# Compiled by Tony96163
'''
简单的菜谱汉英译名查询程序
菜谱语料文件menu_cn_en_dict.txt,采自北京市人民政府外事办公室《中文菜单英文译法(2007)》
程序作者:Tony96163
'''
import jieba
import logging
#关闭jieba的debug日志输出
jieba.setLogLevel(logging.INFO)
def menu_translator():
#读取双语词典文件,返回双语词典及双语分词词典
def get_menu_dict():
bi_dict={} #双语词典
bi_pair_dict={} #双语分词词典
with open("H:/BaiduNetdiskDownload/python_for_all/menu_tr_demo/data/menu_cn_en_dict.txt","rt",encoding="utf-8-sig") as f:
line=f.readlines()
#按tab键切分文本为中文词,英文词两部分
w_pair=[wd.replace("\n","").split("\t") for wd in line]
#按tab键切分文本为中文词,英文词两部分,并对中文词部分进行切分
#切词时务必使用lcut形式直接生成列表
w_seg_pair=[(jieba.lcut(wd.replace("\n","").split("\t")[0]),wd.replace("\n","").split("\t")[1]) for wd in line]
#生成词典
for c_w, e_w in w_pair:
bi_dict[c_w]=e_w
for c_w_list,e_w in w_seg_pair:
#将中文词列表以空格为联接方式,合成字符串
bi_pair_dict[" ".join(c_w_list)]=e_w
return bi_dict,bi_pair_dict
#获取用户输入
def get_user_input():
print("请输入要翻译的中文食品名\n若想退出,请输入空格、'q'或'退出'\n")
return (input('中文食品名:'))
#获取英译词
def get_transation(cn_word):
#读双语词典及双语分词词典
menu_dict,menu_seg_dict=get_menu_dict()
#直接输出有既定辞条的英译文
if cn_word in menu_dict.keys():
print(f"英文食品名:{menu_dict[cn_word]}")
else:
#判断用户输入词汇是否存在于汉语词汇分词列表当中,如果有,返回相应英译名,进行推荐
result=[]
for key,value in menu_seg_dict.items():
#对中文词汇以空格进行切分,形成列表
if cn_word in key.split():
#将中文词汇列表重新拼接在一起,去除空格并返回,同时返回相应的英译文
result.append(("".join(key.split()),menu_seg_dict[key]))
else:
pass
if result != []:
print(f"\n很抱歉,语料库中尚不存在'{cn_word}'的单独辞条。")
print(f"为您找到类似的{len(result)}个食品名,仅供参考:\n")
for (key,value) in result:
print(key+"\t"+value)
#其他情况
else:
print(f"\n很抱歉,'未能找到{cn_word}'的译文。")
print('\n----------这是分界线----------\n')
#获取用户输入
s=get_user_input()
#设定程序退出条件
while s not in ' qQQ退出':
#执行主函数
get_transation(s)
#等待用户的下一轮输入
s=get_user_input()
if __name__=='__main__':
#启动程序
menu_translator()
最终效果
目前这款中英菜谱译名小程序功能还比较简单,需要完善,比如得做个靠谱的jieba自定义词库,正确切分菜名,赋码,最后借相似度实现未入库菜名智能推荐,最理想的是机器学习菜名组合,直接按组合译出新菜名。
全文完