说说拆解拼音那些事

2019-09-25  本文已影响0人  臭豆5

背景

拆解拼音? 看完图你应该已经知道了

image.png
咦.....那百度是怎么拆解出 ni men gong si 的呢?

来分析一波

通常,我们是先想出基本实现过程,然后再优化过程点,最后得出最优解。
通常大体思路是:

1、拆分用户输入
2、与音节做有效匹配 得出解

image.png

接下来我们开始分解,优化每一步

1、拆分用户输入

定个目标:要找出所有有效的音节(正向的)

像上图的 拆分 拆分到o时,这个规则就行不通了,会漏掉 gong, 如下:

image.png

介就尴尬咯,咦....好像回退步骤是可以找到 gong这个拼音的

image.png

如上图,通过加一层判断来回退步骤,我们可以找到漏掉的拼音gong, 当然也发现了个新问题。
上面步骤找出的 ni me men meng gong 这些拼音,
memene字母下标是一样的
mengggong的第一个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、更多问题疑问 请留言抛出 大家一起讨论

请听下回分解之:【编程-拼音树的威力】
———————

如有错误,欢迎指正。

如果你喜欢鄙文和图片,那就在右下角点个喜欢吧,你的鼓励是我最大的动力来源,小臭在此深表感恩。

上一篇 下一篇

猜你喜欢

热点阅读