求判断字符串是否是拼音的成熟算法
发布网友
发布时间: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个韵母组合起来
再不对我也帮不了你了 毕竟没学过编程