今编码时,欲以注音之法打字于文本框内,而检其音于词库,期以词库之小而得输入之疾也。为之, 须臾困于句读之否识,故求百度以拆解之法,或拙或鄙,无可为者。有道是:“纸上得来终觉浅,觉知此事要躬行。”又竟惊觉声韵难辨,汉洋不分,汗颜。温之,汝等皆匹夫耳!吾来装逼!!!若本文有幸为君转述,望注出处,

/**将给出的拼音串以前字贪婪原则拆分成汉语读音,如renai有两种拆分方法,一作“re,nai”,一作“ren,ai”以前字贪婪原则拆解成“ren,ai”*/
public class PinYinSpliter {//此类用于缓存数据和方法返回数据private static class Wrapper{int cursor;Matcher shengMu;Matcher yunMu;Matcher stand;}//几个可以单独作为音节的韵母private static Pattern stand=Pattern.compile("([ae](?:ng|i|n)|er|ao|ou|a|e)");//11个多拼音节韵母 ia iao ian iang iong ua uo uai uan uang üan//其他均为单拼音节private static Pattern yunmu=Pattern.compile("(i(?:ong|ang|an|ao|a)|u(?:ang|an|ai|a|o)|[vu]an|[aeio]ng)|[aeu]i|[oi]u|[ivu]e|[aeiu]n|ao|er|a|o|e|i|u|v");private static Pattern shengmu=Pattern.compile("(b|p|m|f|d|t|n|l|g|k|h|j|q|x|y|w|r|(?:z|c|s)h)|z|c|s");public static String split(String unSplit) {if(!unSplit.matches("\\w+")){//必须全部为字母return null;}Wrapper wrapper=new Wrapper();wrapper.shengMu=shengmu.matcher(unSplit);wrapper.yunMu=yunmu.matcher(unSplit);wrapper.stand=stand.matcher(unSplit);List<StringBuilder>ls=new LinkedList<StringBuilder>();while(wrapper.cursor<unSplit.length()) {String tmp=requestShengMu(wrapper);//判断是否有声母if(tmp==null) {tmp=requestStand(wrapper);assert tmp!=null;/*如果开头有声母字母则无法到达此处如果开头为韵母则所有韵母均可由a、o、e、i、u、v单独组成,故tmp一定不为null*/ls.add(new StringBuilder(tmp));continue;}StringBuilder sb=new StringBuilder(tmp);tmp=requestYunMu(wrapper);if(tmp==null) {//只有声母没有韵母,不符合拼音规则ls.add(sb);}else {sb.append(tmp);ls.add(sb);}}//将拼音拼接后返回StringBuilder sb=new StringBuilder();for(StringBuilder s:ls) {sb.append(s).append(",");}return sb.toString();}private static String requestYunMu(Wrapper wrapper) {if(wrapper.yunMu.find(wrapper.cursor)) {if(wrapper.cursor==wrapper.yunMu.start()) {wrapper.cursor=wrapper.yunMu.end();return wrapper.yunMu.group();}}return null;}private static String requestShengMu(Wrapper wrapper){if(wrapper.shengMu.find(wrapper.cursor)) {if(wrapper.cursor==wrapper.shengMu.start()) {wrapper.cursor=wrapper.shengMu.end();return wrapper.shengMu.group();}}return null;}private static String requestStand(Wrapper wrapper) {if(wrapper.stand.find(wrapper.cursor)) {if(wrapper.cursor==wrapper.stand.start()) {wrapper.cursor=wrapper.stand.end();return wrapper.stand.group();}}return null;}
}

