Skip to main content

A multilingual grammaticality util based on LanguageTool

Project description

LTScore

LanguageTool wrapper for multilingual grammaticality assessment. For Welsh, it uses CySgor, which is based on the Cysill grammar checker, but works with the same principles as LTScore.

Utility

In low resource languages settings, LTScore can be used as a tool to evaluate the grammaticality of generated text, such as machine translation outputs or conversational AIs. From this, it can be used to filter through training corpora (like sorting legit content from cheap autotranslated websites in fineweb), and improve training data quality, or to evaluate the outputs of a model during training or inference when other methods are not available or satisfactory.

Languages supported

LTScore supports the following languages:

  • ar: Arabic
  • ast: Asturian
  • be: Belarusian
  • br: Breton
  • ca: Catalan
  • crh: Crimean Tatar
  • cy: Welsh
  • da: Danish
  • de: German
  • el: Greek
  • en: English
  • eo: Esperanto
  • es: Spanish
  • fa: Persian
  • fr: French
  • ga: Irish
  • gl: Galician
  • it: Italian
  • ja: Japanese
  • km: Khmer
  • nl: Dutch
  • pl: Polish
  • pt: Portuguese
  • ro: Romanian
  • ru: Russian
  • sk: Slovak
  • sl: Slovenian
  • sv: Swedish
  • ta: Tamil
  • tl: Tagalog
  • uk: Ukrainian
  • zh: Chinese

Installation

pip install ltscore

Run the Docker image locally

You can download the LanguageTool image from Docker Hub, then using the port 8010 as indicated below.

docker pull erikvl87/languagetool
docker run --rm -p 8010:8010 erikvl87/languagetool

For more details about the Docker container's configuration, see this link.

LTScore as a CLI

There are two ways to use the CLI, either by entering a text file's path, or directly a text. The CLI returns a string of numbers representing the grammaticality score of the text.

# With a text as a positional character
ltscore -l br "Kalz dud a zo amañ!"
# With a -p or --path flag
ltscore -l br -p ./src/ltscore/assets/text-sample-br.txt 

or alternatively with the pipe operator:

cat src/ltscore/assets/text-sample-br.txt | ltscore -l br

JSON file processing

LTScore can also process some files for short analysis.

Adding LTScore to an existing file

Given a file data.ndjson with the following content:

{"source": "'Mañ an dud o tont.", "target": "Les gens arrivent.", "prediction": "Les gens vient."}
{"source": "Un devezh dilabour eo Lun Fask.", "target": "Le lundi de Pâques est un jour férié.", "prediction": "Le lundi de Pâques ai un jours fériée."}

running ltscore -t prediction -l fr -p data.ndjson and will get the file updated in the following way:

{"source":"'Mañ an dud o tont.","target":"Les gens arrivent.","prediction":"Les gens vient.","ltscore":33.333333333333336,"mistakes_categories":["CAT_GRAMMAIRE"]}
{"source":"Un devezh dilabour eo Lun Fask.","target":"Le lundi de Pâques est un jour férié.","prediction":"Le lundi de Pâques ai un jours fériée.","ltscore":25.0,"mistakes_categories":["CAT_HOMONYMES_PARONYMES","AGREEMENT"]}

Generating a report

Adding the -r or --report flag will generate a markdown report with a KDE plot of the LTScore distribution, descriptive statistics, and an analysis of sentences based on the mistake categories. The report will be saved in the same directory as the input file with the name ltscore_report.md. To use it on the file available in src/tests/fixtures/text-sample-br.ndjson, which analyzes a breton texts, you would run:

# Make sure you have pandoc installed in your system to generate the report in PDF format!
ltscore -rt prediction -l br -p tests/fixtures/openai-whisper-large-v3--cv-25.0-2026-03-09-br.jsonl

You would then get a report in the same directory as the input file with the ending ltscore_report.md containing a KDE plot of the LTScore distribution, descriptive statistics, and an analysis of sentences based on the mistake categories.

LTScore as a library

One can also use this package as a python library:

from ltscore import get_score, get_mistakes

# get the scores
df["scores"] = df.apply(lambda row: get_score(row["text"], language=row["language"]), axis=1)
# returns a list of mistakes for each text
df["mistakes"] = df.apply(lambda row: get_mistakes(row["text"], language=row["language"]), axis=1)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ltscore-1.2.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ltscore-1.2.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file ltscore-1.2.0.tar.gz.

File metadata

  • Download URL: ltscore-1.2.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ltscore-1.2.0.tar.gz
Algorithm Hash digest
SHA256 b3501eecc3dfe4ce8cee603e4f0dac152db763524da9c8f5a611777dbde502c6
MD5 1460fd79f3ae1e0cfc80d3b8ff56269e
BLAKE2b-256 e654d2edd8a1c06c9be2604903579c1882919f3cad2ed9e01f7f372b3e9499aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for ltscore-1.2.0.tar.gz:

Publisher: publish.yml on Cymru-Breizh/LTScore

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ltscore-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: ltscore-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ltscore-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 57dd5ba3576fd3276f70b9a7b0859d9c08c395f7d10d01538578dd65c6f6646f
MD5 b1573202d207ec1d09c69211aa00ea56
BLAKE2b-256 ddcb2d35794bfc7988fbc05948cbfaeda3874deddd924fe508fcb79f8225a33f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ltscore-1.2.0-py3-none-any.whl:

Publisher: publish.yml on Cymru-Breizh/LTScore

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page