2010-08-24 18 views
7

Ho bisogno di eseguire il controllo ortografico di un documento di grandi dimensioni contenente molte parole in cammello. Voglio ispell o aspell per verificare se le singole parole sono scritte correttamente.Uso di ispell/aspell per il controllo ortografico parole camelcas

Così, nel caso di questa parola:

ScientificProgrezGoesBoink

mi piacerebbe averlo suggerire questo, invece:

ScientificProgressGoesBoink

C'è un modo per farlo? (E intendo, mentre lo eseguo su un buffer Emacs.) Nota che non voglio necessariamente suggerire l'alternativa completa. Tuttavia, se capisce che Progrez non è riconosciuto, mi piacerebbe essere in grado di sostituire almeno quella parte, o aggiungere quella parola al mio dizionario privato, piuttosto che includere ogni parola di cammello nel dizionario.

+0

Sono quasi sicuro che alcuni cc-mode possono gestire lo spostamento in base alla parola del cammello, quindi concettualmente immagino che sia possibile. Non ho assolutamente idea di come. – cristobalito

+1

sarebbe bello avere una soluzione generale a questo. aspell consente di controllare le parole run-together, ma è troppo liberale. –

risposta

0

È necessario analizzare le parole del cammello e dividerle, quindi controllare l'ortografia individuale per ciascuna di esse e assemblare un suggerimento tenendo conto del singolo suggerimento per ogni token con errori di ortografia. Considerando che ogni token con errori di ortografia può avere più suggerimenti, mi sembra un po 'inefficiente.

+1

Speravo in qualcosa di un po 'più semplice, magari facendo affidamento sulla modalità sottword o su alcune opzioni di configurazione in modalità ispell. Aspell ha dei filtri, ma AFAICT, non c'è modo di specificarne uno. –

+1

FWIW, glasses-mode esegue un'analisi simile. – phils

3

Ho preso i suggerimenti di @phils e ho scavato un po 'più in profondità. Si scopre che se si ottiene camelCase-mode e riconfigurare alcuni di ispell come questo:

(defun ispell-get-word (following) 
    (when following 
    (camelCase-forward-word 1)) 
    (let* ((start (progn (camelCase-backward-word 1) 
         (point))) 
     (end (progn (camelCase-forward-word 1) 
        (point)))) 
    (list (buffer-substring-no-properties start end) 
      start end))) 

allora, in quel caso, cammello individuale con carter parole suchAsThisOne sarà effettivamente eseguire il controllo ortografico in modo corretto. (A meno che tu non sia all'inizio di un documento - ho appena scoperto.)

Quindi questa chiaramente non è la soluzione completa, ma almeno è qualcosa.

Problemi correlati