拼音字库查询问题。求思路或方法。

APM60- 2014-01-18 10:00:29
需要实现一个简单的拼音输入法功能。

我下载了一个拼音字库。6M多。
http://pan.baidu.com/s/1mgwjRTY
我的做法是:程序启动时加载字库到hashtable中,key值为拼音。类似xian和xi'an的合并。
字库加载时间较长,这个不影响。

需要查询时,从开头最长的组合(不超过12个字符)到最短的组合(1个字符)依次查询,合并结果作为备选汉字。
但是,输入拼音,显示备选汉字会有很明显的延时。

请问有没有比较好的思路或方法,能够缩短查询字库到显示备选字的延时?


============================

与该问题无关的回复,请发到这里http://bbs.csdn.net/topics/390419752,帮助我结一个以前的贴子。
...全文
235 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
卧_槽 2014-01-20
  • 打赏
  • 举报
回复
引用 9 楼 slowhand 的回复:
[quote=引用 6 楼 yuwenge 的回复:] 你需要的东西叫做词库。
前边说了,只需要查字,最多是双拼。 字库也在开头上传了一份:http://pan.baidu.com/s/1mgwjRTY 现在主要是检索及显示结果效率的问题了。[/quote] 词库 不是 字库 难怪你做不出
qqqq5201314 2014-01-19
  • 打赏
  • 举报
回复
几千个文字 也无法同时显示。。应该在建个 热度表。。当查询时,优先查找。。如果不满一页,在+几个。。 分页查找。。哪能一下子找那么多出来。
Regan-lin 2014-01-18
  • 打赏
  • 举报
回复
不知道lz这个是怎么查询,不过跟我做过的省市县查询很像,我当初做的时候是查询出来封装在一个dataset中,在加载到控件源的,完全没有延时很厉害的问题
  • 打赏
  • 举报
回复
查找前10个就应该停止了。
  • 打赏
  • 举报
回复
不知道你是如何查询的,你可以将数据加载到DataSet中 然后实现sql查询的方法
ds.Tables[0].Select("pinyin like '%" + pinyin+ "%'");  
APM60- 2014-01-18
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
如果你查出来8000个词,然后给人家列表选择,谁看呢? 所以实际上你只要查出第一页,比如说10个或者20个词,就可以停止了。至于怎样查出来的“恰好是”人家需要的,这就是智慧了。而耍蛮力其实谁都会,但是并不是智慧。 这正是谷歌跟其它一些网页搜索引擎的区别所在。
我现在的做法是,类似输入法: 结果多的时候,结果只显示一行,可上下翻页。 后来又给每个字增加了“热度”属性。每次选中文字时,“热度”加1,上限10000,保存到集合,关闭程序前再把集合保存为字库。 担心如果不把所有字列全的话,别人要查某个生僻字,就找不到了。
APM60- 2014-01-18
  • 打赏
  • 举报
回复
引用 6 楼 yuwenge 的回复:
你需要的东西叫做词库。
前边说了,只需要查字,最多是双拼。 字库也在开头上传了一份:http://pan.baidu.com/s/1mgwjRTY 现在主要是检索及显示结果效率的问题了。
  • 打赏
  • 举报
回复
引用 4 楼 u011130289 的回复:
不知道lz这个是怎么查询,不过跟我做过的省市县查询很像,我当初做的时候是查询出来封装在一个dataset中,在加载到控件源的,完全没有延时很厉害的问题
你的省市又没有十几万个,而且也不需要每一次用户录入后都重新动态产生结果。
  • 打赏
  • 举报
回复
如果你查出来8000个词,然后给人家列表选择,谁看呢? 所以实际上你只要查出第一页,比如说10个或者20个词,就可以停止了。至于怎样查出来的“恰好是”人家需要的,这就是智慧了。而耍蛮力其实谁都会,但是并不是智慧。 这正是谷歌跟其它一些网页搜索引擎的区别所在。
卧_槽 2014-01-18
  • 打赏
  • 举报
回复
引用 5 楼 slowhand 的回复:
需要实现的功能就是最简单的拼音输入法。没有联想和词语功能,最多是双拼。 输入拼音,显示备选汉字。 现在是: 这个字库里有17万多行,就需要生成一个拥有17万多条数据的集合。 比如输入:zhuangzhuang(可能存在更多字符) 就依次查 zhuang'zhuang 撞撞 壮壮 桩桩 装装 庄庄 妆妆 zhuang'zhuan 装转 庄传 撞砖 ……(更多结果) zhuang 装 状 庄 撞 壮 妆 桩 幢 粧 戆 娤 庒 僮 梉 湷 戅 糚 壵 漴 焋 裝 狀 奘 莊 壯 妝 樁 荘 弉 戇 zhuan 赚 转 专 砖 传 撰 篆 馔 啭 颛 専 転 僎 堟 孨 叀 譔 瑑 簨 沌 轉 傳 專 抟 賺 磚 剸 塼 嫥 瑼 甎 篿 耑 膞 蟤 鄟 顓 鱄 鷒 囀 竱 灷 籑 縳 腞 蒃 襈 饌 ……(更多结果) z 在 最 再 做 则 子 作 总 走 再比如输入:abc(可能存在更多字符) 这次2位以上的组合肯定查不到结果,但还是要依次检索一遍。 …… a'b 阿布 阿扁 阿宝 阿爸 阿伯 阿坝 阿比 阿巴 阿炳 阿波 阿部 阿贝 阿斌 阿邦 阿碧 阿鼻 阿冰 阿本 啊不 阿跋 a 啊 阿 吖 嗄 锕 腌 厑 呵 錒 最后把能查到的结果合并起来。 经常在输入拼音到显示备选字之间能感觉到很明显的延时。 现在想寻求个好一点的方法,只要延时不是很明显就可以。
你需要的东西叫做词库。
APM60- 2014-01-18
  • 打赏
  • 举报
