ตรวจสอบการสะกดคำด้วยพจนานุกรมหลายภาษา


14

ฉันจะใช้พจนานุกรมหลายเล่มกับเครื่องตรวจการสะกดคำของ Emacs ได้อย่างไร โดยเฉพาะฉันต้องการใช้พจนานุกรมภาษาอังกฤษแบบอังกฤษและพจนานุกรมภาษาอังกฤษทางการแพทย์ในเวลาเดียวกัน


คุณกำลังใช้flyspell?
PythonNut

flyspellใช่ฉันใช้
Divinenephron

วิธีการแก้ปัญหาสามารถใช้flyspellแต่ไม่จำเป็นต้อง ด้วยวิธีนี้คำตอบอาจเกี่ยวข้องกับผู้คนมากขึ้น
Divinenephron

คำตอบ:


16

Hunspellสามารถตรวจการสะกดด้วยพจนานุกรมหลายเล่มและคุณสามารถกำหนดค่านี้ให้ทำงานกับ Emacs นี่คือวิธีที่ฉันทำกับ OS X 10.11 ด้วย Emacs 25.0 มันจะไม่ทำงานกับ Emacsen รุ่นเก่า

ติดตั้ง Hunspell

brew install hunspell

ดาวน์โหลดพจนานุกรม Hunspell จากLibreOfficeและOpenMedSpel

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

ฉันติดตั้ง Emacs 25 อย่างไรก็ตามฉันพบข้อผิดพลาดต่อไปนี้อย่างแปลก: Symbol’s function definition is void: ispell-hunspell-add-multi-dicแม้ว่าฉันแน่ใจว่า/usr/share/emacs/25.1.50/lisp/textmodes/ispell.elcมีฟังก์ชั่นอยู่ มีความคิดว่ามันเกิดขึ้นได้อย่างไร? ขอบคุณ
xji

ฉันรู้ว่ามันเป็นเงาของฉันispell.elในEmacs25 ที่/usr/share/emacs/site-lisp/ใหม่กว่าispell.el... ดูunix.stackexchange.com/questions/28483/…สำหรับใครก็ตามที่อาจพบปัญหาเดียวกัน
xji

2

สมมติว่าคุณดาวน์โหลด en_US-med.dic และ en_US-med.aff แล้วและติดตั้ง hunspell

ขั้นตอนที่ 1 เรียกใช้hunspell -Dในเชลล์ซึ่งจะบอกไดเรกทอรีที่ 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ในเชลล์)

นี่คือข้อความที่ยกมาจากคู่มือ 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.

ทดสอบกับ Emacs 24.3, Debian 7 ด้วยคำว่า "fibrochondritis"

ควรทำงานที่ Emacs 23+ บนระบบปฏิบัติการใด

โปรดทราบบน Windows วิธีที่ง่ายที่สุดที่จะบอก hunspell ปฏิบัติการเส้นทางการค้นหาพจนานุกรมคือการตั้งค่าตัวแปรสภาพแวดล้อมDICTPATH(เป็นเอกสารในคู่มือ hunspell) มีความเป็นไปได้มากที่ปฏิบัติการ hunspell จาก Cygwin / MSYS2 จะรับรู้เส้นทางในรูปแบบ UNIXเท่านั้น


วิธีการนั้นไม่อนุญาตให้ฉันใช้พจนานุกรมหลายเล่ม
Divinenephron

รหัสที่ฉันให้คือพจนานุกรมหลายตัว
เฉินถัง

ฉันเห็นขอบคุณที่ชี้ให้เห็นว่า - ฉันไม่ได้สังเกตเห็น-dตัวเลือก
Divinenephron

อย่างนี้ดูเหมือนจะไม่ทำงานด้วยเหตุผลบางอย่าง เมื่อฉันใช้ตัวเลือก -d ในบรรทัดคำสั่งมันใช้งานได้ แต่ใน Emacs helm-flyspellดูเหมือนว่าจะใช้พจนานุกรมกับภาษาของระบบเท่านั้น
xji

helm-flyspell อาจใช้ aspell
เฉินบิน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.