Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

text2tashkeel

text2tashkeel restores the missing vowel marks (tashkeel) in Arabic text. It is not one model but a model picker: a single small API over interchangeable diacritization models, all running on onnxruntime. It needs no PyTorch and no API keys, and it works offline by default. Pick the model that fits your accuracy, speed, or size budget. The only runtime dependencies are numpy and onnxruntime.

from text2tashkeel import Diacritizer
Diacritizer().diacritize("بسم الله الرحمن الرحيم")              # default model - 2.04% DER
Diacritizer("rawi-v2-int8").diacritize("بسم الله الرحمن الرحيم")  # lean single model

Most diacritizers add only the short-vowel marks, and only to text that is already spelled correctly. The default rawi models also restore the hamza (ء) and the silent dagger-alef, so they fix real, inconsistently spelled input, such as a bare ا typed for أ, not just clean text. See what makes rawi different for the reasons and the method.

Install

pip install text2tashkeel

The wheel is small (about 10 MB). It bundles the best models, and these work fully offline, with no downloads and no torch. The full-precision (fp32) variants are fetched from Hugging Face on first use, if you opt in:

pip install text2tashkeel        # int8 + flagship, offline
pip install text2tashkeel[hf]    # + auto-download fp32 models on demand

Without [hf], asking for a non-bundled model raises a clear message with its Hugging Face link. You can also point at your own model, such as one trained on a different corpus, with register_model(...). See below. For development, run pip install -e ".[test]", then run pytest.

Models

Two models cover almost every use. Both ship in the wheel and run offline.

Use case Model DER ↓ latency size
best accuracy (default) rawi-ensemble 2.04% ~2 ms 4.9 MB
fastest & smallest rawi-v2-int8 2.30% ~1 ms 2.5 MB

22 model configurations are available for comparison, research, or special cases: the rawi family (V1/V2/V3 + INT8), two independent diacritizers (bilstm and libtashkeel), and gated ensembles of them.

from text2tashkeel import available_models, Diacritizer
available_models()                 # all models
available_models(bundled_only=True)  # the models that ship in the wheel (offline)
Diacritizer("rawi-v2-int8").diacritize("بسم الله الرحمن الرحيم")

available_models(bundled_only=True) lists the models that ship in the wheel. Everything else downloads from Hugging Face on first use, with [hf] installed. Each model's weights live in its own repo (rawi, rawi-v2, rawi-v3, rawi-ensemble, bilstm, libtashkeel), grouped in the Arabic Diacritizers collection.

If you trained a diacritizer on a different corpus, point at it:

from text2tashkeel import register_model, Diacritizer
register_model("my-rawi", "my_model.onnx", "my_vocab.json", arch="rawi")  # or arch="rawi-v3"
Diacritizer("my-rawi").diacritize("نص عربي")

Diacritizer is callable (d("...")) and lazily builds one onnxruntime session, which it reuses. Construct it once, then call it many times. For full credits and licenses for every model, see docs/07-credits-and-license.md.

CLI

text2tashkeel "الحمد لله رب العالمين"          # flagship default
echo "محمد رسول الله" | text2tashkeel
text2tashkeel -m rawi-v2-int8 < input.txt > output.txt

Benchmarks

Measured DER/WER for every model across the corpus's train/test/val splits is in benchmarks/.

Related projects

  • phoonnx — offline text-to-speech, which reads diacritized text for pronunciation.

License

Apache License 2.0. See LICENSE and docs/07-credits-and-license.md for the license of each bundled model.

Download files

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

Source Distribution

text2tashkeel-0.3.0a2.tar.gz (10.5 MB view details)

Uploaded Source

Built Distribution

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

text2tashkeel-0.3.0a2-py3-none-any.whl (10.5 MB view details)

Uploaded Python 3

File details

Details for the file text2tashkeel-0.3.0a2.tar.gz.

File metadata

  • Download URL: text2tashkeel-0.3.0a2.tar.gz
  • Upload date:
  • Size: 10.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for text2tashkeel-0.3.0a2.tar.gz
Algorithm Hash digest
SHA256 5260d51f3af3304cf2e814bad3f0ca0af89445bcd0ebed251444f34a4d42897b
MD5 0f0e2e9baca98659ea47f544068b5eb6
BLAKE2b-256 6b5b926f2032de0a2fd30c6ed03cc35df838d0ccd0c3aad9eff9b2d3c7079209

See more details on using hashes here.

File details

Details for the file text2tashkeel-0.3.0a2-py3-none-any.whl.

File metadata

File hashes

Hashes for text2tashkeel-0.3.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 6e746a7eaf3cb8282c88dbb330a8cb222d85bd3de5df668891288e8cae64ced8
MD5 8d213ac2d9cdbd37968539435e6693e2
BLAKE2b-256 286a05600191114c367dc612dfaaaad4fc097b8fb22763e0135f3715817bd57c

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 Sentry Error logging StatusPage Status page