首页 > 编程语言 >再谈Python之拼音拆分

再谈Python之拼音拆分

时间:2024-03-05 17:48:01浏览次数:22  
标签:__ word 拼音 Python 再谈 拆分 pyList pList

《Python之拼音拆分》一文中已经给出了解决办法,但最近又遇到一些新的问题。

一号同学最近在写一个工具,需要根据拼音字符串拆分出来所有可能的拼音组合

这么说可能大家不太理解,比如

zhangangai

可以拆分为

zhan gan gai
zhan gang ai
zhang an gai
zhang ang ai

这尼玛就离谱的很,用之前的思路只能拆出来一个ZhanGanGai,其他的可能就无法拆分了

分析了一下原因,主要是因为上一个拼音的最后一个字符去掉后不会造成前一个拼音无法拼写,同时也可以和后一个拼音相结合

这就没法按之前的思路来处理了

于是想了一个新的办法

首先第一个拼音,不管是zhazhanzhang,都是在之前的长度后面新增字母,那就可以先从第一个字符开始,往后遍历,遍历到第一次能够识别出来一个完整的拼音的时候,再将后面的字符单独提取出来再从新开始遍历完整的拼音,直到结束时能够刚刚分完,则为一种有效的分法

zhangangai

[z]hangangai----no
[zh]angangai----no
[zha]ngangai----yes,将[ngangai]再去重新识别
……
[zhan]gangai---yes,将[gangai]再去重新识别

代码实现如下

#!/usr/bin/python
# Author:wkong、

def DynamicProgramming(word, wordList, pinyinListStr=''):
    wordLen = len(word)

    for i in range(0, wordLen+1):
        pList = pinyinListStr.split(',')
        if word[0:i] in wordList:
            if i == wordLen:
                pList.append(word[0:i])
                print('Success:')
                print(pList)
            else:
                pList.append(word[0:i])
                DynamicProgramming(word[i:], wordList, ','.join(pList))

if __name__ == '__main__':
    smList = 'z,zh,g,h,n,w,p'.split(',')
    ymList = 'a,an,ang,ai,e,ei,u,ua,uan,en,eng'.split(',')
    ztrdList = 'a,an,ang,ai,e,ei'.split(',')

    pyList = [] # 字典

    # 根据声母、韵母、整体认读音节排列组合出所有拼音字典
    # 这里为了方便演示,只加入了演示拼音涉及到的声母、韵母、整体认读音节
    for s in smList:
        for y in ymList:
            tmp = s+y
            if tmp not in pyList:
                pyList.append(tmp)

    for z in ztrdList:
        if z not in pyList:
            pyList.append(z)

    

    DynamicProgramming('zhangangai', pyList)
    print('----------------------')
    DynamicProgramming('guanapenga', pyList)

效果如下

标签:__,word,拼音,Python,再谈,拆分,pyList,pList
From: https://www.cnblogs.com/WaxToday/p/18054535

相关文章

  • Python之拼音拆分
    经常会需要用到将zhangwei转化为ZhangWei、Zw、Zhangw之类的,就涉及到一个拼音拆分算法,这里写了一个demo分享给大家我的思路是先将声母转换为大写,然后就可以根据大写字母来分割单个拼音学的拼音早忘差不多了,百度了一下,声母有bpmfdtnlgkhjqxrzczyw转化代码defsm(strs):sml......
  • python-Grequests,一个好用的 requests库的异步版本!
    Grequests是什么?grequests是一个Python库,它是requests库的异步版本。它允许你同时发送多个HTTP请求,而不必等待每个请求依次响应。可以在等待服务器响应的同时执行其他任务,从而节省时间并提高效率。安装Grequestspipinstallgrequests使用示例一:批量获取网页假如有一个......
  • python-jose,一个好用的 Python 库!
    python-jose介绍:在做接口测试或者接口自动化测试中,身份验证和授权是很重要的一部分。JSONWebToken(JWT)是一种流行的身份验证和授权解决方案,它能够安全地在网络中传输信息。python-jose库是Python中处理JWT的强大工具,提供了丰富的功能和灵活的接口,能够轻松地处理JWT的生成、......
  • python turtle相关
    一、简介二、内容三、问题 一、简介最近需要考计算机二级python,然后里面出现了平时基本没用到的turtle,在这里做一下复习总结。turtle,  是Python中用来绘图的标准库,它总体上讲,就是控制一只乌龟在纸上画画,控制它的朝向,笔粗细,填充。二、内容以下,按书上......
  • Python 生成随机字符串
    0x00吐槽最近让项目坑的没办法,老写一些脚本来协助工作,刚好在测试python生成word的时候遇到需要随机字符串来命名文档名,简单写点东西记录一下0x01一班的童靴其实随机字符串这个东西在任何语言里都经常会用到,而且解决方法也简单首先定义一个字符串,随机字符串就从这里面取,然......
  • vsc 如何调试远程python代码
    1、远程python环境准备下载minicondahttps://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/注意py版本,需要下载对应版本的conda,找到对应的版本后(这里选择py312),鼠标右键复制链接wget 相关链接bash xxx.sh  按提示操作就行。最后一个提示可能是:是......
  • Python:如何风骚而又不失优雅的使用Switch...Case
    本渣PHP屌丝一枚,最近在用Python做一个东西碰到了这个问题,在这里给没踩过坑的朋友分享下以Python2.7为例从前有座山碰到参数特别多的情况的时候总是看着一堆if...elseif抓狂,斩不断,理还乱,幸好有Switch...Case可以很方便的处理多种情况的参数但是在Python中没有Switch...Case......
  • 1.Python3 基础语法
    Python3基础语法Python3中文官方文档https://docs.python.org/zh-cn/3.9/Python标准库https://docs.python.org/zh-cn/3.9/library/index.html1.Python保留字保留字即关键字,我们不能把它们用作任何标识符名称。Python的标准库提供了一个keyword模块,可以输出当前版本的......
  • 3.Python3 流程控制
    Python3流程控制和其它编程语言一样,按照执行流程划分,Python程序也可分为3大结构,即顺序结构、选择(分支)结构和循环结构:Python顺序结构就是让程序按照从头到尾的顺序依次执行每一条Python代码,不重复执行任何代码,也不跳过任何代码。Python选择结构也称分支结构,就是让程序......
  • 2.Python3 基本数据类型
    Python3基本数据类型python是弱类型语言,弱类型语言有两个特点:变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。弱类型并不等于没有类型!弱类型是说在书写......