Python词语转拼音

使用python写的图形汉语词语转拼音小工具

1)安装库

pip install flet

2)代码

# 声母列表
initial_consonant_list = ['b', 'p', 'm', 'f', 'd', 't', 'n', 'l', 'g', 'k', 'h', 'j', 'q', 'x', 'zh', 'ch', 'sh', 'r','z', 'c', 's', 'y', 'w']
# 韵母列表
list_of_vowels = ['a', 'o', 'e', 'i', 'u', 'ü', 'ai', 'ei', 'ui', 'ao', 'ou', 'iu', 'ie', 'üe', 'er', 'an', 'en', 'in','un', 'ün', 'ang', 'eng', 'ing', 'ong']class Chinese2PinYin(UserControl):# 构造方法def __init__(self, page: Page):super().__init__()self.page = pageself.content = TextField(label='词语之间用空格分割!', multiline=True)# 模板路径self.template_path = None# 生成word路径self.word_doc_path = None# 创建一个DataTableself.table = DataTable(border=flet.border.all(0.8, "black"),bgcolor=flet.colors.GREY_50,border_radius=10,vertical_lines=flet.border.BorderSide(1, "black"),horizontal_lines=flet.border.BorderSide(1, "black"),visible=False,columns=[DataColumn(Text("词语")),DataColumn(Text("本地")),DataColumn(Text("百度")),])# 保存拼音不同的记录self.table_rows = []# 选择模板self.file_template = flet.FilePicker(on_result=self.pick_file_result)# 注音按钮self.zhuyin_btn = ElevatedButton('注音', disabled=True, icon=flet.icons.SAVE, on_click=self.generate_pinyin)def build(self):self.page.overlay.append(self.file_template)return Column(controls=[Row(controls=[Text('声母: ', size=20),Text('\t'.join(initial_consonant_list), size=18)]),Column(controls=[Text('韵母(24个): ', size=20),Row(controls=[Text('单韵母(6个): ', size=18),Text('\t'.join(list_of_vowels[0:6]), size=18)]),Row(controls=[Text('复韵母(8个): ', size=18),Text('\t'.join(list_of_vowels[6:14]), size=18)]),Row(controls=[Text('特殊元音韵母(1个): ', size=18),Text(list_of_vowels[14], size=18)]),Row(controls=[Text('前鼻韵母(5个): ', size=18),Text('\t'.join(list_of_vowels[15:20]), size=18)]),Row(controls=[Text('后鼻韵母(4个): ', size=18),Text('\t'.join(list_of_vowels[20:]), size=18)]),]),# 分割器flet.Divider(height=3, color=flet.colors.BROWN_50),Text(value='请输入要注音的汉字: ', size=20),self.content,Row(controls=[ElevatedButton('选择模板...', icon=flet.icons.UPLOAD_FILE, on_click=self.select_template),self.zhuyin_btn],alignment=flet.MainAxisAlignment.END),self.table,])def pick_file_result(self, e: flet.FilePickerResultEvent):if e.files:for file in e.files:self.template_path = file.pathprint(f'名称:{file.name}, 大小: {file.size}')self.zhuyin_btn.disabled = Falseself.update()def select_template(self, e):self.file_template.pick_files(dialog_title='选择拼音模板', initial_directory='.', allowed_extensions=['doc', 'docx'])def generate_pinyin(self, e):"""点击"拼音"按钮事件:param e::return:"""txt = self.content.value# 输出所有的词语print(txt)self.word_2_pinyin(txt)# 表格赋值self.table.visible = Trueself.table.rows.extend(self.table_rows)self.update()def close_dlg(e):dialog.open = Falseos.startfile(pathlib.Path.home())  # windows平台打开指定的目录self.page.update()# 弹框提示word生成路径dialog = AlertDialog(title=Text('生成文档路径'),actions=[TextButton("确定", on_click=close_dlg)],actions_alignment=flet.MainAxisAlignment.END,)self.page.dialog = dialogdialog.content = Text(self.word_doc_path)dialog.open = Trueself.page.update()def word_2_pinyin(self, ciyu):"""词组或汉字转拼音"""# 读取模板doc = DocxTemplate(self.template_path)# 保存汉字和拼音列表结果py_hz = []all_words = [item for item in ciyu.strip().replace('\n', ' ').split(" ") if item]  # 去掉换行符,并用空格分割line_word_num = 7  # 每行词组个数for j in range(1, math.ceil(len(all_words) / line_word_num) + 1):word_5 = all_words[line_word_num * (j - 1):line_word_num * j]row_1 = {}for i in range(len(word_5)):py = lazy_pinyin(word_5[i], style='Style.TONE')baidu_pinyin = chinese_2_pinyin(word_5[i], 'BAIDU', True)if baidu_pinyin and baidu_pinyin == ' '.join(py):passelse:self.table_rows.append(DataRow(cells=[DataCell(Text(word_5[i])),DataCell(Text(' '.join(py), selectable=True)),DataCell(Text(baidu_pinyin, selectable=True)),]))if pinyin_start_valid(py[0]):row_1[f'p{i + 1}1'] = py[0][0:2]row_1[f'p{i + 1}2'] = py[0][2:]else:row_1[f'p{i + 1}1'] = py[0][0]row_1[f'p{i + 1}2'] = py[0][1:]if pinyin_start_valid(py[1]):row_1[f'p{i + 1}3'] = py[1][0:2]row_1[f'p{i + 1}4'] = py[1][2:]else:row_1[f'p{i + 1}3'] = py[1][0]row_1[f'p{i + 1}4'] = py[1][1:]max_len = max([len(i) for i in py])if max_len > 3:row_1[f'h{i + 1}'] = '  '.join(list(word_5[i]))elif max_len > 2:row_1[f'h{i + 1}'] = ' '.join(list(word_5[i]))py_hz.append(row_1)# 需要传入的字典, 需要在word对应的位置输入 {{ first_py }}context = {"items": py_hz}doc.render(context)  # 渲染到模板中# 生成文档self.word_doc_path = f"{pathlib.Path.home()}{os.sep}拼音在汉字上面(表格).docx"doc.save(self.word_doc_path)def pinyin_start_valid(pinyin):"""判断拼音是否以zh,ch,sh开头"""return pinyin.startswith('zh') or pinyin.startswith('ch') or pinyin.startswith('sh')def main(page: Page):# 标题page.title = '生成汉字拼音工具v1.0'page.window_width = 800page.window_height = 700# 居中page.window_center()app = Chinese2PinYin(page)page.add(app)if __name__ == '__main__':flet.app(target=main, assets_dir='assets')

