首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

按拼音搜索人名解决思路

2012-03-29 
按拼音搜索人名今天被人问了一个问题,试了很久也没有找到好的解决办法。恳请各位坛友帮忙。问题是这样的:1.

按拼音搜索人名
今天被人问了一个问题,试了很久也没有找到好的解决办法。恳请各位坛友帮忙。

问题是这样的:
1. 假定在数据库中有一个数据表,该表有两个字段:ch_name和py_name。

2. ch_name用于存放中文姓名,py_name用于存放对应中文姓名的拼音,且用“,”分隔,情形如下:
  ch_name py_name
  关云长 guan,yun,chang

3. 现在要用输入的拼音字母,搜索,比如:
  “gyc”、“gy”、“yc”、“guyuc”、“guayuch”都可以搜索到“关云长”,而
  “gc”、“uyc”这样的组合不能搜索到“关云长”

  举例说明:
  意思就是搜索时,是按顺序从每个汉字的拼音开始的,比如“guayuch”中的“gua”和“关”的拼音的前3个字母是匹配的,“yu”和“yun”的前2个字母是匹配的,“ch”和“长”的拼音的前2个字母是匹配的,因此符合搜索条件。

  “gc”中的“g”和“关”的第一个字母匹配,但是“gc”不和“关”的拼音的前2个字母匹配,且按顺序“c”不和“关云长”中的第二个汉字的拼音的第一个字母匹配,因此不符合搜索条件。

  我在试图解决这个问题的时候,本来打算直接用sql中的like来解决(like的效率是不高的,但该表的数据量不太,所以认为性能是可以接受的),比如,py_name like '%g%y%c%',但是这样会存在一些不足,比如“uyc”也可以查出“关云长”,而这是不能接受的。也想到了使用,要俺顺序从每个汉字的拼音的第一个字母开始匹配,却发现有太多的组合了,比如“gyc”就至少有8中组合,在sql语句中要把这8个条件or起来,再进行查询...这还不是最糟糕的情况,如果用户输入“guayuch”,那组合就太多了,就算数据表中的数据不算多,这样搞起来,我还是非常担心性能方面的问题...于是就放弃了这方面的试探

问题:
1. 请用C或者C++,解决3中所列出的问题。可以不考虑数据库方面的操作。即用“gyc”、“gy”、“yc”、“guyuc”、“guayuch”均可以搜索到“guan,yun,chang”,而“gc”、“uyc”则不可以。

或者
2. 用sql解决上面的问题。

以上两种方式,任何一种均可。当然还要考虑“爱新觉罗努尔哈赤”这样的名字。

TIA

[解决办法]
学习学习
[解决办法]
不懂数据库的路过,现在做的项目,数据库部分直接扔给别人了
[解决办法]
不知道使用正则行不行
[解决办法]
帮顶。
除了在学校里学过数据库,实际工作中基本没碰过数据库。
[解决办法]

C/C++ code
关云长  guan,yun,chang// 通过拼音方案 按韵母,把单词分成几块,变成可能的正则公式g.*,y.*,c.*   // gyc 只有一个正则公式// guayuch 就只有两个公式 ,以下用 * 做间隔gua.*,yu.*,ch.*   // gua * yu * chgu * a * yu * ch爱新觉罗努尔哈赤ài xīn jué luō nǔ ěr hā chìai xin  jue luo nu er ha chi 可以 拆成 以下 几种 子单元,然后组合多种ai * xi * n * ju * e * lu * o * nu * e * r * h * a * c * hi// AEIOU 三个原音 I 和 U 不能做拼音开头,其他三个 AEO 可以做拼音开头
[解决办法]
maco_wang
太强了 太给力了

[解决办法]
这个问题应该是搞拼音输入法的人很清楚的,重要的是对用户输入的拼音进行合理拆分,在数据库的查找就简单一些了.以前搞过全拼的拆分,要用到图算法.你这个应算做全拼加简拼音,道理是一样的.
[解决办法]
不懂数据库,路过……

随便乱想一下,是不是可以用类似字典树的方法构造一个巨大的状态机?
[解决办法]
俺来顶顶帖
[解决办法]
生成拼音存储过程(这个google都有);生成拼音那列;有了数据查询还不好办嘛?
[解决办法]
关注一下,顶贴顺便学习
[解决办法]
链式字典查找树,或者构建哈希表,与sql相结合,应该可以找到一个相对效率的方法。
具体要根据数据量来确定偏重哪面。
[解决办法]
我比较倾向于加载到内存后再做
[解决办法]
分数好高啊。
[解决办法]
路过学习
[解决办法]
http://zhao4zhong1.download.csdn.net/user/zhao4zhong1/拼音汉字对照表
[解决办法]
数据库计算确实不快,搜索是快。

热点排行