求判断字符串是否是拼音的成熟算法
发布网友
发布时间:2022-04-30 04:54
我来回答
共2个回答
热心网友
时间:2023-10-14 09:46
如果您是做输入法引擎的话,不能这么做的。任意的用户字母串都是拼音串。
例如:hello可以拆解为 he‘l’l‘o四段,您通过拼音输入法输入的话是可以完成输入的。
所以要做的话应该采用自动机原理,或者树结构来存储以任意字符开头的全部合法拼音组合。
例如 a开头的字符有 a、ai、ao、an、ang,那么以a开头的树的形状如下,+表示叶子结点,即若遇到此叶子节点则序列此时结束为合法序列。
a
i o n +
+ + + g
若给您一个字串是以a开头的,则从此树的根结点开始查找,例如序列为anaang
则起始查到an下一个字符为a所以已经无法再向下查找了,此时an即为一个拼音段,
接着下一个序列又是以a开头的所以继续在此树中查找,可以查到a此时a即为一个拼音段,
接下来重复这个过程,得到ang所以anaang的序列就被划分为了an'a'ang序列。
您只需要为26首字母建立树即可完成所有序列的匹配。追问您好,理解您说的树结构算法了。我不是做输入法,需求是从每天几十万国际域名中筛选出符合国人习惯的拼音结构的域名。您的思路很好,我去试试算法实现
追答呵呵,希望对您有用
热心网友
时间:2023-10-14 09:46
没学过编程。。。
大概先写一个数组,每个元素写上不符合拼音标准或几个字断开的的组合或特征,如[od],[gy]
然后写个循环 每次按顺序提取两个字母 遍历那个数组 发现一样的时候就结束循环 提取这次循环的第一个字母和前面已经遍历过的字母 组成一个字符串
拼音的组合是有限的 再链接个数据库 把这段字符串在数据库中检索 然后就知道这一段是不是拼音了
之后继续循环追问谢谢,思路挺好,希望有人能分享已实现的算法
追答声母
b p m f d t n l g k h j q x zh ch sh r z c s y w
韵母
a o e i u v ai ei ui ao ou iu ie ve er an en in un vn ang eng ing ong
各编成一个数组
汉字读音是声母+韵母 等于一个字长度是2-5个字母
(声母长1-2韵母长1-3)
ganguang
假设是拼音 先读入第一个字母 如果是声母 再循环读入1到3位 必须在韵母数组内
有一个对应
而韵母之后必又是声母 继续循环读1-2次必须在声母数组内有一个对应 以下省略 直至校验完8次 因为名字最多4个字,最多4个声母4个韵母组合起来
再不对我也帮不了你了 毕竟没学过编程
热心网友
时间:2023-10-14 09:46
如果您是做输入法引擎的话,不能这么做的。任意的用户字母串都是拼音串。
例如:hello可以拆解为 he‘l’l‘o四段,您通过拼音输入法输入的话是可以完成输入的。
所以要做的话应该采用自动机原理,或者树结构来存储以任意字符开头的全部合法拼音组合。
例如 a开头的字符有 a、ai、ao、an、ang,那么以a开头的树的形状如下,+表示叶子结点,即若遇到此叶子节点则序列此时结束为合法序列。
a
i o n +
+ + + g
若给您一个字串是以a开头的,则从此树的根结点开始查找,例如序列为anaang
则起始查到an下一个字符为a所以已经无法再向下查找了,此时an即为一个拼音段,
接着下一个序列又是以a开头的所以继续在此树中查找,可以查到a此时a即为一个拼音段,
接下来重复这个过程,得到ang所以anaang的序列就被划分为了an'a'ang序列。
您只需要为26首字母建立树即可完成所有序列的匹配。追问您好,理解您说的树结构算法了。我不是做输入法,需求是从每天几十万国际域名中筛选出符合国人习惯的拼音结构的域名。您的思路很好,我去试试算法实现
追答呵呵,希望对您有用
热心网友
时间:2023-10-14 09:46
没学过编程。。。
大概先写一个数组,每个元素写上不符合拼音标准或几个字断开的的组合或特征,如[od],[gy]
然后写个循环 每次按顺序提取两个字母 遍历那个数组 发现一样的时候就结束循环 提取这次循环的第一个字母和前面已经遍历过的字母 组成一个字符串
拼音的组合是有限的 再链接个数据库 把这段字符串在数据库中检索 然后就知道这一段是不是拼音了
之后继续循环追问谢谢,思路挺好,希望有人能分享已实现的算法
追答声母
b p m f d t n l g k h j q x zh ch sh r z c s y w
韵母
a o e i u v ai ei ui ao ou iu ie ve er an en in un vn ang eng ing ong
各编成一个数组
汉字读音是声母+韵母 等于一个字长度是2-5个字母
(声母长1-2韵母长1-3)
ganguang
假设是拼音 先读入第一个字母 如果是声母 再循环读入1到3位 必须在韵母数组内
有一个对应
而韵母之后必又是声母 继续循环读1-2次必须在声母数组内有一个对应 以下省略 直至校验完8次 因为名字最多4个字,最多4个声母4个韵母组合起来
再不对我也帮不了你了 毕竟没学过编程
求判断字符串是否是拼音的成熟算法
如果您是做输入法引擎的话,不能这么做的。任意的用户字母串都是拼音串。例如:hello可以拆解为 he‘l’l‘o四段,您通过拼音输入法输入的话是可以完成输入的。所以要做的话应该采用自动机原理,或者树结构来存储以任意字符开头的全部合法拼音组合。例如 a开头的字符有 a、ai、ao、an、ang,那么以a...
MySQL汉字拼音排序技术实现mysql汉字拼音排序
首先,我们来分析汉字拼音排序技术的工作原理。原理很简单:汉字拼音排序算法会先将中文字符串转换成对应的拼音,然后比较两个拼音字符串的大小顺序,从而实现汉字拼音排序。接下来我们来看看怎么使用MySQL来实现汉字拼音排序的技术。MySQL 支持中文字符的比较操作,可以使用 ORDER BY 子句来实现汉字拼音排序,具...
在c++中,有没有什么算法可以把名字的拼音转化成0到100的数字。做人品...
int x=0,i; //x为辅助变量,i是循环用的 x=x+(int)s[i]; // 将第i个字符的值累加进x中,i 循环至字符串结尾即结束 对辅助变量x进行处理即可,如果是要得到0到100的数字,则x=x%101;如果想更人性化,可以将字符串s与流行词对比,比如s==“给力”则输出什么东西,自己决定 上面的...
cyk是谁的缩写
CYK算法(英语:Cocke–Younger–Kasami algorithm,缩写为CYK algorithm)是由约翰·科克,Younger和嵩忠雄共同研究出来大约发表于1965年的一个算法,它是一个用来判定任意给定的字符串 是否属于一个上下文无关文法
MySQL汉字拼音排序技巧及实现mysql汉字拼音排序
这是由于MySQL本身不具备汉字拼音排序的能力,必须使用外部应用程序来实现。本文介绍的汉字拼音排序技巧及实现,其实现在MYSQL中,借助拓展函数uft8_unicode_ci,可以实现汉字拼音排序。首先,将文本字符串转换为UTF8编码,使用以下代码:`CHARACTER_SET = utf8`然后,在MySQL中对汉字拼音文本进行排序,使用...
2014微软实习生面试是怎么样的
后来JJ就给了一个具体的题目:给一个汉字字符串和拼音字符串,问如何判断汉字字符串和拼音字符串是否匹配。 一眼看,觉得好简单,我说首先要有每个汉字读音的数据存储,然后汉字和拼音字符串从左向右扫一遍,如果有一个没匹配上就说明不能匹配。JJ说会有多音字,瞬间觉得刚才自己又naive了。我就说那就搜索吧,遇到多音字...
有谁能较详细的介绍下拼音输入法的算法实现。。
我介绍一种Java的简单GUI实现过程(主要组件是jlist)。1.数据库:首先建立汉字与拼音字母字符串的对应数据字典,同音对应一组汉字数组。2.数据结构:然后建立动态结构jlist存储要显示的拼音字符串,没有输入时不显示,输入字母后依次开始筛选,每次只显示可能的拼音(数据库已有的)。3.汉字选取:选定拼音...
求一汉字拼音匹配算法
这可是大活 cxsj 可能是 程序设计,还可能是 持续时间
拼音分词算法 C语言
char Yin[5]; // 韵母字符串,区别于声母 FenCi *pLian; // 分词树的子树 } YunMu; // 用来定义韵母的静态集合 // 声母开字头 ShengMu smJiHe[29] = {{""},{"b"},{"c"},{"d"},{""},{"f"},{"g"},{"h"},{""},{"j"},{"k"},{"l"},{"m"},{"n"},{""},...
怎样在JAVA编程中输入一个数字输出这个数字的拼音?
其实就是一个简单的算法问题,我给你写出算法来,补代码就简单多了。看你问题的描述,就是给定一个数,给出对应的拼音。但是要按习惯读出来,对吧。其实不难,抓住主要的,数:0~9对应的拼音,还有就是读出位数来,个,十,百等。所以就简单多了 先要有0~9对应的拼音。再要有位数的拼音:(个...