使用多个字典进行拼写检查


14

如何在Emacs拼写检查器中使用多个词典?具体来说,我想同时使用英式英语词典和医学英语词典。


您正在使用flyspell吗?
PythonNut

是的,我正在使用flyspell
Divinenephron '16

该解决方案可以使用,flyspell但不必使用。这样,答案可能与更多人相关。
Divinenephron '16

Answers:


16

Hunspell可以使用多个词典进行拼写检查,并且您可以将其配置为与Emacs一起使用。这是我在带有Emacs 25.0的OS X 10.11上执行的操作。它不适用于较早的Emacsen。

安装Hunspell

brew install hunspell

LibreOfficeOpenMedSpel下载Hunspell词典。

cd ~/Downloads/

curl http://extensions.libreoffice.org/extension-center/english-dictionaries/releases/2016.04.01/dict-en.oxt > dict-en.oxt
unzip dict-en.oxt en_GB.aff en_GB.dic

curl -L https://addons.mozilla.org/en-US/firefox/downloads/latest/6526/addon-6526-latest.xpi > openmedspel.xpi
unzip openmedspel.xpi dictionaries/OpenMedSpel.{aff,dic}
mv dictionaries/OpenMedSpel.dic en_US-med.dic
mv dictionaries/OpenMedSpel.aff en_US-med.aff

把字典放进去~/Library/Spelling/

mv *.aff *.dic ~/Library/Spelling/

将此添加到~/.emacs/init.el

(with-eval-after-load "ispell"
  (setq ispell-program-name "hunspell")
  (setq ispell-dictionary "en_GB,en_US-med")
  ;; ispell-set-spellchecker-params has to be called
  ;; before ispell-hunspell-add-multi-dic will work
  (ispell-set-spellchecker-params)
  (ispell-hunspell-add-multi-dic "en_GB,en_US-med"))

请注意,该功能ispell-hunspell-add-multi-dic似乎在的旧版本中不存在ispell.el,甚至在Emacs 24.5中也没有。我必须从github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/…下载最新文件,然后再次对其进行字节编译以使其正常工作。
xji

我正在使用Emacs 25.0。我添加了一条仅在Emacs> = 25.0上有效的说明。
Divinenephron '16

我安装了Emacs25。但是,奇怪的是,我遇到了以下错误:Symbol’s function definition is void: ispell-hunspell-add-multi-dic,尽管我确定在/usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc,但该函数存在。知道怎么回事吗?谢谢。
xji

我意识到这是我ispell.el正在/usr/share/emacs/site-lisp/掩盖ispell.elEmacs25中的较新版本…… 对于可能遇到相同问题的任何人,请参见unix.stackexchange.com/questions/28483/…
xji

2

假设您已经下载了en_US-med.dic和en_US-med.aff并安装了hunspell

步骤1,hunspell -D在shell中运行,它将告诉目录hunspell在哪里搜索词典,然后将en_US-med.dic和en_US-med.aff复制到该目录。

步骤2,将以下代码插入〜/ .emacs,

(setq ispell-program-name "hunspell")
;; you could set `ispell-dictionary` instead but `ispell-local-dictionary' has higher priority
(setq ispell-local-dictionary "en_US")
(setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US,en_US-med") nil utf-8)))

实际上,我们将选项“ -d en_US,en_US-med”传递给了hunspell CLI,因此它可以同时使用两个字典“ en_US”和“ en_US-med”

“ -d”选项记录在hunspell手册中(man hunspell在shell中)

以下是hunspell手册中引用的文字:

-d en_US,en_geo,en_med,de_DE,de_med

       en_US  and  de_DE  are  base dictionaries, they consist of aff and dic
       file pairs: en_US.aff, en_US.dic and  de_DE.aff,  de_DE.dic.   En_geo,
       en_med,  de_med  are  special dictionaries: dictionaries without affix
       file. Special dictionaries are optional extension of the base  dictio‐
       naries  usually  with  special (medical, law etc.)  terms. There is no
       naming convention for special dictionaries, only the ".dic" extension:
       dictionaries  without affix file will be an extension of the preceding
       base dictionary (right order of the parameter list needs for good sug‐
       gestions). First item of -d parameter list must be a base dictionary.

在Debian 7的Emacs 24.3上测试了“纤维软骨病”一词。

如果在Emacs的23+工作在任何操作系统上

请注意,在Windows上,告诉hunspell可执行文件最简单的方法是字典搜索路径是设置环境变量DICTPATH(在hunspell手册中有记录)。Cygwin / MSYS2的hunspell可执行文件很可能只识别UNIX格式的路径


该方法不允许我使用多个词典。
Divinenephron '16

我给的代码是多字典的。
陈斌

我知道了,谢谢您指出这一点–我没有注意到该-d选项。
Divinenephron '16

好吧,由于某种原因,这似乎不起作用。当我在命令行中使用-d选项时,它可以工作,但是在Emacs中,helm-flyspell似乎以某种方式仅将字典与系统语言一起使用。
xji

helm-flyspell可能使用aspell。
chen bin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.