langtool und Emacs
Aus irgendeinem Grund inzwischen vergessenen Grund habe ich nach einer Grammatikprüfung für Emacs gesucht. Ich bin dabei auf Emacs langtool gestoßen, das auf eine lokale Installation von languagetool zugreift.
Languagetool ist eine wohl recht brauchbare mehrsprachige Grammatikprüfung, die man in verschiedener Software einsetzen kann. Die Webseite verlinkt aber nur Plugins für Tools, die ich nicht einsetze (außer Firefox, aber da schreibe ich keine langen Texte) und verweist ansonsten auf Premium-Angebote und ähnliches. Nichts mit standalone-Server oder CLI.
Als Debian-Paket findet sich auch nichts.
Irgendwann hatte ich aber tief genug gebuddelt und die OpenSource-Wurzeln ausfindig gemacht: das Projekt auf GitHub. Damit konnte ich schon mehr anfangen.
Installation von languagetool
Man braucht mindestens ein Java 8 SDK und Maven, um sich das Kommandozeilen-Interface selbst zu übersetzen. Das geht aber ziemlich einfach:
git clone --depth 5 https://github.com/languagetool-org/languagetool.git
(man braucht nicht das komplette Repository)cd languagetool
mvn clean test
(es reicht auchmvn clean compile
, wenn man keine Lust auf die Tests hat)./build.sh languagetool-standalone package -DskipTests
Unter ./languagetool-standalone/target/LanguageTool-5.8-SNAPSHOT/LanguageTool-5.8-SNAPSHOT/
sind jetzt drei JARs erstellt worden (plus ein Haufen weiterer Dinge im libs/
-Unterverzeichnis):
languagetool.jar
- Eine kleines GUI-Frontend für languagetool.
languagetool-commandline.jar
- Die Kommandozeilenvariante, die eine einzelne Datei überprüfen kann.
languagetool-standalone.jar
- Eine Variante, die man dauerhaft als Dämon laufen lassen kann.
Alle drei Varianten lassen sich direkt mit java -jar PFAD-ZUM-JAR/JAR.jar
starten.
Installation von Emacs langtool
Da Emacs langtool im MELPA liegt, habe ich es über M-x
package-install
installiert.
Anschließend war noch folgendes in meiner ~/.emacs
zu konfigurieren
(ich habe mich für den Aufruf des commandline-JARs entschieden):
- (when (require 'langtool nil :noerror)
- (setq langtool-language-tool-jar "PFAD-ZUM-JAR/languagetool-commandline.jar"))
Danach kann ich den gerade offenen Buffer mit M-x langtool-check
prüfen. Leider wird dabei keines der vielen vorhandenen
Benachrichtigungsframeworks benutzt (so wie das z.B. flymake macht)
und man muss die gesetzten Marker über M-X langtool-check-done
manuell wieder entfernen.
Die Prüfung selbst ist recht gemächlich und dauert mehrere Sekunden, läuft aber asynchron. Da ich das nicht oft brauche, ist das für mich OK.
Wer die Funktion öfter und schneller braucht, kann das Server-JAR starten, Emacs-langtool kommt damit auf zwei Arten zurecht: Entweder kann es selber den Server starten und dann für Folgeaufrufe weiterbenutzen, oder es greift auf einen bereits laufenden Server zu (über HTTP, da ist auch Remote-Zugriff auf andere Systeme möglich).
Die möglichen Konfigurationen sind im README des Projektes beschrieben.
wahnsinniger Selbstversuch
Hier sieht man das Tool in Aktion, wie es gerade eine frühere Version dieses Blogartikels checkt:
- Die gerade markierte Stelle enthält den Hinweis, dass ich hinter dem Doppelpunkt lieber das Projekt auf Github. statt Das … schreiben sollte. Klingt gut!
- Bei der angemeckerten Stelle Ein kleines GUI-Frontend ist es sich im Kasus unsicher. Ich meine, das Frontend ist korrekt.
Insgesamt kommt languagetool erstaunlich gut mit den Orgmode-Steuerzeichen und dem Elisp-Quellcode zurecht.[1] Ich werde das ab jetzt wohl für jeden Blogartikel benutzen. Bin gespannt, wann ich mal wieder einen englischen Eintrag schreibe und wie gut die Spracherkennung klappt.
Was ich noch irgendwie wegkonfigurieren muss, ist das Anmeckern doppelter Leerzeichen. Das ist so und das soll so, das hat nämlich Auswirkungen auf den automatischen Zeilenumbruch. Und außerdem ist der Leerraum hinter einem Satzpunkt größer als z.B. hinter einer Abkürzung.
Alternativen?
Bei meinen Recherchen bin ich darüberhinaus auf style and diction
gestoßen. Das ist ein kleines(?), älteres GNU-Projekt, das Texte
besser lesbar machen soll. Es ist in Debian im Paket diction
verfügbar und liefert teilweise auch brauchbare Tipps, insbesondere,
wenn ich wieder mit unnützen Füllwörtern um mich schmeiße. Aufgerufen
wird es einfach auf der Kommandozeile:
- $ diction blog/emacs-langtool.org
- blog/emacs-langtool.org:39: Alle drei Varianten lassen sich direkt mit =java -jar PFAD-ZUM-JAR/[JAR].jar= starten.
- blog/emacs-langtool.org:89: Das ist [so] und das soll [so], das hat nämlich Auswirkungen auf die Zeilenumbrüche.
- 2 phrases in 41 sentences found.
Auch hier zu meiner Überraschung keine Probleme mit den Org-Steuerzeichen (was ist das für eine Zauberei?).
- In Zeile 39 hält es [JAR] in der Pfadangabe für ein doppeltes Wort. Sei ihm verziehen.
- In Zeile 89 hält es die beiden [so] für unnötige Füllwörter (komischerweise aber nicht für eine Wortdoppelung). Aber: Das ist so und das soll so! (Und es bleibt auch so.)
Ich finde die Ausgabe etwas schwer zu entziffern, die Fundstellen
werden einfach in [eckige Klammern] gepackt. Etwas Farbe täte da
ganz gut, ich behelfe mir aktuell mit folgendem im meiner ~/.alias/
:
- # pimp diction(1)
- diction() {
- command diction "$@" | grep --color=auto -P '\[.+?]'
- }
Fazit
Handliche kleine Helferlein, sollte jeder nutzen.
Und die Einbindung nach LibreOffice geht sogar ohne Selberkompilieren.)
Jumpei KAWAMI am : Jumpei KAWAMI via Twitter