关于输入法的猜想

每逢期末便是大作业、答辩涌来之时.

这一次我做了一个拼音检索汉字的原型, 数据结构表示如下图(这种数据结构叫做字典树):

.. image:: img/ime.png

每个节点的结构如下:

.. code:: c

typedef struct Node {
  // 这个节点保存的字母
  char ch;
  // a,b..z 26个子节点
  struct Node *children[26];
  // 保存所有汉字的链表
  LinkedList *words;
}

很明显, 太笨了(我笨?还是原型笨?), 当然啦, 我是没做过输入法, 所以这只是我的猜想, 输入法可以把词组也存储在存汉字的地方.

如何使输入法更加准确呢?那就要为每个字或词加入权值了, 另外, 为了更贴合用户的使用习惯, 必须在用户输入后对权值进行更改, 但是这里有一个问题, 如果用户本身输入很快, 输入的同时又必须对权值进行更改, 那么估计会很卡, 所以我想到了可以借鉴\ redis\ 再hash的时候的想法, 可以安排一个\ daemon\ 先记录下用户的输入, 在某一个适当的时候把统一进行权值更新;

在这里, 某个适当的时候有两种情况, 一是定时执行, 这种方法很简单, 却不够智能, 很有可能执行权值更新的时候与用户输入产生冲突; 另外一种就是让记录用户权值的\ daemon\ 进行判断, 在某一段时间用户未激活输入法的时候进行权值更新, 如果此时用户激活了输入法, 立刻暂停权值更新工作.

这就是我对输入法工作原理的猜测.猜测而已.

当然, 与老师交流了一下想法, 老师说搜狗输入法的工作原理类似, 但是是把用户词库单独记录, 检索的时候优先检索用户词库, 再检索自带词库, 并且会把用户词库上传到“云”, 当然啦, 这样的优点还是很明显的, 不会导致单个词库过大而使检索变慢. 但是有一点需要说明的是, 我也不知道搜狗是不是这么做的, 我无从考证.

.. |ime-pic| image:: /public/images/ime-pic.png


微信公众号
关注公众号,获得及时更新

更多文章
  • NSQ简明教程
  • 结合Redis与MySQL实现又快又好的数据方案
  • 程序员的MySQL手册(五):索引优化
  • 程序员的MySQL手册(四):索引设计
  • 程序员的MySQL手册(三):数据库设计
  • Linux窗口管理器下的截图
  • Go设计模式:facade模式和观察者模式
  • 程序员的MySQL手册(二): 监控与benchmark
  • Go设计模式: 责任链模式
  • 我们真的需要这么复杂的技术栈吗?
  • Go设计模式:装饰器模式
  • 程序员的MySQL手册(一): 安装,基本配置
  • ElasticSearch学习笔记
  • Go设计模式:composite模式
  • 拯救删除ZFS之后的分区表