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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5260d51f3af3304cf2e814bad3f0ca0af89445bcd0ebed251444f34a4d42897b
|
|
| MD5 |
0f0e2e9baca98659ea47f544068b5eb6
|
|
| BLAKE2b-256 |
6b5b926f2032de0a2fd30c6ed03cc35df838d0ccd0c3aad9eff9b2d3c7079209
|
File details
Details for the file text2tashkeel-0.3.0a2-py3-none-any.whl.
File metadata
- Download URL: text2tashkeel-0.3.0a2-py3-none-any.whl
- Upload date:
- Size: 10.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e746a7eaf3cb8282c88dbb330a8cb222d85bd3de5df668891288e8cae64ced8
|
|
| MD5 |
8d213ac2d9cdbd37968539435e6693e2
|
|
| BLAKE2b-256 |
286a05600191114c367dc612dfaaaad4fc097b8fb22763e0135f3715817bd57c
|