Como configuro o hunspell em um PC com Windows?

10

Eu tenho meus dicionários de hunspell em C:\hunspell\. Ele contém .dice .affarquivos para três línguas: en_GB, en_US, e nb_NO. As descrições que encontro na web sobre como fazer o hellspell funcionar no Emacs me deixam confusa.

Qual é o código mínimo necessário no meu arquivo init para poder usar esses três dicionários de hunspell no Emacs?

Eu tentei o seguinte código sugerido por um site:

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

Mas, ao desejar alterar o dicionário M-x ispell-change-dictionary, recebo a seguinte mensagem:

ispell-phaf: nenhuma entrada correspondente para nil.

myotis
fonte

Respostas:

4

Configuração do 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)))

Configuração do dicionário Hunspell:

Execute hunspell -Dna janela do que listará os diretórios hunspell procurando por dicionários. Copie seus dicionários para esse diretório. Essa é a configuração mínima que você precisa.

Consulte http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.html para obter mais detalhes técnicos.

Chen Bin
fonte
Trabalhou para mim! Minha configuração com use-packageé(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
Basta fazer (setq ispell-program-name "c: /what-ever-path/hunspell.exe") no Windows 10 para hunspell sem outra configuração que funcione para a verificação ortográfica em inglês.
Yu Shen
2

Eu me deparei com esse problema há algum tempo. Se bem me lembro, o motivo pelo qual você recebe essa mensagem de erro é porque hunspellnão consegue se configurar com base no ambiente atual. Portanto, para corrigi-lo, você precisa configurar as variáveis hunspellespecíficas ispell. O código a seguir deve ser suficiente para configurar o hunspell para dicionários em inglês:

(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)

A parte importante é que ispell-hunspell-dictionary-alist, ela deve ser preenchida com uma lista de dicionário adequada, como a que é fornecida em ispell-local-dictionary-alist.

No entanto, existem alguns detalhes em torno desta lista. Se você quiser saber mais sobre isso, fique à vontade para ler M-x describe-variable ispell-local-dictionary-alist.

Xaldew
fonte
+1 parece haver algo errado com a tentativa padrão de preencher o arquivo ispell-hunspel-dictionary-alist. Em vez de (require 'flyspell)você pode considerar(with-eval-after-load "ispell" ...)
Andrew Swann
1

Instale todos os dicionários que você deseja no local em que a hunspell pesquisa; encontre isso com hunspell -D. Uma vez instalado, este comando deve mostrá-los.

No arquivo init, adicione apenas um deles. Por exemplo, eu tenho en_GBe en_USdicionários instalados. Eu tenho, no meu arquivo init, este:

(setenv "DICTIONARY" "en_GB")

Ao abrir o Emacs, basta ativar flyspell-mode. O Emacs deve dizer que é iniciado ispell com o dicionário padrão. Isso significa que en_GBestá em ação, por exemplo. Agora, se você quiser mudar, basta fazer M-x ispell-change-dictionarye fornecer o novo nome do dicionário, por exemplo en_US. Agora o outro dicionário deve estar em ação. Isso, novamente, será notificado pelo Emacs, dizendo que ele começou com ispell, mas desta vez com o en_USdicionário.

legends2k
fonte
1

Supondo que você esteja usando uma versão recente do Emacs (24.4 ou superior, pelo que me lembro), tudo o que você precisa fazer é ter certeza de que está usando o nome correto do dicionário, e o Emacs fará o resto automaticamente.

O principal problema é que o Windows usa um formato de descrição de idioma diferente, por exemplo, o inglês britânico é chamado ENG e o inglês dos EUA é ENU . Isso significa que seus arquivos de dicionário devem se chamar ENU.dic e ENU.aff para inglês dos EUA e ENG.dic e ENG.aff para inglês britânico.

Também pode ser necessário ter um dicionário "padrão" ou a hunspell pode não estar muito feliz. Você também pode definir a variável de ambiente DICTIONARY para forçar um padrão.

Infelizmente, não consigo descobrir como o seu dicionário norueguês deve ser chamado. Se você estiver usando o código de idioma norueguês no Windows, poderá verificar no Emacs avaliando:

(getenv "LANG")

O que mostrará a configuração que o Emacs está usando.

Alan Third
fonte
0

Isso é apenas um palpite, mas talvez você precise dizer qual idioma você gostaria de usar como o "padrão":

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

O valor padrão de ispell-dictionaryé nil, portanto, pode ser que essa seja a causa do seu problema.

Mark Karpov
fonte
Obrigado Mark, pela dica, mas infelizmente isso não parece mudar minha situação. A mensagem de erro ainda aparece
myotis