关于输入法的猜想 - Jiajun的编程随想

首页

/

友情链接

/

我的Github

/

关于我


关于输入法的猜想

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

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

.. 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