北大中文论坛 www.pkucn.com

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
楼主: 路路通

《输入法编程漫谈》问答

[复制链接]
 楼主| 发表于 2008-6-12 17:29:06 | 显示全部楼层
原帖由 谢振斌 于 2008-6-12 15:47 发表


我已经实现的系统是处理7万多汉字的。对于词语,我不储存拼音的。

不过,我把Ext-B汉字单独储存,而且目前也没有考虑Ext-B汉字构成的词语,所以:

(1)BMP汉字,每个汉字内码用2个字节,拼音2个字节(采用 ...
说一下我的码表:
对于词语,只保存多音字的拼音。
        每个汉字内码用2个字节,拼音2个字节(声母占5位,韵母占5位,声调占2位,共12位),频度信息2个字节。
        路路通键盘可提供两组键盘,一组用于声母输入,一组用于韵母输入,还有两个键单独输入声调。在处理双拼输入、纯声母输入、混拼输入时,不用音节切分,编程量少了很多,也简单的多。
       多音字用不同的内码,我原以为你是将汉字内码压缩在14~15位内,空出的位用来存储多音字音节的索引,看来是猜错了!这个思路很独特,值得借鉴。
        谢兄的无私精神再一次让人感动!

[ 本帖最后由 路路通 于 2008-6-12 17:30 编辑 ]
 楼主| 发表于 2008-6-12 17:33:57 | 显示全部楼层

三三龙:你的输入法如何调试?

在代码处设置断点,按F5即可。

示例程序是可执行文件,不是动态链接库,调试跟普通的程序没什么两样。
发表于 2008-6-12 18:18:26 | 显示全部楼层
原帖由 路路通 于 2008-6-12 17:29 发表
说一下我的码表:
对于词语,只保存多音字的拼音。
        每个汉字内码用2个字节,拼音2个字节(声母占5位,韵母占5位,声调占2位,共12位),频度信息2个字节。
        路路通键盘可提供两组键盘,一组用于声 ...


想到了一个我遇到的矛盾,提一下,看看路兄是否可以给点参考意见。

目前动态频度统计部分目前虽然还没做进去,但具体做时有一个问题需要考虑。
那就是,动态频度涉及到“场景”问题,不同编码模式输入时的频度不一样。

比如说,拼音输入的频度,和部件输入的频度,是否分开?
简码、全码、容错码等输入方式的频度是否分开?
简繁体模式输入的频度是否共享,等等。
假定“的”可以输入为“de”、“d”、“bp”、“b”几种,那么输入后记录的频度,是否只有一个,还是区分四个?

三个方案:
(1)针对每个汉字或词语,只记忆一个动态频度。此法最简单。
(2)针对每个“汉字+编码”记录频度。此法最复杂,但表现效果最人性化。
(3)区分若干个输入模式(场景),每个场景中记录有所有汉字的频度。此法折中。

我目前倾向于最后一个折中方案。
此外,我的设计里还有一个短时频度,也需要综合平衡考量。
 楼主| 发表于 2008-6-12 20:11:53 | 显示全部楼层
原帖由 谢振斌 于 2008-6-12 18:18 发表


想到了一个我遇到的矛盾,提一下,看看路兄是否可以给点参考意见。

目前动态频度统计部分目前虽然还没做进去,但具体做时有一个问题需要考虑。
那就是,动态频度涉及到“场景”问题,不同编码模式输入时的频 ...


        我为此苦恼很长一段时间了,正好你提出来,讨论一下。
        (1)拼音输入的频度,和部件输入的频度,是否分开?为了节省空间,没必要分开了吧。两种输入方式绝大多数用户肯定是分主次的,两种都爱玩的只是极少数。  
        (2)简繁体模式输入的频度是否共享?这个问题,我的看法同(1)。
        (3)简码、全码、容错码等输入方式的频度是否分开?如果仅仅是单字,这个好处理,分开也不复杂。要是词语就让人头疼了,紫光、搜狗好像是只记忆一个动态频率的,是有点不够人性化,但处理简单,如果分开,码表体积将急剧增长,算法也变得非常复杂。我曾经考虑过像加加一样,弄个固顶词库、用户自定义词库什么的,这样已经可以满足大部分人的要求,但感觉还是不够理想,想过整句输入,但能力、资金都有限,至今也没拿定主意。还是用你的第三方案吧,孩子要一天天才能长大,先把爸爸给当了。

[ 本帖最后由 路路通 于 2008-6-12 20:53 编辑 ]
发表于 2008-6-13 15:29:56 | 显示全部楼层
谢谢路兄的意见。
论坛越来越冷清了,讨论学术的少了,宣传输入法的也少了
 楼主| 发表于 2008-6-13 16:43:49 | 显示全部楼层
原帖由 谢振斌 于 2008-6-13 15:29 发表
谢谢路兄的意见。
论坛越来越冷清了,讨论学术的少了,宣传输入法的也少了


不知何故变得如此冷清,就连火爆的《语言文字漫谈》也是如此。

       谢兄的“多音字采取不同内码表示”可节省不少内存,不过不明白为何不支持包含非汉字的短语。我觉得编码串如果不是要求拼音与非拼音混合输入,那么只是查找算法稍微复杂一点点而已。昨天晚上想了一下,连同简拼、混拼,用正则表达式来处理,既简单又明了。
发表于 2008-6-13 17:41:42 | 显示全部楼层
原帖由 路路通 于 2008-6-13 16:43 发表


不知何故变得如此冷清,就连火爆的《语言文字漫谈》也是如此。

       谢兄的“多音字采取不同内码表示”可节省不少内存,不过不明白为何不支持包含非汉字的短语。我觉得编码串如果不是要求拼音与非拼音混合输 ...



不支持非汉字的短语,是为了便于和音节数进行对应。比如三个音节、三字词、6个字节,都是对应的,否则结构就会比较复杂。对于静态数据部分,我是力求简单。搜索匹配也是顺序搜索。

对于动态部分,还没有弄好,涉及缓冲区的管理,外部的记录。在兼顾效率的前提下,也会力求简单。
如果出现非汉字成分的短语,准备当作额外定义处理,因为本来就有允许自定义编码的机制,那里将不受编码规则进行编码定义,等于是外部码表的加载。

搜索匹配我还没想到用正则表达式那么复杂,正则表达式的搜索匹配还不得自己写吗?有现成的吗?
拼音的简拼、混拼、双拼,都可以用简单匹配算法实现,只是模糊音部分,还没有认真想好如何简单地实现。
发表于 2008-6-13 17:51:32 | 显示全部楼层
也正因为上述原因,目前不支持复音字(双音节字),类似“瓩”这样的字,无法输入qianwa来得到,因为一个汉字只能对应一个音节。
看了其他输入法似乎也不支持。
当然,需要支持可以通过自定义编码部分来实现。
还有那些韩国字,发音也和我们的拼音不同,暂时还没考虑他,需要时也外部码表定义。
 楼主| 发表于 2008-6-13 19:37:33 | 显示全部楼层
原帖由 谢振斌 于 2008-6-13 17:41 发表



不支持非汉字的短语,是为了便于和音节数进行对应。比如三个音节、三字词、6个字节,都是对应的,否则结构就会比较复杂。对于静态数据部分,我是力求简单。搜索匹配也是顺序搜索。

对于动态部分,还没有弄好 ...


难道谢兄的码表结构只记录词语,连记录长度这一个字节也省掉?
发表于 2008-6-13 20:52:47 | 显示全部楼层
論壇冷的原因,大部分是因為碼老們多不懂如何來寫輸入法程式,如果,有一本專門教導如何來看懂和創制自己輸入法的書,相信又會出現百花齊放的場景。

如果有一天我真的有賺到一筆大錢的話,我想我會請人來寫一本容易讓人看懂和上手的輸入法程式方面的專書,我想從現有的自由軟體來作為書本的基本架構,然後註明如何來運用和舉出運用的實施例,
等我有賺到一筆大錢時,我想這樣來做。
 楼主| 发表于 2008-6-13 21:19:46 | 显示全部楼层

回复 25楼 的帖子

希望你明天就赚到大钱!
发表于 2008-6-13 21:28:21 | 显示全部楼层
原帖由 路路通 于 2008-6-13 19:37 发表


难道谢兄的码表结构只记录词语,连记录长度这一个字节也省掉?


是的,不记录词语长度。这不是码表,这只是词库,编码是不记录的,自动生成的。

目前静态词库记录的就是“词语”、“频度”。
如果连频度都省略的话,那么10万个二字词就只需要400k字节。
 楼主| 发表于 2008-6-13 21:34:38 | 显示全部楼层
“煩請胡樓主、胡老師來教教大家關於輸入法於Vista的作業系統中的接口方面的知識?可以嗎?先謝謝樓主。”

“胡楼主、胡老师”?用“楼主”即可,其余的字请去掉。拼音输入法常闹笑话,看来形码也有得一比。

不好意思,Vista系统没做过,帮不上忙了。
 楼主| 发表于 2008-6-13 21:39:40 | 显示全部楼层

回复 27楼 的帖子

没注意你说的是词库,那你码表中的词条记录长度吗?
发表于 2008-6-13 21:44:13 | 显示全部楼层
原帖由 路路通 于 2008-6-13 21:19 发表
希望你明天就赚到大钱!


依目前來看,樓主是最有可能賺到大錢,如果樓主賺到了大錢,煩請您寫一本關於輸入法程式的專書,以造福喜歡搞輸入法的人們吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大中文系 ( 京ICP备12040209号

GMT+8, 2016-3-24 20:37 , Processed in 0.124550 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表