汉语拼音分音节的程序

示例如下 输入的拼音是相连的,输出的结果是一个个的汉字的音节
gonghuacheng --->  gong  hua cheng
beijingzhan    ----> bei jing zhan

音节识别的正则表达式为  (声母){0,2}(韵母){1,4}

BNF的定义如下:
声母:= bcdfghjklmnpqrstwxyz
韵母:=aeoiuv
双声母:=ch  sh  zh
音节的首字母:=声母   a  e  o
音节的尾字母:=韵母  n   g

识别音节的有限自动机如下图:

根据BNF定义以及有限自动机的逻辑图,以Javascipt编程语言写出如下的示例代码:
function translate(a)
{
   var state=0;
   var result=[];
   var str='';
   for(var i=0;i<a.length;i++)
   {state=get_state(state,a[i]);
     if(state==0)
      {state=get_state(state,a[i]);
       result.push(str+' ');
       str='';
      }
      str+=a[i];
   // result.push(a[i]);
   }
   result.push(str+' ');
   return result;
}
//----------------------------------
function get_state(s,a)
{  var state=0;
   if(s==0)
   {
      if(is_first_letter(a)==0)
      {state=4;}
      else
      {if(is_yumu(a)==1)
        {state=1;}
       else
        { if(is_double_shengmu(a)==1)
           {state=3;}
          else
           {state=2;}
        }    
      }
   }
   else if (s==1)
   {
     if(a=='n') {state=5;}
     else if(is_yumu(a)==1) {state=7;}
     else {state=0;}
   }
   else if (s==2)
   {
      if(is_yumu(a)==1)
      {state=1;}
      else
      {state=4;}
   }
   else if (s==3)
   {
      if(a=='h')
      {state=2;}
      else {state=4;}
   }
   else if (s==4)
   {state=0;
   }
   else if (s==5)
   {
      if(a=='g'){state=6;}
      else if(is_first_letter(a)==0){state=4;}
      else {state=0;}
   }
   else if (s==6)
   {if(is_first_letter(a)==0){state=4;}
      else {state=0;}
   }
   else if (s==7)
   {if(a=='n') {state=5;}
    else
    {
       if(is_first_letter(a)==0){state=4;}
      else {state=0;}
    }
   }
   return state;
}

function is_double_shengmu(a)
{  var result=0;
   var str='csz';
   if(str.indexOf(a)>=0)
     { result=1;}
     else {result=0;}
     return result;
}

function is_shengmu(a)
{  var result=0;
   var str='bcdfghjklmnpqrstwxyz';
   if(str.indexOf(a)>=0)
     { result=1;}
     else {result=0;}
     return result;
}
function is_yumu(a)
{ var result=0;
   var str='aeoiuv';
   if(str.indexOf(a)>=0)
     { result=1;}
     else {result=0;}
     return result;
}
function is_first_letter(a)
{
 var result=0;
   if(is_shengmu(a)==1||a=='a'||a=='e'||a=='o')
    { result=1;}
     else {result=0;}
     return result;  
}
function is_last_letter(a)
{  var result=0;
   if(is_yumu(a)==1||a=='n'||a=='g')
    { result=1;}
     else {result=0;}
     return result;  
}
//----------------------------------

测试结果为示例能通过测试
还有两个问题存在,其一是歧义问题,存在n,g这样的字母不知是作为前一个音节
的结尾还是后一个音节的首字母的问题。
例如 xingan  可以有xin gan 和 xing an 两种切分形式。

其二是正则表达式的识别范围大于汉语音节的实际范围。例如 ong这样的音节是正则
表达式能识别通过的,但在汉语的表达范围内是不存在的。

