背景
拆解拼音? 看完图你应该已经知道了
咦.....那百度是怎么拆解出
ni men gong si
的呢?
来分析一波
通常,我们是先想出基本实现过程,然后再优化过程点,最后得出最优解。
通常大体思路是:
image.png1、拆分用户输入
2、与音节做有效匹配 得出解
接下来我们开始分解,优化每一步
1、拆分用户输入
定个目标:要找出所有有效的音节(正向的)
像上图的 拆分 拆分到o时,这个规则就行不通了,会漏掉 gong
, 如下:
介就尴尬咯,咦....好像回退步骤是可以找到 gong
这个拼音的
如上图,通过加一层判断来回退步骤,我们可以找到漏掉的拼音gong
, 当然也发现了个新问题。
上面步骤找出的 ni me men meng gong
这些拼音,
me
和men
的e
字母下标是一样的
meng
的g
与 gong
的第一个g
下标也是一样的 , 保留谁呢?
2、与音节做有效匹配 得出解
依据上面的回退机制,我们可以得出所有的有效拼音是
ni me men meng gong si
我们人是可以 从前往后 依据拼音之间的 距离 判断要保留项,把这个思想移植到机器上,哈哈哈....当然也行得通。
实现步骤:
1、遍历有效音节列表,
2、判断 当前拼音的开始下标 是否等于 上一个拼音
的开始下标, me和ni, m下标等于n ?不
, 继续往下走
3、men和me ? 咦...开始下标一样,给men做个标记,
继续往下走 meng和men ? 一样 给meng做个标记
4、gong和meng ? 开始下标不相等,
停止继续往后 列出 [me men meng] 选谁呢,
当然是按最大的选,
且 拼音下标范围不能 包含下个拼音,
当然是选men因为meng的g下标等于gong的开头g
执行上面的步骤,我们就能找拆出正确的拼音了。哈哈哈....是不是很简单!
3、结尾
哈哈哈......这是我写的一篇技术分解文章,没有一句代码! 以后也尽量,就是想锤炼表达能力,让非IT程序员也能理解。
如果你是非程序员也懂了, 请给个赞, 谢谢大佬 O(∩_∩)O
最后
相信心细的同学肯定也发现了 这只是简单的实现,真实场景下还存在不少问题:
1、音节表的查询次数很高,如何提升性能?
2、用户输入里混有错误拼音如何处理
3、拼音如何转中文
4、更多问题疑问 请留言抛出 大家一起讨论
请听下回分解之:【编程-拼音树的威力】
———————
如有错误,欢迎指正。
如果你喜欢鄙文和图片,那就在右下角点个喜欢吧,你的鼓励是我最大的动力来源,小臭在此深表感恩。
网友评论