Python定制菜谱翻译 | 不到80行代码 !

背景

每逢佳节胖十斤,虽然清明节不是一个佳节,但对于城市繁忙工作的节奏,清明也算得上一个小长假。很多人在这个节日除了回乡扫墓之外,免不了聚餐吃喝,毕竟关于吃,咱们可从不将就。

在中国的有一些餐馆,菜单上不仅有个中文名,还有英文名,有很专业的翻译,也有让人笑Cry的翻译。配上几张图感受一下。

1、Husband and Wife Lung Slice

丈夫和妻子的肺切片?老外看到心里怕是WTF?

Python学习交流群:1004391443

 

 

 

 

 

 

 

2、Keeping the baby

这个餐厅难道有袭击儿童事件吗?先护送孩子离开?

 

 

 

 

 

 

本文主题

不慌,作为一名Python程序猿,岂会被这种问题难倒,接下来分享一款来之辽宁抚顺的Python爱好者编写的一个菜谱汉英译名查询程序。

翻译个夫妻肺片感受下。

 

 

 

 

 

是不是很想知道怎么做的?,分享代码如下(请忽略作者面向过程的写法,各路小伙伴可自行优化):

  •  
#!/usr/bin/python3.7# -*- coding: utf-8 -*-# Compiled by Tony96163'''简单的菜谱汉英译名查询程序菜谱语料文件menu_cn_en_dict.txt,采自北京市人民政府外事办公室《中文菜单英文译法(2007)》程序作者:Tony96163'''import jiebaimport 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自定义词库,正确切分菜名,赋码,最后借相似度实现未入库菜名智能推荐,最理想的是机器学习菜名组合,直接按组合译出新菜名。

后记

本文由ISO团队发布,创作内容包含Python、数据分析、机器学习等知识圈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值