再谈Python之拼音拆分
在《Python之拼音拆分》一文中已经给出了解决办法,但最近又遇到一些新的问题。
一号同学最近在写一个工具,需要根据拼音字符串拆分出来所有可能的拼音组合
这么说可能大家不太理解,比如
zhangangai
可以拆分为
zhan gan gai zhan gang ai zhang an gai zhang ang ai
这尼玛就离谱的很,用之前的思路只能拆出来一个ZhanGanGai
,其他的可能就无法拆分了
分析了一下原因,主要是因为上一个拼音的最后一个字符去掉后不会造成前一个拼音无法拼写,同时也可以和后一个拼音相结合
这就没法按之前的思路来处理了
于是想了一个新的办法
首先第一个拼音,不管是zha
、zhan
、zhang
,都是在之前的长度后面新增字母,那就可以先从第一个字符开始,往后遍历,遍历到第一次能够识别出来一个完整的拼音的时候,再将后面的字符单独提取出来再从新开始遍历完整的拼音,直到结束时能够刚刚分完,则为一种有效的分法
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)
效果如下
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析