关于输入法拼音拆分算法相关推荐

  1. python 加注拼音-Python之拼音拆分

    经常会需要用到将zhangwei转化为ZhangWei.Zw.Zhangw之类的,就涉及到一个拼音拆分算法,这里写了一个demo分享给大家 我的思路是先将声母转换为大写,然后就可以根据大写字母来分割单 ...

  2. php 红包算法,PHP语言:实现微信红包拆分算法

    本文主要向大家介绍了PHP语言:实现微信红包拆分算法,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. · 修复最后一个红包输出未保留2位数 · 修复领取的红包金额低于最小红包限制 * 红 ...

  3. php分割金额_PHP实现红包金额拆分算法案例详解

    这次给大家带来PHP实现红包金额拆分算法案例详解,PHP实现红包金额拆分算法的注意事项有哪些,下面就是实战案例,一起来看一下.<?php // 新年红包金额拆分试玩 class CBonus { ...

  4. debian中文输入法——拼音和五笔的解决方法

    debian中文输入法--拼音和五笔的解决方法 转 http://blog.csdn.net/nahancy/article/details/50805574

  5. tcpreplay 流量拆分算法研究

    1.1  算法目的 现在网络架构一般是Client-Server架构,所以网络流量一般是分 C-S 和 S-C 两个方向.tcpdump等抓包工具获取的pcap包,两个流向的数据没有被区分.流量方向的 ...

  6. 社区投稿 | DBLE 自定义拆分算法

    文章来源:爱可生开源社区 作者:钟悦 作者简介 钟悦,就职于某大型国有银行,多年从事MySQL和分布式中间件的方案设计与实施工作:资深MySQL数据库专家,架构师:DBLE开源项目积极贡献者. 文章概 ...

  7. 基于Trie树的拼音切分算法

    基于Trie树的拼音切分算法 Trie树也叫做单词查找树,是一个非常有效的索引结构,trie是由retrieval演化而来的.具体介绍请参看–> [ 维基百科 ] Trie树结构的简单说明 Tr ...

  8. rime输入法初识------algo算法目录分析(二)

    2021SC@SDUSC 来说说第二个文件calculus.h和calculus.cc(微积分)从名字来看的话应该是讲如何来通过拼音输入来和字典库中的文字匹配,我们来大致看看. 首先他定义了很多rim ...

  9. 基于Trie树进行拆分字符串变成拼音音节(二):字符串拼音拆分

    一.前言 上一篇文章已经介绍了如何将所有中文拼音音节都基于Trie树生成模型,文章地址基于Trie树进行拆分字符串变成拼音音节(一):构建拼音音节模型,本篇文章主要介绍如何基于拼音模型将字符串进行拆分 ...

  10. 红包拆分算法 php,关于PHP实现微信红包金额拆分的算法

    本篇文章主要介绍了PHP实现微信红包金额拆分试玩的算法示例,内容挺不错的,现在分享给大家,也给大家做个参考. 本文介绍了PHP实现微信红包金额拆分试玩的算法示例,分享给大家,有兴趣的可以看一下: ?p ...

最新文章

  1. 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致
  2. 终于找到可以一文多发的平台了!
  3. java 调优参数 newRatio, survivorRatio
  4. primefaces_懒惰的JSF Primefaces数据表分页–第1部分
  5. Linux中重要文件
  6. 本地网页服务器 跨域,nodejs搭建本地服务器轻松解决跨域问题
  7. Django项目调用外部程序soffice报错subprocess.CalledProcessError: Command 'soffice --headless --convert-to pdf
  8. u-boot移植随笔:自定义u-boot命令点灯
  9. java对象转json格式
  10. python-study-09
  11. android 吐司服务中显示,android里的“吐司”
  12. 设置java heap_JAVA HEAP SPACE解决方法和JVM参数设置
  13. 40个前端新手入门练习项目,学完即可做项目
  14. android nexus 刷机工具包,Android Nexus 6p刷机及root
  15. 19.软件生命周期(2)
  16. Java调用的高德api,通过经纬度查询地址信息 - 记录
  17. Java语言知识大盘点(期末总复习)三
  18. Linux系统备份与还原-Clonezilla
  19. 最好的时光在路上,最美的风景在远方
  20. 【六】【vlc-android】vlc的decoder控制层传输数据与ffmpeg视频解码模块decoder层的数据交互流程源码分析

热门文章

  1. 用Python - Requests给项目加个短信验证码注册登录,只花了3分钟
  2. Excel2016如何添加表格边框?分享技巧!怎样在excel加入表格边框?
  3. 云风:游戏数值公式的表象与本质
  4. 做项目的一些思路(针对小白)
  5. git删除多余的tracked文件(git提示ignored tracked with git)
  6. 不良资产剥离或许将成为历史名词
  7. 计量笔记(二) | OLS估计量性质
  8. 张晨北京科技大学计算机,北京大学2010拟初取推荐免试研究生公示名单.doc
  9. 无法安装驱动此计算机,安装Windows系统时,提示“无法在此驱动器上安装Windows”...
  10. 红色警戒2:尤里的复仇 中文绿色版