3)测试版本,有问题及时留言
链接: https://pan.baidu.com/s/1SHwX5ma-q26nuY7Wm0paqA?pwd=983p 提取码: 983p 复制这段内容后打开百度网盘手机App,操作更方便哦
目前已经支持 2个汉字,3个汉字,4个汉字的拼音

4)展示效果

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/164594.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudSleuth异步线程支持和传递

场景 在使用Sleuth做链路跟踪时,默认情况下异步线程会断链,需要进行代码调整支持。 调整内容 方式一 使用Async实现异步线程 开启异步线程池 EnableAsync SpringBootApplication public class LizzApplication {public static void main(String[] a…

织造业的数字安全守护者:深入了解迅软DSE数据加密

客户简要介绍 某织造企业成立于2004年,工厂位于苏州平望,公司目前拥有先进纺织设备330台套和日本瑞士等前道配套设备,公司占地33亩、具有现代化标准厂房办公楼等3万平米。 某织造企业面料、功能性面料、新材料面料的生产商,公司坚…

教程更新 | 持续开源 RK3568驱动指南-驱动基础进阶篇

《iTOP-RK3568开发板驱动开发指南》手册文档更新,手册内容对应视频教程,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 ✦ 第一篇 驱动基础 第1章 前言 第2章 你好!内核源码 第3章 …

Mysql第二篇---InnoDB数据存储结构

Mysql第二篇—InnoDB数据存储结构 数据库的存储结构: 页 索引结构给我们提供了高效的索引方式, 不过索引信息以及数据记录都是保存在文件上的(innodb的ibd文件, MyISAM的MyI和MyD文件), 确切的说是存储在页结构中. 另一方面, 索引是在存储引擎中实现的, MySQL服务器上的存储引…

工业自动化编程与数字图像处理技术

工业自动化编程与数字图像处理技术 编程是计算机领域的基础技能,对于从事软件开发和工程的人来说至关重要。在工业自动化领域,C/C仍然是主流的编程语言,特别是用于工业界面(GUI)编程。工业界面是供车间操作员使用的,使用诸如Hal…

二叉树,堆排序及TopK问题

要讲二叉树的概念,就要先讲树的概念。 树是什么呢? 树其实是一种储存数据的结构,因为他的结构倒过来和生活中的树很相似所以才被称之为树。 这是一颗多叉树,从最顶端的节点可以找到下边的几个节点,下边的节点又可以找…

【力扣刷题】回文链表、环形链表、合并两个有序链表

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 刷题篇 一、回文链表1.1 题目描述1.2 思路分…

1.16.C++项目:仿muduo库实现并发服务器之HttpContext以及HttpServer模块的设计

文章目录 一、HttpContext模块二、HttpServer模块三、HttpContext模块实现思想(一)功能(二)意义(三)接口 四、HttpServer模块实现思想(一)功能(二)意义&#…

经典网络模型

Alexnet VGG VGG的启示 VGGNet采用了多次堆叠3x3的卷积核,这样做的目的是减少参数的数量。 例如,2个3x3的卷积核效果相当于1个5x5的卷积核效果,因为它们的感受野(输入图像上映射区域的大小)相同。但2个3x3卷积核的参数…

1024程序员狂欢节 | IT前沿技术、人工智能、数据挖掘、网络空间安全技术

一年一度的1024程序员狂欢节又到啦!成为更卓越的自己,坚持阅读和学习,别给自己留遗憾,行动起来吧! 那么,都有哪些好书值得入手呢?小编为大家整理了前沿技术、人工智能、集成电路科学与芯片技术、…

YOLOv8改进实战 | 更换主干网络Backbone之轻量化模型Efficientvit

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

PHP的学习入门建议

学习入门PHP的步骤如下: 确定学习PHP的目的和需求,例如是为了开发网站还是为了与数据库交互等。学习PHP的基础语法和程序结构,包括变量、数据类型、循环、条件等。学习PHP的面向对象编程(OOP)概念和技术。学习与MySQL…

BIO、NIO、IO多路复用模型详细介绍Java NIO 网络编程

文章目录 前言基本概念BIO过程NIO过程IO多路复用过程Java NIO编程Java NIO 核心概念Java NIO 示例 总结 前言 上文介绍了网络编程的基础知识,并基于 Java 编写了 BIO 的网络编程。我们知道 BIO 模型是存在巨大问题的,比如 C10K 问题,其本质就…

TCP/IP模型五层协议

TCP/IP模型五层协议 认识协议 约定双方进行的一种约定 协议分层 降低了学习和维护的成本(封装)灵活的针对这里的某一层协议进行替换 四/五层协议 五层协议的作用 应用层 应用层常见协议 应用层常见协议概览 基于TCP的协议 HTTP(超…

腾讯云 CODING 快速应用中心,让您 10 分钟轻松玩转 AIGC

点击链接了解详情 前言 AI 时代已经到来,与其说这是一个技术变革,不如说这是对我们工作和生活方式的全面升级。很多人已经听说过 Stable Diffusion AI 绘图和 Meta 公司推出的免费大语言模型 Llama 2,它们代表了当今最前沿的技术水平。但对于…

1.5状态压缩DP

1.小国王 在 n n nn nn的棋盘上放 k k k个国王,国王可攻击相邻的 8 8 8个格子,求使它们无法互相攻击的方案总数。 输入格式 共一行,包含两个整数 n n n和 k k k。 输出格式 共一行,表示方案总数,若不能够放置则输出…

全国产EtherCAT运动控制边缘控制器(五):IO配置与回零运动的Python+Qt开发

今天,正运动小助手给大家分享一下全国产EtherCAT运动控制边缘控制器ZMC432H如何使用PythonQT实现单轴回零运动控制开发。 01 功能简介 全国产EtherCAT运动控制边缘控制器ZMC432H是正运动的一款软硬件全国产自主可控,运动控制接口兼容EtherCAT总线和脉冲…

Elasticsearch使用——结合MybatisPlus使用ES es和MySQL数据一致性 结合RabbitMQ实现解耦

前言 本篇博客是一篇elasticsearch的使用案例,包括结合MybatisPlus使用ES,如何保证MySQL和es的数据一致性,另外使用了RabbitMQ进行解耦,自定义了发消息的方法。 其他相关的Elasticsearch的文章列表如下: Elasticsear…

【无人机】太阳能伪卫星VoLTE无人机设计(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MySQL数据库简单安装

MySQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管…