前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手实战Python定制菜谱翻译 | 不到80行代码 !

手把手实战Python定制菜谱翻译 | 不到80行代码 !

作者头像
龙哥
发布2019-06-20 14:28:55
9730
发布2019-06-20 14:28:55
举报
文章被收录于专栏:Python绿色通道Python绿色通道

正文:

背景

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

1、Husband and Wife Lung Slice

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

2、Keeping the baby

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

本文主题

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

翻译个夫妻肺片感受下。

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

代码语言:javascript
复制
#!/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自定义词库,正确切分菜名,赋码,最后借相似度实现未入库菜名智能推荐,最理想的是机器学习菜名组合,直接按组合译出新菜名。

全文完

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档