This repository contains a Dockerfile to create a Docker image for LanguageTool.
LanguageTool is an Open Source proofreading software for English, French, German, Polish, Russian, and more than 20 other languages. It finds many errors that a simple spell checker cannot detect.
docker pull erikvl87/languagetool
docker run --rm -p 8010:8010 erikvl87/languagetool
This will pull the latest
tag from Docker Hub. Optionally, specify a tag to pin onto a fixed version. These versions are derived from the official LanguageTool releases. Updates to the Dockerfile for already published versions are released with a -dockerupdate-{X}
postfix in the tag (where {X}
is an incremental number).
This approach could be used when you plan to make changes to the Dockerfile
.
git clone https://github.com/Erikvl87/docker-languagetool.git --config core.autocrlf=input
docker build -t languagetool .
docker run --rm -it -p 8010:8010 languagetool
LanguageTool will be started with a minimal heap size (-Xms
) of 256m
and a maximum (-Xmx
) of 512m
. You can overwrite these defaults by setting the environment variables Java_Xms
and Java_Xmx
.
An example startup configuration:
docker run --rm -it -p 8010:8010 -e Java_Xms=512m -e Java_Xmx=2g erikvl87/languagetool
You are able to use the HTTPServerConfig configuration options by prefixing the fields with langtool_
and setting them as environment variables.
An example startup configuration:
docker run --rm -it -p 8010:8010 -e langtool_pipelinePrewarming=true -e Java_Xms=1g -e Java_Xmx=2g erikvl87/languagetool
LanguageTool can make use of large n-gram data sets to detect errors with words that are often confused, like their and there.
Source: https://dev.languagetool.org/finding-errors-using-n-gram-data
Download the n-gram dataset(s) onto your local machine and unzip them into a local ngrams directory:
home/
├─ john/
│ ├─ ngrams/
│ │ ├─ en/
│ │ │ ├─ 1grams/
│ │ │ ├─ 2grams/
│ │ │ ├─ 3grams/
│ │ ├─ nl/
│ │ │ ├─ 1grams/
│ │ │ ├─ 2grams/
│ │ │ ├─ 3grams/
Mount the local ngrams directory to the /ngrams
directory in the Docker container using the -v
configuration and set the languageModel
configuration to the /ngrams
folder.
An example startup configuration:
docker run --rm -it -p 8010:8010 -e langtool_languageModel=/ngrams -v home/john/ngrams:/ngrams erikvl87/languagetool
You can improve the spell checker without touching the dictionary. For single words (no spaces), you can add your words to one of these files:
spelling.txt
: words that the spell checker will ignore and use to generate corrections if someone types a similar wordignore.txt
: words that the spell checker will ignore but not use to generate correctionsprohibited.txt
: words that should be considered incorrect even though the spell checker would accept them
Source: https://dev.languagetool.org/hunspell-support
The following Dockerfile
contains an example on how to add words to spelling.txt
. It assumes you have your own list of words in en_spelling_additions.txt
next to the Dockerfile
.
FROM erikvl87/languagetool
# Improving the spell checker
# http://wiki.languagetool.org/hunspell-support
USER root
COPY en_spelling_additions.txt en_spelling_additions.txt
RUN (echo; cat en_spelling_additions.txt) >> org/languagetool/resource/en/hunspell/spelling.txt
USER languagetool
You can build & run the custom Dockerfile with the following two commands:
docker build -t languagetool-custom .
docker run --rm -it -p 8010:8010 languagetool-custom
You can add words to other languages by changing the en
language tag in the target path. Note that for some languages, e.g. for nl
the spelling.txt
file is not in the hunspell
folder: org/languagetool/resource/nl/spelling/spelling.txt
.
This image can also be used with Docker Compose. An example docker-compose.yml
would be:
version: "3"
services:
languagetool:
image: erikvl87/languagetool
container_name: languagetool
ports:
- 8010:8010 # Using default port from the image
environment:
- langtool_languageModel=/ngrams # OPTIONAL: Using ngrams data
- Java_Xms=512m # OPTIONAL: Setting a minimal Java heap size of 512 mib
- Java_Xmx=1g # OPTIONAL: Setting a maximum Java heap size of 1 Gib
volumes:
- /path/to/ngrams/data:/ngrams
By default this image is configured to listen on port 8010 which deviates from the default port of LanguageTool 8081.
An example cURL request:
curl --data "language=en-US&text=a simple test" http://localhost:8010/v2/check
Please refer to the official LanguageTool documentation for further usage instructions.