Skip to main content

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 interface
  • demo — simple CLI demo
  • full-demo — comprehensive multi-language demo
  • help — 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 resources
  • docs/ — documentation and setup/troubleshooting guides
  • scripts/ — dev + release utilities (setup_dev.py, run.ps1, release/)
  • vendor/ — pre-built PyICU wheels for Windows
  • tests/ — test suite (per-language IPA coverage for all supported languages)
  • cronjob/ — scheduled-task assets for the hosted demo
  • app.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


Download files

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

Source Distribution

turkic_translit-0.3.9.tar.gz (97.1 kB view details)

Uploaded Source

Built Distribution

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

turkic_translit-0.3.9-py3-none-any.whl (78.1 kB view details)

Uploaded Python 3

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

Hashes for turkic_translit-0.3.9.tar.gz
Algorithm Hash digest
SHA256 b88cd565f92083867180595117e6038895ce700ba8b0213913e75fc18cd69a2f
MD5 e9903c618c0403259aaea574f3db2ef1
BLAKE2b-256 ff2afb3d7254c0ccb3140bd6dfca987ac8c83bec1d011b9b61a13579a9ca681e

See more details on using hashes here.

File details

Details for the file turkic_translit-0.3.9-py3-none-any.whl.

File metadata

File hashes

Hashes for turkic_translit-0.3.9-py3-none-any.whl
Algorithm Hash digest
SHA256 1bf059778b4ce485920e26f46ff3d760b7e348d17c1e17b43434c1eecb841a90
MD5 aa82e82316ae004a062c603e5be02ebf
BLAKE2b-256 85be28c68bd79f2f9667812fa2f12f467878f4c5a446200b901b521580ffd6c6

See more details on using hashes here.

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