Emacs查词典 第二部分: DICT协议

如果你是在Linux/Unix下,那么使用dict命令行程序来查辞典是非常简单方便的,它通过DICT协议(RFC 2229)与dict server通讯获取查询结果,而dict.org 就提供这个服务(另外你也可以直接在网页上 http://www.dict.org 上面查词),你也可以用dictd包自己搭一个服务器(由于dict.org上没有提供中文词典服务,所以要查中文的话,还是得自己搭一个)。

通过DICT协议查询词典有如下一些功能
1. 可以指定词典
2. 可以指定查询策略(比如在词典中按前部匹配、后部匹配、中间匹配、regexp等方式——也就是你在 http://www.dict.org/ 网页上看到的search type选项)

0. 自己搭一个dictd服务器

以Debian为例,先安装dictd包:
  

apt-get install dictd



然后你得安装一些词典, 常用的英文词典是:
* wn (WordNet)
* gcide (GNU version of the Collaborative International Dictionary of English)
* foldoc (Free On Line Dictionary of Computing)
* jargon
* vera (Virtual Entity of Relevant Acronyms, computer related acronyms)
另外freedict项目提供一些其它语言的词典。这些包Debian都收录了,所以:
  

apt-get install dict-wn dict-gcide dict-foldoc dict-jargon dict-wera



而中文词典包可以在这里找到: dict-zh-1.6

下一步是配置权限,因为Debian缺省的配置比较严格。但这里我就不细说了,只说说quick and dirty的方法: 如果你的dictd 服务器只是你一个人用不需要怎么考虑安全性问题的话,可以把/etc/dictd/dictd.conf里面的access配置为allow *;而且Debian缺省只允许本地访问,想让其它机器也能访问的话可把listen_to 127.0.0.1注释掉。


最后,启动dictd 服务器
  

/etc/init.d/dictd restart



1. dictionary.el (推荐)

主页: http://me.in-berlin.de/~myrkr/dictionary/
EmacsMirror: https://github.com/emacsmirror/dictionary

这个包自行实现了DICT协议(RFC 2229),所以不需要外部程序。而且它支持http代理,这是dict命令行程序不支持的。

该包有5个.el文件, 主要入口都在dictionary.el。基本用法如下:

(setq dictionary-server "localhost")
(autoload 'dictionary-search "dictionary" "Ask for a word and search it in all dictionaries" t)
(autoload 'dictionary-match-words "dictionary""Ask for a word and search all matching words in the dictionaries" t)

然后就可以用M-x dictionary-search查某个单词的含义,用M-x dictionary-match-words查有那些单词与当前给出的类似。

参考文档:
* Pluskid's Emacs Wiki: EmacsDictionary
* Xah Lee: Emacs Dictionary Lookup

Xah Lee的文档里指出了dictionary.el的几个缺点,有的还给出了解决办法(比如不能指定多个词典查询的问题),打算使用这个库的朋友要去看一下。


补充一下: dictionary.el 在现在的GNU Emacs上使用时,会报告make-local-hook找不到,把那行注释掉就是了。

2. dict.el

回到dict.el, 使用方法如下:

(setq dict-servers '("localhost"))
(setq dict-enable-key-bindings t)
(setq dict-databases '("gcide""pydict"))
(require 'dict)

然后就可以M-x dict或者C-c d d来查词了,用C-c d C-h可看到其它用法。

dict.el 的缺点是需要dict命令行程序,而且在加载的时候就会调用dict程序连接dict server获取词典列表和匹配策略。所以如果想使用本机安装的dictd服务器的话,至少需要先设置dict-servers

也因为上述原因,在Windows上使用的时候特别难搞:首先你没有dict程序,然后它加载时还需要调用gawk, cut, sed等程序,又会碰到烦人的cmdproxy vs bash问题。我用Cygwin自己移植了dict客户端过来,但Emacs里面的折腾了好久都没搞定,以后搞定了再补充说明吧(其实这个说了也白说,因为有更好的替代品 dictionary.el,纯粹是征服欲作祟:-)。

3. 其它

dict-web
这个包虽然也是访问dict.org来提取数据,但不根据DICT协议,而是HTTP协议,对结果的呈现也是web方式(所以需要w3浏览器)

dictem
这个包只有一个文件dictem.el,也需要dict命令行程序,比dict.el 好用多了。

;;On Windows, first make sure cygwin binary path in env PATH
(setenv "PATH"(concat "e:/cygwin2/bin;e:/cygwin2/usr/local/bin;"(getenv "PATH")))
(add-to-list 'exec-path"e:/cygwin2/bin")
(add-to-list 'exec-path"e:/cygwin2/usr/local/bin")

(require 'dictem)
(setq dictem-server "localhost")
(dictem-initialize)

;;Now you can
;;M-x dictem-run-search
;;M-x dictem-run-match

 
lookup-el

Debian package: http://packages.debian.org/squeeze/lookup-el
这个包支持EPWING光盘形式的词典,也支持NDTP服务器和dictd服务器的词典查询。这个库是日本人写的,文档里面也都是日文内容,看不太懂,所以没有去试用这个库(另外EPWING和NDTP似乎也主要是日本人常用)


posted @ 2011-06-26 21:52 巴蛮子 阅读(...) 评论(...) 编辑 收藏