从电话数字键盘搜索字母

时间:2013-03-26 08:05:55

标签: c algorithm nlp state-machine iphone-keypad

我正在实施基于电话键盘的字母搜索,例如电话键盘 1

当用户输入时,比方说2,我在组合中得到{A,B,C}。当用户键入23时,我在组合中得到{AD,AE,AF,BD,BE,BF,CD,CE,CF},依此类推。如果我继续打字并进行组合,我会得到数以千计的组合,这使得搜索过程非常缓慢。所以现在我想实现一个删除像CF BD CD这样的不合逻辑组合的算法,我的意思是逻辑上没有人的名字从这些组合开始,也许两个辅音没有元音。所以这种方式我想缩小我的搜索范围。知道这种状态机的人,用C实现吗?

2 个答案:

答案 0 :(得分:4)

您可以根据您要搜索的数据集构建trie个有效前缀。匹配部分输入应该非常容易。

答案 1 :(得分:1)

请记住,当谈到语言数据时,“不合逻辑”并不是“不太可能”的良好代理。在名称方面尤其如此。例如,根据英语中“辅音”的标准定义,我的姓氏以四个辅音开头。如果它是以德国时装之后写的,它将从五开始。在考虑这些问题时,请记住:

  1. 声音不是字母,字母不是声音:大多数情况下 正交系统,字母到声音的映射不是1:1
  2. 许多语言都有意想不到的音节核:例如,Tamazight Berber允许音节m扮演音节核的角色,就像元音一般用英语做的那样。因此柏柏尔人的名字可能看起来像CCmC(其中C代表辅音)并且在那种语言中是完美的。一个柏柏尔血统的人当然不会使用英语中的类似拼写法,这是一个天真的系统会排除“不合逻辑”的
  3. 最后,许多用英文写外国名字和单词的系统使用二维图形或三图形(两个字母和三个字母组合)来表示英语中的外语声音:这可以创建看起来像非法的一致的集群。我们知道英语会这样做(sh代表一种声音,见第1点),但在转录外来词时尤其如此。
  4. 因此,除非您非常了解您所期望的名称的拼写规则,否则您可能会使用天真系统排除合法名称。