汉语拼音分音节的程序相关推荐

  1. git实现审核功能_一文教你如何搭建PDD分佣小程序实现财富自由

    随着拼多多的火爆,很多淘客以各种方式通过推广拼多多商品获取返佣来月入万元,实现财富自由.只要你有流量或者足够努力,像其他淘客一样实现睡后过万财富自由不是梦.本文通过详细教程教你快速搭建属于自己的PDD ...

  2. 女学霸考 692 分想当“程序媛”,网友:快劝劝孩子

    综合整理:程序员的那些事 参考:新浪微博.上海热线 2021 年各地高考成绩已经全部出炉了,成绩公布后考生们又要马不停蹄的开始填报志愿了,近日四川成都一女学霸高考分数 692 分,直言想当程序员. 当 ...

  3. 驾驶证学法减分助手小程序源码(带搭建视频教程)

    驾驶证学法减分助手小程序源码带搭建视频教程 源码分享!需要源码学习可私信. 学法满分考试系统源码/驾考学习小程序源码/拍照答题解答/带流量主,这款小程序源码是驾考辅助学习的,默认里面包含了几万道驾考题 ...

  4. 法兰克FANUC加工中心三点圆分中宏程序

    法兰克FANUC加工中心三点圆分中宏程序,在工厂使用多年,验证了宏程序的可靠性,此宏程序可以提高对刀速度,提高工作效率. ID:5115676648761157刚哥

  5. 7-1 给出成绩等级 (6 分)编写一程序实现以下功能从键盘输入一个一百分制成绩,如果不在0~100范围内,则要求重新输入数据,直到输入的数据在0~100范围内。将输入的数据转换成等级‘A’

    7-1 给出成绩等级 (6 分) 编写一程序实现以下功能 从键盘输入一个一百分制成绩,如果不在0-100范围内,则要求重新输入数据,直到输入的数据在0-100范围内. 将输入的数据转换成等级'A',' ...

  6. 英语单词的分音节理解--英语拼音解字法简介2

    总结以上单词,基础构词法的特点共有三条: 1.动作在构词中具有核心的表义作用.基础构词法主要表现了人类的动作认识,动作的主体与客体都是通过动作来表现的.基础构词法是古老时代的合成法,因为历史的原因以及 ...

  7. 外卖cps优惠券小程序 拉新裂变分佣小程序源码[含nodejs后端源码] 带安装教程

    外卖cps优惠券小程序 拉新裂变分佣小程序源码[含nodejs后端源码] 带安装教程 外卖返利微信小程序源码 美团饿了么淘客外卖返利cps小程序path 美团/饿了么外卖CPS联盟返利公众号小程序裂变 ...

  8. 霸气!考 692 分想当程序员,女王式发言:也没见男生考得比我好

    整理 | 王晓曼 出品 | 程序人生(ID:coder _life) 近日,四川成都一考生在采访时介绍自己报考志愿的视频意外走红,发言霸气又自信,引来网友们的纷纷点赞! 当被问到自己的高考成绩时,该女 ...

  9. 霸气!女学霸考692分想当“程序媛”,女王式发言:也没见男生考得比我好

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看 程序员 ...

  10. pq分解法matlab程序,基于MATLAB软件的PQ分解法潮流计算

    基于MATLAB软件的PQ分解法潮流计算 基于MATLAB软件的P-Q分解法潮流计算 摘要 电力系统潮流计算是研究电力系统稳态运行情况的一种重要的分析计算,它根据给定的运行条件及系统接线情况确定整个电 ...

最新文章

  1. Error: The INF file contains Unicode characters that could not be converted correctly
  2. 微软职位内部推荐-Senior Software Engineer-Eco
  3. 解决vue移动端适配问题
  4. 【Problem solved】 error C2665: “loadimage”: 2 个重载中没有一个可以转换所有参数类型...
  5. android 怎么加链接地址,Android TextView添加超链接的方法示例
  6. linux命令find
  7. 如何有效利用SD-WAN改善网络性能?
  8. vmware 克隆后Linux没有eth网卡只有lo
  9. oracle数据库的语言,oracle数据库语言类型
  10. 全球10大受欢迎的顶级编程语言与薪资水平
  11. Elasticsearch合并高亮字段
  12. 为什么我会反对大家写工作日报
  13. docker核心视频教程
  14. php实现分时线图,分时图均价线公式?看懂了便可掌握股票的买卖点
  15. CentOS 7 搭建企业内网 DNS 服务器
  16. 输入一个三位数,如果是水仙花数,输出YES,否则的话,输出NO;
  17. 功利主义穆勒思维导图_浅析穆勒的功利主义思想及现实意义
  18. Apktool重打包Apk
  19. 嵌入式开发:硬件和软件越来越接近
  20. UI设计培训分享:UI设计自学好还是报班好?

热门文章

  1. python弧度角度转换程序_python 弧度与角度互转实例
  2. Linux - last 命令
  3. 如何快速又优雅的一键保存网页
  4. C语言生成负指数分布,泊松分布与负指数分布的关系
  5. HU6206稳压芯片
  6. word embedding和contextual embedding
  7. 计算机ln代表什么意思,ln计算器(log计算器在线)
  8. 利用Rstudio对考试成绩进行数据分析
  9. 如何找到计算机上的画图拦,电脑中自带的Window画图工具不见了怎么恢复
  10. 大学生数学竞赛试题荟萃 (更新至2017年10月28日)