Bagaimana cara saya mengatur hunspell pada PC Windows?

10

Saya memiliki kamus hunspell di C:\hunspell\. Ini berisi .dicdan .afffile untuk tiga bahasa: en_GB, en_US, dan nb_NO. Deskripsi yang saya temukan di web tentang cara membuat hunspell bekerja di Emacs membuat saya bingung.

Apa kode minimum yang saya butuhkan dalam file init saya untuk dapat menggunakan tiga kamus hunspell ini di Emacs?

Saya telah mencoba kode berikut yang disarankan oleh satu situs web:

(add-to-list 'exec-path "C:/hunspell/bin/")
(setq ispell-program-name (locate-file "hunspell"
                       exec-path exec-suffixes 'file-executable-p))

Tetapi ketika ingin mengganti kamus M-x ispell-change-dictionary, saya mendapatkan pesan berikut:

ispell-phaf: Tidak ada entri yang cocok untuk nihil.

myotis
sumber

Jawaban:

4

Pengaturan Emacs:

(setq ispell-program-name "c:/what-ever-path/hunspell")

;; "en_US" is key to lookup in `ispell-local-dictionary-alist'.
;; Please note it will be passed as default value to hunspell CLI `-d` option
;; if you don't manually setup `-d` in `ispell-local-dictionary-alist`
(setq ispell-local-dictionary "en_US") 

(setq ispell-local-dictionary-alist
      '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8)))

Penyiapan kamus Hunspell:

Jalankan hunspell -Ddi jendela dos yang akan mendaftar direktori hunspell mencari kamus. Salin kamus Anda ke direktori itu. Ini adalah pengaturan minimum yang Anda butuhkan.

Lihat http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-em-emacs.html untuk rincian teknis lebih lanjut.

chen bin
sumber
Bekerja untukku! Setup saya use-packageadalah(use-package ispell :config (setq ispell-program-name "C:/Program Files (x86)/hunspell-1.3.2-3-w32-bin/bin/hunspell.exe") (setq ispell-local-dictionary "en_US") (setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8))))
Lorem Ipsum
Lakukan saja (setq ispell-program-name "c: /what-ever-path/hunspell.exe") di Windows 10 untuk hunspell tanpa konfigurasi lain berfungsi untuk pemeriksaan ejaan bahasa Inggris.
Yu Shen
2

Saya mengalami masalah ini sendiri beberapa waktu lalu. Jika saya ingat dengan benar, alasan Anda mendapatkan pesan kesalahan itu adalah karena hunspelltidak dapat mengkonfigurasi sendiri berdasarkan lingkungan saat ini. Jadi untuk memperbaikinya, Anda perlu mengkonfigurasi variabel hunspelltertentu ispell. Kode berikut harus cukup untuk menyiapkan hunspell untuk kamus bahasa Inggris:

(require 'flyspell)
(setq ispell-dictionary "english")
(add-to-list 'ispell-local-dictionary-alist '(("english"
                                               "[[:alpha:]]"
                                               "[^[:alpha:]]"
                                               "[']"
                                               t
                                               ("-d" "en_US")
                                               nil
                                               utf-8)))
(setq ispell-hunspell-dictionary-alist ispell-local-dictionary-alist)

Bagian yang penting adalah ispell-hunspell-dictionary-alist, harus diisi dengan daftar kamus yang tepat, seperti yang diberikan ispell-local-dictionary-alist.

Ada sedikit detail di sekitar daftar ini. Jika Anda ingin tahu lebih banyak tentangnya, silakan baca bersama M-x describe-variable ispell-local-dictionary-alist.

Xaldew
sumber
+1 tampaknya ada sesuatu yang salah dengan upaya default untuk mengisi ispell-hunspel-dictionary-alist. Alih-alih (require 'flyspell)Anda mungkin mempertimbangkan(with-eval-after-load "ispell" ...)
Andrew Swann
1

Pasang semua kamus yang Anda inginkan di lokasi tempat hunspell mencari; temukan ini bersama hunspell -D. Setelah terinstal, perintah ini akan menunjukkan kepada mereka.

Dalam file init, tambahkan hanya tambahkan salah satunya. Misalnya saya punya en_GBdan en_USkamus diinstal. Saya sudah, dalam file init saya, ini:

(setenv "DICTIONARY" "en_GB")

Setelah membuka Emacs, aktifkan saja flyspell-mode. Emacs harus mengatakan bahwa ini dimulai dengan kamus default. Ini berarti en_GBsedang beraksi, sebagai contoh kita. Sekarang jika Anda ingin berganti, lakukan saja M-x ispell-change-dictionarydan berikan nama kamus baru Eg en_US. Sekarang kamus lain harus beraksi. Ini, sekali lagi, akan diberitahukan oleh Emacs yang mengatakan itu dimulai tetapi hanya kali ini dengan en_USkamus.

legends2k
sumber
1

Dengan asumsi Anda menggunakan versi terbaru dari Emacs (24,4 atau lebih, seingat saya) maka yang perlu Anda lakukan adalah memastikan Anda menggunakan nama kamus yang benar, dan Emacs akan melakukan sisanya secara otomatis.

Masalah utama adalah bahwa Windows menggunakan format deskripsi bahasa yang berbeda, misalnya Bahasa Inggris British disebut ENG , dan Bahasa Inggris AS adalah ENU . Ini berarti file kamus Anda harus disebut ENU.dic dan ENU.aff untuk Bahasa Inggris AS, dan ENG.dic dan ENG.aff untuk Bahasa Inggris Inggris.

Mungkin juga perlu memiliki kamus "default" atau hunspell mungkin tidak terlalu senang. Anda juga dapat mengatur variabel lingkungan DICTIONARY untuk memaksakan default.

Sayangnya saya tidak tahu apa yang harus disebut sebagai kamus Norwegia Anda. Jika Anda menggunakan bahasa Norwegia di Windows, Anda harus dapat memeriksa dalam Emacs dengan mengevaluasi:

(getenv "LANG")

Yang akan menunjukkan kepada Anda pengaturan yang menggunakan Emacs.

Alan Ketiga
sumber
0

Ini hanya dugaan, tetapi mungkin Anda perlu memberi tahu bahasa mana yang ingin Anda gunakan sebagai "default":

(setq ispell-dictionary "en") ; default dictionary

Nilai default ispell-dictionaryadalah nil, jadi mungkin ini adalah penyebab masalah Anda.

Mark Karpov
sumber
Terima kasih Mark, untuk tip Anda, tetapi sayangnya sepertinya tidak mengubah situasi saya. Pesan kesalahan masih muncul
myotis