更新SunPinyin-MacOS-2.0.2 beta 1 (10.5/10.6)

本此更新的主要内容包括:

  1. 为全拼切分器加入了模糊切分的功能,即根据上下文将fangan自动切分为fang'an或fan'gan。
  2. 为双拼加入了南方模糊音的功能。
  3. 将删除用户自造词的快捷键改为ctrl+command+num,以避免和Space的快捷键相冲突。

上述的一些功能,虽已大体稳定,但尚未经过严格的测试;另外还有其他一些bug fixes,也计划在2.0.2中加入。欢迎有兴趣尝鲜的朋友下载试用,SunPinyin-MacOS-2.0.2-beta1.zip。已安装2.0/2.0.1版本的朋友,无需删除已安装的版本,直接运行安装程序即可。

首次安装的朋友请注意,当安装程序进行到“下载数据文件”步骤时,请点击“开始…”按钮下载必要的数据文件(文件较大,可能比较耗时)。

SunPinyin-2.0模糊音节切分的实现

模糊切分,即根据上下文,将有歧义的拼音字符串进行自动切分,例如,将fangan切分为fang'an或fan'gan。这是许多现代拼音输入法都具备的功能。SunPinyin的ime-core本身具有搜索多种切分组合的能力,只要在buildLattice时,保证传入的segments是按照起始位置(m_start)排好顺序的即可。

那么首先要解决的问题就是,根据得到的最佳句子,反查到对应的切分序列。例如,最佳句子是“我的方案获得通过”,可以推得“wo'de'fang'an'huo'de'tong'guo”。

我们为TLexiconState加入了m_seg_path的成员,用来记录这个LexiconState对应的切分路径,例如我们有一个lexiconState对应是上例中的fang'an,其切分路径是[4, 8, 10]。然后,为CLatticeState加入了m_pLexiconState成员,用来记录之前transfer时所引用的那个lexiconState。这样,在backTrace最佳句子的时候,就可以得到对应的音节了。由于易混淆音(即z<->zh)的存在,一个seg_path可能对应多个syllable_paths(m_syls);但是最后在存入用户词典时,必须要知道真实的syllables,所以没有采用TLexiconState结构包含一个seg_path、和多个syllable_paths的方案。

接下来,就是该如何产生模糊切分的了。我们为CPinyinData类加入了一些额外的table,这些table都是使用pinyin_data.py脚本生成的。包括fuzzy_finals_map,这是为处理型如xian->xian/xi'an的模糊切分的;以及fuzzy_pre_syllables和fuzzy_pro_syllables,分别代表可能产生切分歧义的前一个音节和后一个音节。经过pinyin_data.py的筛选,发现只有“r/g/n”三个声母,可能作为前一个音节的结尾,或后一个音节的声母。

接下来,我们为CQuanpinSegmentor加入了一个新的helper functor,CGetFuzzySegmentsOp。这个助手类的输入是主切分器(即基于double-array trie的、改良的、最大后向匹配算法)所得到的segments;输出是,其对应的模糊切分segments。这个寻找模糊切分的过程,和切分器的主过程是平行的。但是,我们并不是简单的每次输入都从头到尾扫描一遍。

首先,根据主切分序列的最后一个segment(记为seg),invalidate那些受影响的fuzzy segments。在我们目前的实现中,fuzzy_segs中的模糊切分都是成对出现的,我们从后向前一对一对的进行筛选,只有当某一对的右边界(r),小于或等于seg的起始位置,才能够保留下来。然后,我们仅需要对主切分的最后一个切分(如果是xian的情况),或最近两个切分(如果是fangan的情况),进行处理。然后小心地调整好updatedFrom的值,并返回给CQuanpinSegmentor::_push()。

因此,如果输入xian,会生成xian和xi'an的两种切分,如果继续输入一个a,则会得到xia'na和xian'a,而不会包括xi'an'a这个切分了。主切分器的最后一个segment(即na),会先将xi'an给invalidate掉;然后辅助切分器会将xian'a加入到fuzzy_segs中。从这一点来说,我们和google和sogou输入法的处理仍然有所不同,他们都会保留xi'an'a这个切分。

