Deterministic Latin and IPA transliteration for Kazakh, Kyrgyz, Uzbek, Turkish, Azerbaijani, Uyghur, Finnish, plus tokenizer/glue scripts.
Project description
title: Turkic Transliteration Demo emoji: 🌖 colorFrom: green colorTo: green sdk: gradio sdk_version: 5.29.0 app_file: app.py pinned: false license: apache-2.0 short_description: Transliteration of Turkic languages into Latin and IPA
turkic_transliterate
Deterministic Latin and IPA transliteration for Turkic languages, plus helper
utilities for corpus building, tokenizer/LM training, and Russian-token
filtering. Languages are discovered dynamically from rule files in
src/turkic_translit/rules/, so support grows by adding a .rules file.
Supported languages (verified by the test suite): Azerbaijani, Finnish,
Kazakh, Kyrgyz, Turkish, Uyghur, and Uzbek (both Cyrillic and Latin input).
IPA output is available for all of them; Latin output covers Kazakh and Kyrgyz
(plus embedded Arabic-script handling). The batch turkic-translit translit
CLI, the library API (to_ipa/to_latin), and the web demo all cover the
full set — language choices are discovered dynamically from the rules
directory.
Install
This project uses Poetry. Python 3.9+.
# Simplest: the dev setup script (also installs the Windows PyICU wheel)
python scripts/setup_dev.py
# Or with Poetry directly
poetry install
# Or with pip (editable, with dev + web-UI extras)
pip install -e .[dev,ui] # add ,winlid on Windows for the fasttext wheel
Optional extras: dev (ruff, mypy, pytest) · ui (Gradio demo) ·
winlid (Windows fasttext wheel for language ID) · sentry (error reporting).
Windows & PyICU
PyPI rules prevent the correct Windows PyICU wheel from installing automatically
during pip install. After installing, Windows users run:
turkic-pyicu-install
which fetches the right PyICU wheel for your Python version. scripts/setup_dev.py
does this for you.
Package names
- Import path:
turkic_translit - PyPI distributable:
turkic_transliterate - Primary CLI entry point:
turkic-translit
Development
The Makefile wraps the common tasks (all via Poetry):
make check # lint + test (the full gate)
make lint # ruff check --fix, ruff format, mypy --strict
make test # pytest
make web # launch the Gradio web UI
make help # list all targets
On Windows without GNU Make, use the PowerShell wrapper:
./scripts/run.ps1 lint
./scripts/run.ps1 test
./scripts/run.ps1 web
./scripts/run.ps1 help
Type-checking is mypy --strict (config in mypy.ini, scoped to src/).
Formatting and linting are both handled by ruff (ruff format replaced
black).
Command-line tools
Console entry points defined in pyproject.toml:
| Command | Purpose |
|---|---|
turkic-translit |
Transliterate text to Latin and/or IPA (--lang kk|ky) |
turkic-filter-russian |
Drop or mask Russian tokens from a stream |
turkic-download-corpus |
Download/prepare OSCAR corpora |
turkic-build-spm / turkic-train-spm |
Train a SentencePiece tokenizer |
turkic-train-lm / turkic-eval-lm |
Train / evaluate a language model |
turkic-leven |
Levenshtein-based comparison utility |
turkic-web |
Launch the Gradio web demo |
turkic-pyicu-install |
Install the correct PyICU wheel (Windows) |
turkic-translit translit usage
turkic-translit translit --lang kk --in text.txt \
--out-latin kk_lat.txt --out-ipa kk_ipa.txt --arabic
--lang— any ISO 639-1 code advertised by the rules directory (az,fi,kk,ky,tr,ug,uz)--in— input file, or-for stdin (default:-)--out-latin— Latin output path, or-for stdout. Omit to skip. Only meaningful for languages with<lang>_lat.rules(kk,ky).--out-ipa— IPA output path, or-for stdout. Omit to skip.--arabic— also transliterate embedded Arabic script (Latin mode only)--benchmark— log throughput statistics on completion
At least one of --out-latin / --out-ipa must be specified.
--log-level is set on the parent group: turkic-translit --log-level debug translit ....
Tokenizer training
turkic-build-spm --input corpora/kk_lat.txt,corpora/ky_lat.txt \
--model_prefix spm/turkic12k --vocab_size 12000
Filtering Russian tokens
cat uz_raw.txt | turkic-filter-russian --mode drop > uz_clean.txt
Demos via turkic_tools.py
python turkic_tools.py [command]
web— launch the Gradio web interfacedemo— simple CLI demofull-demo— comprehensive multi-language demohelp— list commands
Project Organization
src/turkic_translit/— core package (core.py,transliterate.py,rules/,cli/,web/,lm/, language-ID and filtering modules)data/— sample data and language resourcesdocs/— documentation and setup/troubleshooting guidesscripts/— dev + release utilities (setup_dev.py,run.ps1,release/)vendor/— pre-built PyICU wheels for Windowstests/— test suite (per-language IPA coverage for all supported languages)cronjob/— scheduled-task assets for the hosted demoapp.py— Hugging Face Space entry point for the web UI
FastText language-identification model
Russian-token filtering and language detection use FastText's lid.176.bin.
The model is not committed (too large); it is downloaded automatically from
the official Facebook AI link on first use and cached in the package directory —
no manual step needed for pip installs, Hugging Face Spaces, or CI. Manual
source if needed:
https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin
Logging & error reporting
Central logging supports structured JSON with correlation IDs. Control with
TURKIC_LOG_LEVEL (DEBUG…ERROR) and TURKIC_LOG_FORMAT=json|rich (default
json); libraries can call turkic_translit.logging_config.setup(). Optional
Sentry integration via TURKIC_SENTRY_DSN (+ TURKIC_ENV,
TURKIC_SENTRY_TRACES); install with pip install turkic-translit[sentry].
All I/O is UTF-8; on Windows a BOM is written when piping to files to avoid encoding issues.
Relationship to the LSTM project
This repo is the upstream data pipeline for the Turkic mutual-intelligibility
LSTM experiments (github.com/wagner-austin/LSTM): turkic-download-corpus plus
the IPA transliteration rules produce the per-language IPA corpora that project
trains on.
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file turkic_translit-0.3.9.tar.gz.
File metadata
- Download URL: turkic_translit-0.3.9.tar.gz
- Upload date:
- Size: 97.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b88cd565f92083867180595117e6038895ce700ba8b0213913e75fc18cd69a2f
|
|
| MD5 |
e9903c618c0403259aaea574f3db2ef1
|
|
| BLAKE2b-256 |
ff2afb3d7254c0ccb3140bd6dfca987ac8c83bec1d011b9b61a13579a9ca681e
|
File details
Details for the file turkic_translit-0.3.9-py3-none-any.whl.
File metadata
- Download URL: turkic_translit-0.3.9-py3-none-any.whl
- Upload date:
- Size: 78.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bf059778b4ce485920e26f46ff3d760b7e348d17c1e17b43434c1eecb841a90
|
|
| MD5 |
aa82e82316ae004a062c603e5be02ebf
|
|
| BLAKE2b-256 |
85be28c68bd79f2f9667812fa2f12f467878f4c5a446200b901b521580ffd6c6
|