[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

dim: debian input method. call for help ;-)



Hi!

I've just registered a sourceforge project for dim which stands for
debian chinese input method. it's not another xim server, but just an
input method. when it be finished, it will probably ended up as a
plug-in module for xcin, and/or chinput.

the url is: dim.sourceforge.net (mozilla seems has bug displaying it
in chinese, i have no idea why, maybe a sourceforge http server config
bug. anyway.)

currently no code available, only some rough deisgn documents in
chinese, see below.

If you have any spare time please join the dim effort. ;-) Thanks very
much! code copyright is GNU GPL, of course. ;-)

My humble ideas: ;-)
--8<--
$Id: README,v 1.1 2001/03/10 14:43:52 zhaoway Exp $

这个输入法分两个模块, 其式是三个, 但我们假装是两个. 一个猜想模块, 一个学
习模块. 猜想模块从用户那儿接收一串英文字母做为输入, 返回给用户一串汉字
; 学习模块从用户那儿接收一串汉字做为输入, 不返回用户任何东西. 还有一个第
三模块, 其实就是后面的数据库啦.

猜想模块, 比如输入是 (0)XiaoZhaoShiGeDaBenDan; 那么输出在最好情况下就是: 
小赵是个大笨蛋.

学习模块, 我们希望, 比如, 第一次输入是: 小赵是个大笨蛋, 虽然并不直接返回
任何数据给用户, 但是 我们的输入法 将要据此输入来优化第三模块, 数据库. 比
如, 我们的输入法在用户上述输入之后, 建立: XiaoZhaoShiGeDaBenDan <-> 小赵
是个大笨蛋. 这里顺代讲深入一点, 在我们的输入法学习了: (1)小赵是个大笨蛋
; (2)小赵是个大混蛋; (3)小赵是个大傻蛋; 这样的几个句子以后, 我们希望我们
的输入法自己学习到 (4)小赵是个大__蛋;这样的带空格的句式. 这对我们将会有
很大的帮助.

我们来仔细看这个学习过程, 从 (1) 和 (2) 如何就能让我们的输入法自己学习到 
(4),而 (3) 有是如何强化对 (4) 的学习的呢.

首先, 从 (1), 我们的输入法将学习到:
小赵 <-> 小赵是个大笨蛋[1]
赵是 <-> 小赵是个大笨蛋[2]
是个 <-> 小赵是个大笨蛋[3]
个大 <-> 小赵是个大笨蛋[4]
大笨 <-> 小赵是个大笨蛋[5]
笨蛋 <-> 小赵是个大笨蛋[6]

当 我们的输入法 遇到 (2) 时, 根据上面的步骤, 会学习到
小赵 <-> (1)小赵是个大混蛋
     `-> (2)小赵是个大笨蛋
经过把 (1) 和 (2) 相互比较, 立刻就的到了 (4), 这样, 显然 (3) 会强化这一
学习过程. 设想此时, 我们的输入法 遇到 (5)雷峰叔叔是个好人; 这时会发生什么,
是个 <-> 小赵是个大__蛋 
     `-> 雷峰叔叔是个好人
       `-> 小赵是个大笨蛋
         `-> 小赵是个大混蛋
这时 我们的输入法 将学会: __是个__; 因此, 也将学会: 小赵;大混蛋;大笨蛋;好人;

这个例子当然相对简单, 有一定偏见在里面.

再进一步来看这个学习过程, 我们把 (1) 啦 (5) 啦这样的东西称为汉字链, 请注
意, 我们避免使用 词 这个概念. 学习一个 七个字的汉字链时, 会得到六个入口 
(如上面的 [1] 至 [6] 等, 每个入口, 也是一个长为二的汉字链) 能够让我们的
输入法进入汉字链的仓库.

我们进一步来引入打分和遗忘的机制. 首先, 学习一串汉字链的时候, 可以自动分
解入口, 这些自动分解的入口, 将不加分. 同时, 应该尽量使用分高的入口.

其次, 每个入口后面都跟随了若干个汉字链, 如过其中有一个能够和我们正在学习
的这一串汉字链匹配, 则我们将学习到若干个词,比如上面的:小赵;大混蛋;大笨蛋
;好人; 这些词, 做为词, 加分. 如果碰巧也是 入口词 的话, 那当然好.

同时, 考滤到三字或四字等等的词, 作为字链学习的是候, 我们还应该给整个字链
加分.

需要注意的是, 我们可能从一句话当中学习到非常多的东西, 可能会学不过来, 怎
么办, 可以跳这学, 或者不学啊, 比如我们有六个入口, 我们可以只随机处理三个
呀. 或拣分高的入口处理几个.

我们还需要遗忘机制, 遗忘进程随机的不定期横扫整个数据库, 把分数最低的一些
项目删掉. 同时, 它也随机的给随便什么项目随意的减分. 这样使以往的错误不至
于一直带在身上. 

纵合起来, 入口是两字词, 它们只记录原始拷贝的长链.至于生成的词, 空格链, 
等等散放在词库当中. 所有的项目, 都受遗忘机制的管辖. 原始长链忘的慢. 空格
链的处理可能还要仔细一些吧. 当一个入口将要被遗望的时后, 它所拥由的长链要
转移给其它的入口.

学习模块大致讲了一下. 下面来看猜想模块.

且听下回分解. 简单说来, 我们的输入法的词库当中已经有各式各样长度的汉字链
, 还有带空格的链. 就看怎样用了. 有几条原则:

1.得分要高
2.匹配项目的平均词长度要大
3.匹配项目的的词长变化要小
4.尽量和空格链匹配上

(* these ideas are stolen from Cai Zhi Lin(??) except item 4.)

试分析:

毛主席教导我们说: 百花齐放.
毛主席万岁.
公社的毛主任是个老色鬼. ;-)
-->8--

Please join the dim effort and help! You can do:

1) criticize/discuss/enhance design documents, post you ideas
here. (Please, anthony! ;-)
2) join sourceforge.net, register as a user, help admin
dim.sourceforge.net project and its webpages.
3) write code! You will be my GOD! ;-)

Later,
--
<http://www.zhaoway.com/>



Reply to: