LanguageTool.org
LanguageTool.org
http://wiki.languagetool.org/public-http-api
https://github.com/languagetool-org/languagetool-website/tree/master/www/online-check/tiny_mce
https://languagetool.org:8081/?language=de-DE&text=Deine+Sorgen+haben+ich+nicht
< matches software="LanguageTool" version="3.3-SNAPSHOT" buildDate="2016-02-14 22:01">
< language shortname="de-DE" name="German (Germany)"/>< error fromy="0" fromx="13" toy="0" tox="22" ruleId="DE_VERBAGREEMENT" msg="Möglicherweise fehlende grammatische Übereinstimmung zwischen Subjekt (ich) und Prädikat (haben) bezüglich Person oder Numerus (Einzahl, Mehrzahl - Beispiel: 'ich sind' statt 'ich bin')."replacements="habe ich#hatte ich#hätte ich#haben wir#haben sie" context="Deine Sorgen haben ich nicht" contextoffset="13" offset="13" errorlength="9" category="Grammatik" locqualityissuetype="uncategorized"/>
< /matches>
https://languagetool.org:8081/?language=de-DE&text=Deine+Sarge+habe+ich+nicht.
< matches software="LanguageTool" version="3.3-SNAPSHOT" buildDate="2016-02-14 22:01">
< language shortname="de-DE" name="German (Germany)"/>
< error fromy="0" fromx="0" toy="0" tox="11" ruleId="DE_AGREEMENT"
msg="Möglicherweise fehlende grammatische Übereinstimmung zwischen Artikel und Nomen bezüglich Kasus, Genus oder Numerus."
replacements="Deine Särge"
context="Deine Sarge habe ich nicht."
contextoffset="0" offset="0" errorlength="11" category="Grammatik" locqualityissuetype="uncategorized"/>
< error fromy="0" fromx="6" toy="0" tox="11" ruleId="GERMAN_SPELLER_RULE"
msg="Möglicher Rechtschreibfehler gefunden"
replacements="Sorge#Sage#Sarg#Farge#Marge#Zarge#Sarde#Arge#Sarg-#Karge#Sarges#Sargs#Sauge#Särge#Frage#Lage#Lange#Tage#Sagen#Ware"
context="Deine Sarge habe ich nicht."
contextoffset="6" offset="6" errorlength="5" category="Mögliche Tippfehler" locqualityissuetype="misspelling"/>
< /matches>
11.09.2016 Neues API (JSON)
https://languagetool.org/http-api/swagger-ui/#!/default/post_check hier kann man das JSON-API ausprobieren.
Beispiel https://languagetool.org/api/v2/check?language=de-DE&text=Deine+Sooge+habe+ich+nicht
{"software":{"name":"LanguageTool","version":"3.5-SNAPSHOT","buildDate":"2016-09-10 22:01","apiVersion":"1","status":""},"language":{"name":"German (Germany)","code":"de-DE"},"matches":[{"message":"Möglicher Rechtschreibfehler gefunden","shortMessage":"Rechtschreibfehler","replacements":[{"value":"Sorge"},{"value":"Hooge"},{"value":"Kooge"},{"value":"Soge"},{"value":"Sowie"},{"value":"Folge"},{"value":"Google"},{"value":"Sorgen"},{"value":"Sonne"},{"value":"Sorgt"},{"value":"Song"},{"value":"Droge"},{"value":"Sorgte"},{"value":"Songs"},{"value":"Sog"},{"value":"Sorte"},{"value":"Solle"},{"value":"Boote"},{"value":"Moore"},{"value":"Siege"}],"offset":6,"length":5,"context":{"text":"Deine Sooge habe ich nicht","offset":6,"length":5},"rule":{"id":"GERMAN_SPELLER_RULE","description":"Möglicher Rechtschreibfehler","issueType":"misspelling","category":{"id":"TYPOS","name":"Mögliche Tippfehler"}}}]}
{
"software":{
"name":"LanguageTool",
"version":"3.5-SNAPSHOT",
"buildDate":"2016-09-10 22:01",
"apiVersion":"1","status":""
},
"language":{"name":"German (Germany)","code":"de-DE"},
"matches":[{
"message":"Möglicher Rechtschreibfehler gefunden",
"shortMessage":"Rechtschreibfehler",
"replacements":
[{"value":"Sorge"},{"value":"Hooge"},{"value":"Kooge"},{"value":"Soge"},
{"value":"Sowie"},{"value":"Folge"},{"value":"Google"},{"value":"Sorgen"},
{"value":"Sonne"},{"value":"Sorgt"},{"value":"Song"},{"value":"Droge"},
{"value":"Sorgte"},{"value":"Songs"},{"value":"Sog"},{"value":"Sorte"},
{"value":"Solle"},{"value":"Boote"},{"value":"Moore"},{"value":"Siege"}],
"offset":6,
"length":5,
"context":{
"text":"Deine Sooge habe ich nicht",
"offset":6,
"length":5},
"rule":{
"id":"GERMAN_SPELLER_RULE",
"description":"Möglicher Rechtschreibfehler",
"issueType":"misspelling",
"category":{
"id":"TYPOS",
"name":"Mögliche Tippfehler"
}
}
}]
}
{"software":{"name":"LanguageTool","version":"4.2-SNAPSHOT","buildDate":"2018-04-06 20:01","apiVersion":1,"premium":false,"premiumHint":"You might be missing errors only the Premium version can find. Contact us at support<at>languagetoolplus.com.","status":""},"warnings":{"incompleteResults":false},"language":{"name":"German (Germany)","code":"de-DE"},
"matches":[{
"message":"Möglicherweise fehlende grammatische Übereinstimmung zwischen Subjekt
(ich) und Prädikat (haben) bezüglich Person oder Numerus (Einzahl, Mehrzahl -
Beispiel: 'ich sind' statt 'ich bin').",
"shortMessage":"",
"replacements":
[{"value":"habe ich"},{"value":"hatte ich"},{"value":"hätte ich"},
{"value":"haben wir"},{"value":"haben sie"}],
"offset":12,
"length":9,
"context":{"text":"Deine Sorge haben ich nicht","offset":12,"length":9},
"sentence":"Deine Sorge haben ich nicht",
"rule":{
"id":"DE_VERBAGREEMENT","description":"Kongruenz von Subjekt und Prädikat
(nur 1. u. 2. Pers. od. m. Personalpronomen), z.B. 'Er bist (ist)'",
"issueType":"uncategorized",
"category":{"id":"GRAMMAR","name":"Grammatik"}
}
}]
}
TinyMCE
ControlExpert/languagetool-tinymce
Es gibt ein experimentelles Plugin auf Basis AtD-plugin:
https://github.com/ControlExpert/languagetool-tinymce
Die Popups werden gut gebaut, das Plugin kann aber nur Plain-Text verarbeiten. In CELLstudio kann der LT-Call ausgeführt werden:
- php_curl muss installiert werden
- VAIO PHP 5.4
- ASUS PHP 5.5 (wurde auf Apache umgestellt)
- QUAD
- CmsTiny2004Cell version auf 3.5.6 umstellen
- der Editor funktioniert nicht korrekt (Tools nicht angezeigt)
- LT-Call funktioniert aber (VAio)
Plugin-Einbindung von LT direkt
http://wiki.languagetool.org/integration-on-websites
Beispiel https://www.korrekturen.de/grammatikpruefung.shtml
Funktion unbekannt, vermutlich nur Plain-Text.
AtD-Plugin
Die Verfahrensweise ist relativ überschaubar, jedoch ist die Plugin-Realisierung im tinyMCE keine einfache Sache. Der Code kann aber erfasst und bearbeitet werden.
AtD cms/js/tinymce-3.5.11/jscripts/tiny_mce/plugins/AtD/editor_plugin_src.js
- editor_plugin_src.js enthält plugin.js mit core.js
Senderichtung
- Editorinhalt wird als plain an Service gesendet, getContent({ format: 'raw' }
Empfangsrichtung
- XML wird in Errors und Suggestions geparst
- Ersetzung (markMyWords)
- Inhalt einer node wird in Wörter zerlegt,
- wenn Wörter in Errors enthalten, dann werden sie mit einem span (hiddenSpellError, pre) versehen
- Ersetzung über regexp in nodeValue
- pretoks (vorhergehendes Wort) dient der Ortung der Suggestions
- Bei Klick
- es wird nach Suggestions zum aktuellen span-element gesucht
- Popupmenü neu befüllen und anzeigen
- bei Auswahl Vorschlag wird span ersetzt und span entfernt
Erzeugung der LT-Variante
Senderichtung
- Plain erzeugen
- Tags entfernen, Positionen aller entfernten Tags speichern (Tag: Start, Länge)
- für Tags eventuell Zeichen (Leerzeichen, Komma hinzufügen (Tabelleninhalte, Aufzählungen) Positionen Trennzeichen speichern (Tag: Start, Länge)
Empfangsrichtung
- JSON in Errors und Suggestions parsen
- eventuell können Errors und Suggestions zusammengeführt werden (Ranges)
- plain-Positionen wieder auf Original mappen
- Positionen abspeichern
- Ersetzung (markMyWords)
- Ranges mit einem span (hiddenSpellError) versehen
- Ersetzung über substring im editor-Content
- Bei Klick
- es wird nach Suggestions zum aktuellen span-element gesucht
- Popupmenü neu befüllen und anzeigen
- bei Auswahl Vorschlag wird span ersetzt und span entfernt
Wir arbeiten mit Software von http://www.campus21.de.
Verantwortlich für angezeigte Daten ist der Webdomain-Eigentümer laut Impressum.