回复
需要实现的功能就是最简单的拼音输入法。没有联想和词语功能,最多是双拼。 输入拼音,显示备选汉字。 现在是: 这个字库里有17万多行,就需要生成一个拥有17万多条数据的集合。 比如输入:zhuangzhuang(可能存在更多字符) 就依次查 zhuang'zhuang 撞撞 壮壮 桩桩 装装 庄庄 妆妆 zhuang'zhuan 装转 庄传 撞砖 ……(更多结果) zhuang 装 状 庄 撞 壮 妆 桩 幢 粧 戆 娤 庒 僮 梉 湷 戅 糚 壵 漴 焋 裝 狀 奘 莊 壯 妝 樁 荘 弉 戇 zhuan 赚 转 专 砖 传 撰 篆 馔 啭 颛 専 転 僎 堟 孨 叀 譔 瑑 簨 沌 轉 傳 專 抟 賺 磚 剸 塼 嫥 瑼 甎 篿 耑 膞 蟤 鄟 顓 鱄 鷒 囀 竱 灷 籑 縳 腞 蒃 襈 饌 ……(更多结果) z 在 最 再 做 则 子 作 总 走 再比如输入:abc(可能存在更多字符) 这次2位以上的组合肯定查不到结果,但还是要依次检索一遍。 …… a'b 阿布 阿扁 阿宝 阿爸 阿伯 阿坝 阿比 阿巴 阿炳 阿波 阿部 阿贝 阿斌 阿邦 阿碧 阿鼻 阿冰 阿本 啊不 阿跋 a 啊 阿 吖 嗄 锕 腌 厑 呵 錒 最后把能查到的结果合并起来。 经常在输入拼音到显示备选字之间能感觉到很明显的延时。 现在想寻求个好一点的方法,只要延时不是很明显就可以。
独立完成项目-----T9输入法模拟器 本来这是老师给我们尖子小组三个人的一个合作挑战项目 但是我自己想了想 结构和原理按我的思路应该是可以行的通的 和他们俩住的远 也没得商量 思路上来就自己搞完了 项目名:手机T9输入法模拟器 参加人员:小枪 开发平台:window XP 开发工具:visual studio 2005 , sqlserver 2005 重点要点:全程数据库操作语句 全部采用 执行存储过程 模拟手机拼音输入法按键 如:2建代表 “abc” 贯彻三层结构数据理念 按不同的键组织成不同的拼音组合 再根据这些拼音组合查询数据库 列出所有符合按键拼音组合的汉字 这个地方相对我们在校的学生应该是比较有挑战的 总结思路 主要的思路构造就是全局做一个list将当前的所有能拼出来的拼音组合存起来 按下一个按键就把它全拆开挨个拼出新的组合 然后将全局的list再用我们新拼的组合来替换掉 替换前要记得清掉我们listviwe 里的所有字和拼音 我觉得难的地方在于那个返回键 也就是退格键 它要干的事就是返回我们的上一个步骤 这里我处理手段使用的是以前依稀记得的冒泡排序 和list的rmove 来挨个处理 先把前面按键组成的所有拼音组合挨个拿出来退一个字符 然后把第一个和所有集合中所有的拼音组合相比 有相同的就去掉 集合中原先第2个组合就成了现在的第一个组合 再把它拿出来挨个比较... 想了好久 靠 确实有点抽象了 说都有点说不明白 真不知道我们那班同学怎么去理解 字库问题 :还有就是字库问题 据我所知汉字字库大概几千字 还是多少个来着 要做模拟器就得先做字库 这就有点麻烦了 一个一个的添显然麻烦 我偷了个懒 做俩个表 第一个表是我们的汉字表 包含两个字段: 汉字字符 和 我们的拼音外键 (因为一个拼音组合可能会有几十或上百的同音字) 第二个表就是我们的拼音表 这样查询的时候也简单 根据拼音父建直接可以查到这个拼音组合下所有的同音字 为了字库入库方便 我顺便还写了一个入库工具 呵呵 这个就比较简单了 输入流 把同一个拼音组合的汉字放一个文本中 然后把这个文本中这些汉字做成一个数组 加的时候等于说一次就加一个拼音组合的汉字 怎么样 思路还算可以吧 呵呵 字库未加完 我这里带上字库 自己加进去吧 呵呵这样应该可以交差了 在校学生: 小枪

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