LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: trotsky

四种拼音输入法的比较以及拼音输入法开发[讨论篇]

[复制链接]
发表于 2003-6-21 23:43:14 | 显示全部楼层
智能匹配就要看你的数据结构了。无非是一些数据库理论。如果统统装在倒内存中,我就不用研究了。
发表于 2003-6-21 23:49:55 | 显示全部楼层
通用码表对于我来说,关键在于定义方式。在我现在的实现方式中,主要在于索引的定义上。完全可以定制一种描述文件。实现通用数据结构。我只使用过五笔和拼音。现在这种结构,对拼音来说是重负荷,主要在于文件的大小。对五笔来说,就向吃糖豆一样简单。

而且,我严格定义了,只使用2M内存。
发表于 2003-6-21 23:58:18 | 显示全部楼层
对于词库管理和词频统计。我使用了一个非常投机取巧的办法。我没有词库,我连标准的拼音表都没有。因此在这方面的管理我非常看重。我用flex和bison写了一个词法和语法分析器。现在这个软件可以识别4种文件格式。也就是最近在网上可以看到的PY++和曙光的文件格式。
发表于 2003-6-22 07:41:52 | 显示全部楼层
最初由 stormful 发表
对于词库管理和词频统计。我使用了一个非常投机取巧的办法。我没有词库,我连标准的拼音表都没有。因此在这方面的管理我非常看重。我用flex和bison写了一个词法和语法分析器。现在这个软件可以识别4种文件格式。也就是最近在网上可以看到的PY++和曙光的文件格式。


嗯,我对这个挺感兴趣。你这个软件主要做什么工作呢?能够自动从语料库中生成词库么?
发表于 2003-6-22 07:45:04 | 显示全部楼层
最初由 stormful 发表
是么?你不是大陆的么?你不会说不通话么?我曾经很多一个普通的政府员工艰难的录入汉字。

说到算法,就非常有意思了。这可能让这个帖子长期至顶。

首先,就说说拼音拆分算法吧。因为我今天早上才开始玩他。我没有使用正规的拼音规则,因为我根本就找不到相关的国家标准。我使用了一个非常野蛮的方法。

在我使用过的拼音输入法中,对于拼音拆分我的最大感受是最小匹配模式。在统计和管理词库的时候,我有一个副结构,拼音表。它不是简单的拼音组合,而是拼音递减结构。为了实现最小匹配。我从倒序匹配。

当然了,必要的数据结构就是hash表和联表了。


什么叫最小匹配模式呀?能说的详细些么?不是很明白。

拼音规则的标准在网上不难找,google 一下就有了。
发表于 2003-6-22 08:10:58 | 显示全部楼层
最初由 stormful 发表
智能匹配就要看你的数据结构了。无非是一些数据库理论。如果统统装在倒内存中,我就不用研究了。


智能匹配和数据库有什么关系呢?目前的 scim-chinese 的确是把所有数据都统统的装到内存里面,因为本身数据也不多,十几万词的词库也就才几兆而已,全部装到内存里面可以大大提高检索速度。

而我这里的智能匹配是指智能分词和词的匹配,例如输入以下一个拼音串:

woxiwanghenitaolunsuanfawenti

第一步要分解成正确的拼音串:

wo xi wang he ni tao lun suan fa wen ti

第二步要正确的按照语素进行切分:

wo | xi wang | he | ni | tao lun | suan fa | wen ti

第三步才是匹配成中文串:

我希望和你讨论算法问题

这个例子还是很简单的,很多情况下每一步都会有歧义,包括多音字,多音词等造成的歧义和不同的分词点造成的歧义。而且有些歧义是很难解决的,比如:

woyaoquxian

可以说成:我要去西安,或者 我要去先,歧义无法消除。
发表于 2003-6-22 14:15:20 | 显示全部楼层
最后你的举的有歧义的例子,只在南方人中才会发生的,在普通话中,是不会将 先 放到最后的
发表于 2003-6-22 17:52:42 | 显示全部楼层
最初由 liuspider 发表
最后你的举的有歧义的例子,只在南方人中才会发生的,在普通话中,是不会将 先 放到最后的


这也不是南方人中才会发生的。而是最近网上流行的一些语言。
比方说“给个理由先”之类的
发表于 2003-6-22 19:25:34 | 显示全部楼层
最初由 james_su 发表
嗯,我对这个挺感兴趣。你这个软件主要做什么工作呢?能够自动从语料库中生成词库么?


这个软件不是输入法,也不是输入法平台。它只是一个输入法技术评估和测试平台。在早期,大约在20天前,它的设计目的是有效的管理词库。现在,它的功能扩展到拼音输入法的技术的评估方面,当前它只是一个控制台程序。呵呵,当然了最终我会写一些XIM代码,让它在KDE下实现输入。因为我现在只能使用QT/KDE开发X程序。

我写这个程序的最初目的是因为我要在FreeBSD上写CSDN上的一个专栏。在Windows下写FreeBSD的专栏太困难了,因为我没有安装虚拟运行环境。我希望通过我的努力,FCITX能够迅速赶上来,让我在FreeBSD下能够顺畅的输入汉字。

我不太清楚“语料库中生成词库”的具体含义。我的理解是自动生成词库吧?

在这个程序(总说这个程序太麻烦了,这个程序的名字叫diy)的早期有一个小模块,我叫它Next-ONE。它主要是在统计文档中分析某个汉字或词的下一个汉字或词的频率。我的逻辑是用的多了,就是词。它的运行速度非常慢,分析1.9G的内容需要30分钟。但它统计出了非常多的正规的或不正规的词组。但是最终,我放弃了它。因为,多音字妨碍了我确定某个词组中的某个汉字的具体拼音。
发表于 2003-6-22 19:35:27 | 显示全部楼层
最初由 james_su 发表
什么叫最小匹配模式呀?能说的详细些么?不是很明白。

拼音规则的标准在网上不难找,google 一下就有了。


呵呵,最“小匹配模式”是我套用词法分析的一个术语,在拼音的拆分上,这个说法不太准确,但可以大致说明算法的含义。

在词法分析中,一般使用最大匹配模式。比如:dan和da。在最大匹配模式下,肯定要先匹配dan,然后才是da。

但在拼音匹配中却不是这样。比如dange。要匹配成dan'ge。因此我说这是最小匹配模式。

我的解决办法是这样的。在普通匹配下,都是从左向右匹配。在这种方式下。最小匹配模式,其实就是从右向左匹配的最大匹配模式。因此我使用了倒序匹配。

在匹配模式中,一定要先有“模”然后才能匹配。因此,拼音表是关键。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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