https://github.com/tumashu/chinese-pyim.git
git clone 'git://github.com/tumashu/chinese-pyim.git'
Chinese-pyim (Chinese Pinyin Input Method) 是 emacs 环境下的一个中文拼音输入法。
Chinese-pyim 的代码源自 emacs-eim。
emacs-eim 是一个 emacs 中文输入法框架,本身包含了多种中文输入法,比如:五笔输入法,仓颉输入法以及二笔输入法等等。但遗憾的是,emacs-eim 并没有发展起来,2008 年之后几乎停止了开发。一个主要的原因是外部中文输入法的高速发展,比如:Window平台下的搜狗输入法,baidu输入法以及QQ输入法, linux平台下的fcitx,ibus等等。
但外部输入法与 emacs 配合不够默契,极大的损害了 emacs 那种 行云流水 的体验。而本人在使用(或者叫折腾) emacs-eim 的过程中发现:
所以,本人认为 emacs-eim 非常适合作为 备用 中文输入法,于是我 fork emacs-eim 的代码, 更改名称为:chinese-pyim。
Chinese-pyim 的目标是: 尽最大的努力成为一个好用的 emacs 备用中文拼音输入法 。具体可表现为三个方面:
配置melpa源,参考:http://melpa.org/#/getting-started
M-x package-install RET chinese-pyim RET
在emacs配置文件中(比如: ~/.emacs)添加如下代码:
(require 'chinese-pyim)
用户可以使用三种方法为 Chinese-pyim 添加拼音词库,具体方式请参考 1.9.3 小结。
注意:每一个词库文件必须按行排序(准确的说,是按每一行的拼音code排序),因为`Chinese-pyim' 寻找词条时,使用二分法来优化速度,而二分法工作的前提就是对文件按行排序。具体细节请参考:`pyim-bisearch-word' 。所以,当词库排序不正确时(比如:用户手动调整词库文件后),记得运行函数 `pyim-update-dict-file' 重新对文件排序。
(setq default-input-method "chinese-pyim")
(global-set-key (kbd "C-<SPC>") 'toggle-input-method)
(global-set-key (kbd "C-;") 'pyim-toggle-full-width-punctuation)
输入法快捷键 | 功能 |
---|---|
C-n 或 M-n 或 + | 向下翻页 |
C-p 或 M-p 或 - | 向上翻页 |
C-f | 选择下一个备选词 |
C-b | 选择上一个备选词 |
SPC | 确定输入 |
RET 或 C-m | 字母上屏 |
C-c 或 C-g | 取消输入 |
TAB | 模糊音调整 |
Chinese-pyim 可以使用 emacs tooltip 功能在 光标处 显示一个选词框,用户可以通过下面的设置来开启这个功能。
(setq pyim-use-tooltip t)
Chinese-pyim 使用一个比较 粗糙 的方法处理 模糊音 ,要了解具体细节,请运行:
C-h v pyim-fuzzy-pinyin-adjust-function
Chinese-pyim 内置 了4种词语联想方式:
`pinyin-similar' 搜索拼音类似的词条做为联想词,如果输入 “ni-hao” ,那么搜索拼音与 “ni-hao” 类似的词条(比如:“ni-hao-a”)作为联想词。
`pinyin-shouzimu' 搜索拼音首字母对应的词条做为联想词,如果输入 “ni-hao” ,那么同时搜索 code 为 “n-h” 的词条做为联想词。
`pinyin-znabc' 类似智能ABC的词语联想(源于 emacs-eim)。
`guess-words' 以上次输入的词条为 code,然后在 guessdict 中搜索,用搜索得到的词条来提高输入法识别精度。
注意:这个方法需要用户安装 guessdict 词库,guessdict 词库文件可以用 `pyim-article2dict-guessdict' 命令生成,不想折腾的用户也可以从下面的地址下载样例词库:(注意:请使用另存为,不要直接点击链接)。
http://tumashu.github.io/chinese-pyim-guessdict/pyim-guessdict.gpyim
Chinese-pyim 默认开启了词语联想功能,但用户可以通过下面的代码来调整设置,比如:
(setq pyim-enable-words-predict '(pinyin-similar pinyin-shouzimu guess-words))
开启词语联想功能有时候会导致输入法卡顿,用户可以通过下面的方式关闭:
(setq pyim-enable-words-predict nil)
另外,Chinese-pyim 也可以通过 Company 框架来实现词语联想,具体请参考: 1.8.8
用户可以自定义类似的命令来实现快速切换拼音词库。
(defun pyim-use-dict:bigdict ()
(interactive)
(setq pyim-dicts
'((:name "BigDict"
:file "/path/to/pyim-bigdict.txt"
:coding utf-8-unix)))
(pyim-restart-1 t))
`Chinese-pyim' 增加了两个 `company-mode' 后端来实现 联想词 输入功能:
安装和使用方式:
安装 `company-mode' 扩展包。
在 emacs 配置中添加如下几行代码:
(require 'chinese-pyim-company)
可以通过 pyim-company-predict-words-number 来设置联想词的数量,比如:从词库中搜索10个联想词可以设置为:
(setq pyim-company-predict-words-number 10)
可以通过设置 `pyim-tooltip-width-adjustment' 变量来手动校正。
Chinese--pyim 开发使用 lentic 文学编程模式,代码文档隐藏在comment中,如果用户喜欢阅读 html 格式的文档,可以查看在线文档;
http://tumashu.github.io/chinese-pyim/
Chinese-pyim 默认没有携带任何拼音词库,用户可以使用下面三种方式,获取质量较好的拼音词库:
第一种方式 (懒人推荐使用)
获取其他 Chinese-pyim 用户的拼音词库,比如,某个同学测试 Chinese-pyim 时创建了一个中文拼音词库,词条数量大约60万,文件大约20M,(注意:请使用另存为,不要直接点击链接)。
http://tumashu.github.io/chinese-pyim-bigdict/pyim-bigdict.pyim
下载上述词库后,运行 `pyim-dicts-manager' ,按照命令提示,将下载得到的词库文件信息添加到 `pyim-dicts' 中,最后运行命令 `pyim-restart' 或者重启 emacs,这个词库使用 `utf-8-unix' 编码。
第二种方式 (Windows 用户推荐使用)
使用词库转换工具将其他输入法的词库转化为Chinese-pyim使用的词库:这里只介绍windows平台下的一个词库转换软件:
首先从其他拼音输入法网站上获取所需词库,使用下述自定义输出格式转换词库文件,然后将转换得到的内容保存到文件中。
shen,lan,ci,ku 深蓝词库
将文件中所有“,”替换为“-”,得到的文件每一行都类似:
shen-lan-ci-ku 深蓝词库
最后,运行 `pyim-dicts-manager' ,按照命令提示,将转换得到的词库文件的信息添加到 `pyim-dicts' 中,完成后运行命令 `pyim-restart' 或者重启emacs。
第三种方式 (Linux & Unix 用户推荐使用)
E-Neo 同学编写了一个简单的词库转换工具: scel2pyim , 这个小工具可以直接将搜狗输入法的细胞词库转换为 Chinese-pyim 使用的文本词库, pyim-dicts-manager 中 “导入搜狗输入法细胞词库” 功能就是依靠这个工具实现。
按照说明安装好 scel2pyim 后,将scel2pyim命令所在的目录添加到系统PATH,或者在 emacs 配置文件中添加代码:
(setq pyim-dicts-manager-scel2pyim-command "/path/to/scel2pyim")
第四种方式 (喜欢折腾的人推荐使用)
获取中文词条,然后使用命令为词条添加拼音code。中文词条的获取途径很多,比如:
相关命令有三个:
注意:在运行上述两个命令之前,必须确保待转换的文章中,中文词汇已经使用 空格 强制隔开。
最后将生成的词库按上述方法添加到 Chinese-pyim 中就可以了。
这里假设有两个词库文件:
在~/.emacs文件中添加如下一行配置。
(setq pyim-dicts
'((:name "dict1" :file "/path/to/pyim-dict1.txt" :coding gbk-dos)
(:name "dict2" :file "/path/to/pyim-dict2.txt" :coding gbk-dos)))
注意事项:
下面两个函数可以将中文字符串转换的拼音字符串或者列表,用于 emacs-lisp 编程。
Chinese-pyim 包含了一个简单的分词函数:`pyim-split-chinese-string'. 这个函数使用暴力匹配模式来分词,所以,*不能检测出* Chinese-pyim 词库中不存在的中文词条。另外,这个函数的分词速度比较慢,仅仅适用于中文短句的分词,不适用于文章分词。根据评估,20个汉字组成的字符串需要大约0.3s, 40个汉字消耗1s,随着字符串长度的增大消耗的时间呈几何倍数增加。
举例来说:
(("天安" 5 7)
我爱北京天安门 -> ("天安门" 5 8)
("北京" 3 5)
("我爱" 1 3))
其中,每一个词条列表中包含三个元素,第一个元素为词条本身,第二个元素为词条相对于字符串的起始位置,第三个元素为词条结束位置。
另外一个分词相关的函数是 `pyim-split-chinese-string2string', 这个函数仅仅将一个中文字符串分词,在分词的位置用空格或者用户自定义的分隔符隔开,然后返回新的字符串。
用户可以通过运行命令 `pyim-cache-dict-buffer' 来缓存 Chinese-pyim 的词库 buffer,使用缓存可以提高分词的速度。
注:仅仅对一般词库有效,个人文件和 guessdict 词库无效。
Chinese-pyim 包含了一个简单的命令:`pyim-get-words-list-at-point', 这个命令可以得到光标处的 英文 或者 中文 词条的 *列表*,这个命令依赖分词函数: `pyim-split-chinese-string'。
中文词语没有强制用空格分词,所以 emacs 内置的命令 `forward-word' 和 `backward-word' 在中文环境不能按用户预期的样子执行,而是 forward/backward “句子” ,Chinese-pyim 自带的两个命令可以在中文环境下正常工作:
用户只需将其绑定到快捷键上就可以了,比如:
(global-set-key (kbd "M-f") 'pyim-forward-word)
(global-set-key (kbd "M-b") 'pyim-backward-word)