Python词语转拼音

news2024/11/6 21:41:19

使用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 = page
        self.content = TextField(label='词语之间用空格分割!', multiline=True)
        # 模板路径
        self.template_path = None
        # 生成word路径
        self.word_doc_path = None
        # 创建一个DataTable
        self.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.path
                print(f'名称:{file.name}, 大小: {file.size}')
        self.zhuyin_btn.disabled = False
        self.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 = True
        self.table.rows.extend(self.table_rows)
        self.update()
 
        def close_dlg(e):
            dialog.open = False
            os.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 = dialog
        dialog.content = Text(self.word_doc_path)
        dialog.open = True
        self.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):
                    pass
                else:
                    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 = 800
    page.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.coloradmin.cn/o/1115133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIKE水动力笔记18_如何将dfsu流场模拟结果的数据导出成txt文件

本文目录 前言Step 1 前置工作Step 2 导出相应数据 前言 MIKE的模拟结果dfsu文件的数据是可以导出的,导出格式为xyz,我们也可以将其改后缀改为txt文本格式,其中包含了某一时刻下所有网格坐标点的数据。 Step 1 前置工作 首先,在…

【驱动开发】控制stm32mp157a开发板三盏灯的亮灭

编写应用程序控制三盏灯的亮灭 head.h: #ifndef __HEAD_H__ #define __HEAD_H__typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;//LED灯的寄存器地址 #define …

unity脚本_力 c#

创建一个脚本 将代码挂载到物体上 取消物体的重力 运行即向z轴运动 加力之后 是否停止是由阻力影响 如果阻力为零 则会一直运动 如果希望就算有阻力也让物体一直动就将加力代码放在Update函数里 using UnityEngine; public class Power : MonoBehaviour{ Rigidbody rigidBo…

SpringBoot 打包与运行

一、SpringBoot 程序打包 1、在Springboot工程 pom文件中&#xff0c;引入 spring-boot-maven-plugin 插件。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifact…

基于鹈鹕优化的BP神经网络(分类应用) - 附代码

基于鹈鹕优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于鹈鹕优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.鹈鹕优化BP神经网络3.1 BP神经网络参数设置3.2 鹈鹕算法应用 4.测试结果&#xff1a;5.M…

基于蛇优化优化的BP神经网络(分类应用) - 附代码

基于蛇优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蛇优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蛇优化优化BP神经网络3.1 BP神经网络参数设置3.2 蛇优化算法应用 4.测试结果&#x…

二零二三充能必读 | 1024程序员狂欢节 —— 掌握前沿技术,探索未知领域

文章目录 I T 技术 ( I T T e c h n o l o g y ) IT技术(IT Technology) IT技术(ITTechnology)▊《 速学Linux&#xff1a;系统应用从入门到精通》▊《Python网络爬虫入门到实战》 人工智能 ( A r t i f i c i a l I n t e l l i g e n c e ) 人工智能(Artificial Intelligence…

【STM32】两个版本MDK搭建和三种调试器的使用

一、Keil MDK4的安装和介绍 1.Keil MDK和Keil C51的关系 1&#xff09;Keil原来是专门做51&#xff0c;后面被ARM收购&#xff0c; 2&#xff09;Keil MDK是Keil C51的另外一个版本。 2.MDK4下载 Keil Embedded Development Tools for Arm, Cortex-M, Cortex-R4, 8051, C166,…

js鼠标点击添加图标并获取图标的坐标值

给这个图片添加摄像头图标&#xff0c;并获取图标的坐标值&#xff0c;也就是图标的css样式是positon:absolute,获取left和top的值。 图片1 思路是这样的&#xff0c;获取这里的长度&#xff0c; 图片2 1.鼠标点击时距浏览器的左边距离和上边距离&#xff0c;相当于(0,0)坐标 …

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

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

关于AIGC研修班学习笔记

AI工具排行&#xff1a; ChatGptMidjourney——绘画AINotion AI——笔记AITome——做PPT的AIpeioriss Palette.fm——调色AIRemove.bg——抠图AIFliki——视频AIAutoDraw——设计AICopilot——编程AI 国内大模型&#xff1a; 阿里通义千问文心一言讯飞星火商汤日日新腾讯混元…

一文拿下HTTP

HTTP HTTP协议 是应用层使用最广泛的协议之一&#xff0c;从浏览器获取到网页&#xff0c;就是基于http 浏览器和服务器之间的交互桥梁 基于传输层的TCP协议来实现的&#xff0c;是一种无状态的应用层协议 为啥是无状态的呢 简化服务器端的处理逻辑&#xff1a;HTTP是无状态…

【调度算法】NSGA III

写在前面&#xff1a;NSGA III算法在数学上比NSGA II算法要复杂得多&#xff0c;尤其是在参考点那里&#xff0c;我也不是看得很明白&#xff0c;所以这篇文章只是尝试梳理下NSGA III的整体改进思路和优势&#xff0c;不对函数、公式、代码之类的细节做过多分析。如有错误&…

【CANoe】文件处理_hex文件读取解析

hex文件里面只有00&#xff0c;01&#xff0c;04三种码。那么我们在解析的时候只需要对这三种不同状态的进行不同的解析即可。 hex文件格式的解析&#xff0c;可阅读&#xff1a;HEX文件格式详解 首先创建一个Block的结构体&#xff0c;根据经验我们知道&#xff0c;一个数据…

gRPC之gRPC转换HTTP

1、gRPC转换HTTP 我们通常把RPC用作内部通信&#xff0c;而使用Restful Api进行外部通信。为了避免写两套应用&#xff0c;我们使用grpc- gateway 把gRPC转成HTTP。服务接收到HTTP请求后&#xff0c;grpc-gateway把它转成gRPC进行处理&#xff0c;然后以JSON 形式返回数据。…

FOC程序算法编写

1、FOC多路PWM驱动 在BLDC电机控制上&#xff0c;6路PWM 控制模式比3路PWM更自由&#xff0c;因为6个半桥式晶体管的每一个都可以单独控制。 &#xff08;1&#xff09;3PWM &#xff08;2&#xff09;6PWM 2、死区时间 开关元器件的和严格意义并不是相同的。IGBT&#xff0c;…

驱动编写LED灯

demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include<linux/io.h> #include "head.h" unsigned int major; char kbuf[128] {}; // 定义三个指针指向映射后的虚拟…

vue3.0 + element plus upload文件上传

提供了&#xff0c;文件超过指定个数&#xff0c;页面做了隐藏的效果 记录一下

HTTPS、SSL/TLS,HTTPS运行过程,RSA加密算法,AES加密算法

1、为什么网站要使用安全证书 我们所处的网络环境是复杂多样的&#xff0c;大致分为两类&#xff0c;一类是可信的网络服务商&#xff0c;比如直接连的电信运营商的网络&#xff0c;网线&#xff0c;4G&#xff0c;5G&#xff1b;另一类是不可信的网络&#xff0c;比如WIFI&am…

libpcap之零拷贝mmap

一、用户空间 在通过socket(AF_PACKET,…)创建fd后&#xff0c;进行接收队列的建立 //pcap-linux.c static int pcap_activate_linux(pcap_t *handle) { ...ret setup_mmapped(handle, &status); ... }1.1 设置默认ring bufer size static int setup_mmapped(pcap_t *h…