我个人的感觉,sogou和google输入法每次在追加或删除一个拼音字符时,都是会从头进行一遍扫描处理;其间处理了各种情况,包括易混淆音,自动就错,和模糊音节切分等。而SunPinyin的push/pop操作,尽可能少的对拼音字符串进行扫描和匹配,应该来说效率要高一些。而且,我感觉目前的这种实现方式,也基本满足大家的需要了。:)

返回到_push方法之后,如果设置了易混淆音,就对m_fuzzy_segs的最后两个segments,加入易混淆音。无论之前是否已经加入过易混淆音,CQuanpinSegmentor::_addFuzzySyllables都会先将seg.m_syllables resize为1,即清空了之前的易混淆音。

最后,在getSegments()时,将m_fuzzy_segs和m_segs合并到m_merged_segs中,并按照m_start排好顺序,返回给外层的调用者。我们今后可能会改进这部分,其实m_segs和m_fuzzy_segs都是有序的,只要让CIMIContext::buildLattice可以按照m_start的顺序,同时迭代这两个有序的vector就可以了。

还有其他的一些辅助的修改,例如,CIMIContext::getCandidates的循环退出条件不同了,导致我们现在迭代的次数会明显增多了,需要想一些更好的解决方法。

导入fcitx用户词典

首先请下载这个导入工具,解压缩到某个目录中。注意:如果您使用的是实验版词表和语言模型,请下载open-gram项目的词表,解压并覆盖sunpinyin_importer目录下的dict.utf8文件,然后再执行下面的步骤。

如果在linux上,可以直接运行:

$ python import_fcitx_userdict.py

如果是要导入到mac平台上,请先使用mb2org(fcitx自带的工具),将用户词典导入到一个文本文件中:

$ /usr/bin/mb2org ~/.fcitx/pyusrphrase.mb > fcitx_userdict.txt,

然后将这个文件拷贝到mac上,再执行:

$ python import_fcitx_userdict.py fcitx_userdict.txt

导入QQ和紫光输入法的用户词典

大家可能已经注意到了,我们的用户词典导入工具,已加入了对QQ和紫光输入法用户词典的支持。

首先请下载这个导入工具,解压缩到某个目录中。注意:如果您使用的是实验版词表和语言模型,请下载open-gram项目的词表,解压并覆盖sunpinyin_importer目录下的dict.utf8文件,然后再执行下面的步骤。

导入QQ输入法的用户词典

在windows上激活QQ拼音输入法,然后打开“属性设置”对话框,在“词库管理”标签页下的“本地词库管理”中,点击“导出”按钮,将用户词典导出到一个文件中(例如,名为qq_userdict.dic),然后将这个文件拷贝到您的机器上(mac或linux),然后执行下面的操作,

$ python import_qq_userdict.py qq_userdict.dic

导入紫光华宇输入法的用户词典

在windows上激活紫光华宇拼音输入法,然后打开“设置”对话框,然后在“词库管理”标签页下,选中“用户词库”,点击“导出...”,将用户词典导出到一个文件中(例如,名为ziguang_userdict.txt),然后将这个文件拷贝到您的机器上(mac或linux),然后执行下面的操作:

$ python import_ziguang_userdict.py ziguang_userdict.dic

导入google和sogou输入法的用户词典

此次更新的导入工具,加入了对google和sogou输入法用户词典导入的支持。由于sunpinyin用户词典的一些限制,只能导入长度为2~6个字符的词条,并且最多可导入6万多个词条。我们后续会改进sunpinyin,以支持更大的词库和用户词典。该导入工具也可以在linux或solaris下运行,不过目前只支持ibus的前端。(因为我们不是很好判断,用户所使用的是xim还是ibus平台。)

注意:如果您使用的是实验版词表和语言模型,请下载open-gram项目的词表,解压并覆盖sunpinyin_importer目录下的dict.utf8文件,然后再执行下面的步骤。

首先请下载这个导入工具,解压缩到某个目录中。

导入google输入法用户词典

在windows上激活google拼音输入法,然后打开“属性设置”对话框,在“词典”标签页下,点击“导出”按钮,将用户词典导出到一个文件中(例如,名为google_userdict.dic),然后将这个文件拷贝到您的机器上(mac或linux),然后执行下面的操作,

$ python import_google_userdict.py google_userdict.dic

