关于输入法的猜想

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

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

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


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

更多文章
  • Python Requests 简明教程
  • 密码技术简明教程(三):证书和TLS
  • 密码技术简明教程(二):散列、消息认证码和数字签名
  • SEO学习笔记
  • 密码技术简明教程(一):对称加密和非对称加密
  • Kubernetes 笔记
  • go mod 和 logrus 路径大小写的问题
  • Flask自动加载Blueprint
  • 在KVM里安装Minikube
  • 搞定面试中的系统设计题
  • Crontab + Sendmail实现定时任务并且通知
  • Nginx设置Referer来防止盗图
  • Graphviz dot简明教程
  • jQuery简明教程
  • Python RQ(Redis Queue)添加gevent支持