Wat is LanguageTool?
LanguageTool is open source proeflees-software voor Engels, Frans, Duits, Pools, Russisch en meer dan twintig andere talen. Met deze tool kun je veel fouten vinden die een eenvoudige spellingcontrole niet kan detecteren. Dit bericht vertelt je hoe je LanguageTool zelf kunt hosten met behulp van een Docker container en legt uit hoe je de opdracht aan de API moet geven om de tekst te laten controleren op spelfouten.
Het is de missie van LanguageTool om de professionele schrijfvaardigheid van de gebruikers te activeren. Hierbij gaan ze verder dan grammatica en spelling met een op AI gebaseerde technologie die de stijl, toon en typografie van de tekst bekijkt en meteen op de inhoud afgestemde suggesties geeft.
Een team van experts voor kunstmatige intelligentie en professionele taalkundigen vanuit de hele wereld maken het product elke dag nog beter om de beste taalcorrector te maken die u op het web kunt vinden.
Het begon allemaal in 2003 als een opensourceproject dat steeds meer gebruikers, bijdragers en aanhangers kreeg. Het project veranderde gaandeweg in een dienst die elke dag miljoenen gebruikers helpt bij het verbeteren van hun schrijfvaardigheid.
Selfhosted API van LanguageTool met Docker
Met een Docker hub image van LanguageTool is een Docker container eenvoudig te installeren. Wil je Portainer via Docker installeren zonder terminal? Ben je de ingewikkelde handleidingen beu? Wil je iets snel en gemakkelijk? Lees dan deze installatiehandleiding van mariushosting om Portainer als chassis voor de Docker containers toe te passen.
Zet een stack op die de image voor LanguageTool downloadt en de container bouwt en vervolgens start. Vergeet niet om twee mappen ngrams en fasttext aan te maken onder een nieuwe map languagetool op de gedeelde map Docker. Maak een Reverse Proxy aan onder de naam (voorbeeld) languagetool.jouwdomein.nl. Geef deze een bepaald poortnummer (hieronder: 8014, maar kan ook een ander nummer zijn) zodat de applicatie ook van buiten het netwerk van de NAS te bereiken is.
version: "3.9"
services:
languagetool:
image: meyay/languagetool:latest
build: .
container_name: languagetool
restart: unless-stopped
mem_limit: 3g
cpu_shares: 1536
cap_drop:
- ALL
cap_add:
- CAP_SETUID
- CAP_SETGID
security_opt:
- no-new-privileges
ports:
- 8014:8010
environment:
download_ngrams_for_langs: en,nl
langtool_languageModel: /ngrams
langtool_fasttextModel: /fasttext/lid.176.bin
JAVA_XMS: 512m
JAVA_XMX: 2048m
TZ: Europe/Amsterdam
MAP_UID: 1026
MAP_GID: 100
volumes:
- /volume1/docker/languagetool/ngrams:/ngrams
- /volume1/docker/languagetool/fasttext:/fasttext
Zoals gezegd krijg je met de reverse proxy languagetool.adagia.eu toegang tot de API van LanguageTool. API staat voor “Application Programming Interface”. Een API maakt communicatie mogelijk tussen verschillende (software) applicaties/programma’s. Door een API hoef je niet te weten hoe een applicatie werkt en toch kun je ermee communiceren.
Ik had al eerder gewerkt met een API voor het ophalen van de weerdata van weerstation P41_Ermelo. Met een GET-verzoek kan ik, simpel gezegd, de weerdata uit de database van weather.com ophalen. GET verzoeken zijn een vorm van HTTP-methoden, maar kun je ook terugvinden in de JavaScript taal.
Werken met POST verzoeken
Iets lastiger is het opzetten van een POST verzoek. Dit is een manier om gegevens met behulp van internet naar een bestemming te verzenden. In dit geval wil ik een POST verzoek in JavaScript maken om tekst te laten controleren via de API van LanguageTool. Wanneer ik de API wil laten weten dat ik informatie wil verzenden, dan moet ik dus een POST-verzoek naar de server sturen, in dit geval languagetool.adagia.eu. Nadat mijn verzoek is verwerkt, ontvangt de server mijn gegevens zoals bedoeld. De vraag is op welke manier moet ik de gegevens naar de API toesturen zodat de server het verzoek kan lezen en verwerken?
Daarvoor is het nodig om de handleiding van de API te lezen. Voor LanguageTool is deze hier te vinden. Met een voorbeeld kun je de opdracht samenstellen om een succesvol POST verzoek te kunnen indienen. Als voorbeeld heb ik een POST verzoek dat met behulp van de handleiding als volgt eruit ziet:
curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' -d 'text=te_controleren_tekst&language=nl-NL&enabledOnly=false' 'https://api.languagetoolplus.com/v2/check'
Dit verzoek kun je plakken in de terminal van de NAS. Hiervoor heb je toegang nodig tot het operating system van de NAS, de Linux omgeving waarin de besturing van de NAS geprogrammeerd is. Wil je weten hoe je toegang krijgt tot de NAS, lees dan dit bericht.
Na het indienen van het verzoek volgt het antwoord met suggesties voor tekstverbetering…. echter helaas in JavaScript notatie. Ik wil een leesbaar lijstje hebben van spelfouten en voorstellen voor verbetering.
De curl-opdracht is in JavaScript niet beschikbaar, wel een vergelijkbare opdracht die XMLHttpRequest heet. De vraag is hoe de bovenstaande curl opdracht vertaald moet worden naar de taal van JavaScript. Gelukkig zijn er diverse sites die conversie mogelijkheden aanbieden tussen verschillende softwaretalen. Ik heb hierbij gebruik gemaakt van curlconverter.com. Dit geeft me de juiste parameters om het POST-verzoek in de juiste notatie aan te bieden, met de passende headers en de bijbehorende verzoeken. Nu kan de API-server (i.c. de Docker container LanguageTool, die ik zelf host op de NAS) de gegevens goed verwerken en een antwoord geven. Het script is hier te downloaden.
Controleer spelling met LanguageTool API via languagetool.adagia.eu
Voer in de tekstbox de tekst in of plak de tekst die je wilt laten controleren op spelfouten.
Als je grote lappen tekst invoert, dan kan het enkele seconden duren voordat een antwoord verschijnt.
Beschikbare talen in LanguageTool
Wil je meer weten over de talen die beschikbaar zijn in LanguageTool? Klik op de knop hieronder om een lijst te maken van de talen waarop je spellingcontrole kunt uitvoeren.
LanguageTool is een op kunstmatige intelligentie gebaseerde spellingcontrole. De tool denkt iets verder na dan de gebruikelijke spellingcontrole suggesties van bijvoorbeeld Office producten (zoals Word). Zo is het begrip ’tweede kamer’ goed Nederlands. Daarnaast zal LanguageTool de suggestie doen of de schrijver niet bedoeld heeft ‘Tweede Kamer’. Het is dus een slagje moderner. En voor de NAS-liefhebbers is het leuk dat je de tool zelf kunt hosten.