导入sogou输入法用户词典

在windows上激活sogou拼音输入法,然后打开“设置属性”对话框,然后在“词库”标签页下,在“词库操作选择”下拉框中选择“导出文本词库”,并点击“执行该操作”,将用户词典导出到一个文件中(例如,名为sogou_userdict.txt),然后将这个文件拷贝到您的机器上(mac或linux),然后执行下面的操作:

$ python import_sogou_userdict.py sogou_userdict.txt

基本上,只要输入法提供导出用户词典的功能、且导出格式为文本文件的话,为sunpinyin实现一个导入小工具是很简单的(可参考已有的importer)。大家可以自行编写一个,欢迎您为常用的输入法编写一个导入工具哦 :)

如果需要将fitx的用户词典导入到sunpinyin中,参见@Yunkwan同学编写的导入工具

将QIM的用户词典导入SunPinyin用户词典

感谢QIM提供的QDM工具,可以将用户词典导出到一个文件中。执行QDM,点击“Export”,选择“Export Simplified Words&Pinyin”,然后点击OK,将文件保存到某处,例如~/Desktop/User\'s\ Database.txt。下载这个导入工具,解压缩到某个目录中,然后执行下面的操作,

$ python import_qim_userdict.py ~/Desktop/User\'s\ Database.txt
[先下载] is imported into sunpinyin's userdict
[官网] is imported into sunpinyin's userdict
[那套] is imported into sunpinyin's userdict
[分隔符] is imported into sunpinyin's userdict
... ...
... ...

注意如果您使用的是实验版词表和语言模型,请下载open-gram项目的词表,解压并覆盖sunpinyin_importer目录下的dict.utf8文件,然后再执行上面的步骤。另外,导入时会忽略掉QDM中包含不完全音节的词条,敬请谅解 ...

将FIT的用户词典导入SunPinyin用户词典

许多从FIT转到SunPinyin的用户,希望能将FIT的用户词典导入到SunPinyin的用户词典中。因为FIT和SunPinyin都使用了SQLite来实现用户词典,因此编写一个python脚本来进行导入,并不困难。大家可以下载这个导入工具,解压缩到某个目录中,然后执行下面的操作,

$ python import_fit_userdict.py
[先下载] is imported into sunpinyin's userdict
[官网] is imported into sunpinyin's userdict
[那套] is imported into sunpinyin's userdict
[分隔符] is imported into sunpinyin's userdict
... ...
... ...

注意如果您使用的是实验版词表和语言模型,请下载open-gram项目的词表,解压并覆盖sunpinyin_importer目录下的dict.utf8文件,然后再执行上面的步骤。

更新 SunPinyin-MacOS-2.0.1 (10.5/10.6)

本次更新的主要内容包括:

  1. 修正了和Chrome的兼容性问题 (#52#53),虽然应该说是Chrome的问题 :(。而且解决issue #52是有代价的,现在进行焦点切换时,会导致preedit字符串被提交到应用中。而issue #53就更诡异了,随便按下一个修饰键(例如shift或command),都会发重复的NSFlagsChanged事件过来。
  2. 将ign->ing的纠错改为gn->ng,以支持ogn->ong, egn->eng等组合
  3. 加入了用上下箭头做翻页键的选项 (#70)

本来没打算这么快发2.0.1的,不过许多朋友对Chrome上的兼容性问题还是很关心的。:)

欢迎下载试用,SunPinyin-MacOS-2.0.1.zip。已安装2.0版本的朋友,可以直接通过“检查更新…”来进行更新。

SunPinyin-MacOS-2.0 Official Release (10.5/10.6)

感谢大家的一直以来的支持,今天我们正式发布SunPinyin for MacOS的2.0版本了!这个正式版本和之前的beta 4.2并没有什么大的差别,主要是加入了候选窗口圆角风格的支持,调整了一些缺省的配置参数(包括颜色和缺省字符集)。

欢迎下载试用,SunPinyin-MacOS-2.0.zip。已安装之前beta版本的朋友,无需删除已安装的版本,直接运行安装程序即可。

首次安装的朋友请注意,当安装程序进行到“下载数据文件”步骤时,请点击“开始…”按钮下载必要的数据文件(文件较大,可能比较耗时)。