Skip to main content

Canonicalization and Darija Representation - Bidirectional transliteration for Darija

Project description

CaDaR: Canonicalization and Darija Representation

PyPI version Python 3.8+ License: MIT

High-performance bidirectional transliteration for Darija (Moroccan Arabic)

CaDaR is a robust, FST-style (Finite State Transducer) transliteration library that provides seamless conversion between Arabic script and Latin (Romanized/Bizi) script for Darija, with text standardization capabilities.

Features

  • 🔄 Bidirectional transliteration: Arabic ↔ Latin
  • 🎯 Darija-aware processing: Moroccan Arabic linguistic patterns
  • 🚀 High performance: Rust core with Python bindings
  • Text standardization: Normalize both Arabic and Latin text
  • 🧪 Well tested: 41 passing unit tests

Installation

pip install cadar

Quick Start

Arabic to Latin (Bizi)

import cadar

result = cadar.ara2bizi("كيفاش داير؟", darija="Ma")
print(result)  # Output: "kifash dayer?"

Latin to Arabic

import cadar

result = cadar.bizi2ara("salam 3likom", darija="Ma")
print(result)  # Output: "سلام عليكم"

Text Standardization

import cadar

# Standardize Arabic (remove diacritics, normalize)
result = cadar.ara2ara("أنَا مِنْ المَغْرِب", darija="Ma")
print(result)  # Output: "انا من المغرب"

# Standardize Latin (fix repeated chars)
result = cadar.bizi2bizi("salaaaam", darija="Ma")
print(result)  # Output: "salam"

Using the CaDaR Class

import cadar

# Create a reusable processor
processor = cadar.CaDaR(darija="Ma")

# Convert between scripts
arabic = processor.bizi2ara("wakha ghir shwiya")
latin = processor.ara2bizi("واخا غير شوية")

print(f"Dialect: {processor.get_dialect()}")

API Reference

Main Functions

  • ara2bizi(text, darija="Ma") - Convert Arabic to Latin script
  • bizi2ara(text, darija="Ma") - Convert Latin to Arabic script
  • ara2ara(text, darija="Ma") - Standardize Arabic text
  • bizi2bizi(text, darija="Ma") - Standardize Latin text

CaDaR Class

processor = cadar.CaDaR(darija="Ma")
processor.ara2bizi(text)    # Arabic to Latin
processor.bizi2ara(text)    # Latin to Arabic
processor.ara2ara(text)     # Standardize Arabic
processor.bizi2bizi(text)   # Standardize Latin
processor.get_dialect()     # Get current dialect

Convenience Functions

# Auto-detect and transliterate
cadar.transliterate(text, target="latin", darija="Ma")

# Auto-detect and standardize
cadar.standardize(text, script="auto", darija="Ma")

Use Cases

  • Chat Applications: Support users writing in both scripts
  • Search Engines: Match queries regardless of script
  • Data Processing: Standardize mixed-script datasets
  • NLP Pipelines: Normalize Darija text for machine learning
  • Language Learning: See connections between scripts

How It Works

CaDaR uses a 6-stage FST-style pipeline:

  1. Script Detection: Identify Arabic, Latin, or mixed scripts
  2. Normalization: Clean and standardize input
  3. Tokenization: Darija-aware word segmentation
  4. ICR Generation: Convert to Intermediate Canonical Representation
  5. Script Generation: Produce target script output
  6. Validation: Apply final fixes and quality checks

The Intermediate Canonical Representation (ICR) is the core innovation - a script-independent phonological representation that enables accurate bidirectional conversion.

Supported Dialects

  • Ma (Moroccan Darija) - Default

Support for Algerian, Tunisian, Libyan, and Egyptian dialects planned for future releases.

Examples

Chat Normalization

import cadar

def normalize_message(text):
    """Normalize user input regardless of script"""
    has_arabic = any('\u0600' <= c <= '\u06FF' for c in text)

    if has_arabic:
        return cadar.ara2ara(text, darija="Ma")
    else:
        return cadar.bizi2bizi(text, darija="Ma")

# Usage
user_input = "salaaaam 3likooom"
normalized = normalize_message(user_input)
print(normalized)  # "salam 3likom"

Search Variants

import cadar

def generate_search_variants(query):
    """Generate search terms in both scripts"""
    processor = cadar.CaDaR(darija="Ma")

    has_arabic = any('\u0600' <= c <= '\u06FF' for c in query)

    if has_arabic:
        return [
            query,
            processor.ara2bizi(query),
            processor.ara2ara(query)
        ]
    else:
        return [
            query,
            processor.bizi2ara(query),
            processor.bizi2bizi(query)
        ]

# Usage
variants = generate_search_variants("سلام")
print(variants)  # ['سلام', 'slam', 'سلام']

Batch Processing

import cadar

processor = cadar.CaDaR(darija="Ma")

texts = ["سلام", "بسلامة", "شكرا", "بزاف"]
results = [processor.ara2bizi(text) for text in texts]

print(results)  # ['slam', 'bslama', 'shokran', 'bzaf']

Performance

  • Fast: ~1-2ms per sentence
  • Efficient: Rust core with minimal overhead
  • Scalable: Linear scaling for batch processing

Documentation

License

MIT License - see LICENSE file for details.

Citation

If you use CaDaR in your research, please cite:

@software{cadar2026,
  title={CaDaR: Canonicalization and Darija Representation},
  author={Ouail LAAMIRI},
  year={2026},
  url={https://github.com/Oit-Technologies/CaDaR}
}

Support


Made with ❤️ for the Darija community by Oit Technologies

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

cadar-0.1.6.tar.gz (63.6 kB view details)

Uploaded Source

Built Distributions

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

cadar-0.1.6-cp312-cp312-win_amd64.whl (837.0 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.6-cp312-cp312-manylinux_2_34_x86_64.whl (946.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

cadar-0.1.6-cp312-cp312-macosx_11_0_arm64.whl (827.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.6-cp311-cp311-win_amd64.whl (836.7 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.6-cp311-cp311-manylinux_2_34_x86_64.whl (946.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

cadar-0.1.6-cp311-cp311-macosx_11_0_arm64.whl (829.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.6-cp310-cp310-win_amd64.whl (836.7 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.6-cp310-cp310-manylinux_2_34_x86_64.whl (946.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.6-cp310-cp310-macosx_11_0_arm64.whl (830.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.6-cp39-cp39-manylinux_2_34_x86_64.whl (946.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

cadar-0.1.6-cp38-cp38-manylinux_2_34_x86_64.whl (946.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

Details for the file cadar-0.1.6.tar.gz.

File metadata

  • Download URL: cadar-0.1.6.tar.gz
  • Upload date:
  • Size: 63.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cadar-0.1.6.tar.gz
Algorithm Hash digest
SHA256 5c2610f7179030d13cf27cf02f616642a038e0100e508509a956f6e9717722be
MD5 959ac5d89ec815664f81c54805798387
BLAKE2b-256 a7f3c912bdc3d54fbf1de61b058593f8cb26529ab689707fa1f7300f7dfbec04

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cadar-0.1.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 837.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cadar-0.1.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5e8ad76abdab10738d684dc01ed263806f397735d601cf4057eee5c4a4758ac6
MD5 ae8d60e69331996eaee625cc8c31afe9
BLAKE2b-256 13c44275f7be1b1d24c20266d6a2e0064295d4239d1d006e32265bde6e68b55e

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0343103e9d13aa4dd540af628ae9015f33a254da56224dc7970f58509c2cb7d8
MD5 9d4d014d134bfdddfa8df6f236b7b438
BLAKE2b-256 311ece27dacd16d73ce94f8646e2b96fd4cd5eb69b29338ed7bc513aa5e7950d

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f8759fe616493793d03853729822a42fef720fabdfc14c19befffc14e09cd0e
MD5 6ea47959f2b68a41e99df233b3de3c37
BLAKE2b-256 a0131c6d1f90cfc7bd25316534dddb8e6b59bde802dbe19b1cfc450da95b556b

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cadar-0.1.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 836.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cadar-0.1.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 315f66173e3047a9cd3de3d83c8c04c82f6338b59d5b608f297cdf98abefb762
MD5 8b9add3503ee920b9d0f00ac18999915
BLAKE2b-256 3f10cd9c6a1a258ad91f5263114a0f9bee7b426d856972d6c66a589d5da4ad9e

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7f8b74bb9d4011b45e0340300237767da6b946b0f40e239822a231c81d43338b
MD5 002703ab05d696540d2366c266c89c7c
BLAKE2b-256 28dee55c219523fd6429f2651afbd9493cf2fee6f5c10090d9a37f8577e9aeed

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02f866d2a60b0cfdaf2fa1ee865ceaf8994a312a8de6a6a23ec7563048df9cc6
MD5 98e74047b82bd0bd76d6e555cb858f66
BLAKE2b-256 2f7fd6b60a7f60f3bb3bc8100cdbb87a2017337ba6009fd1802b97a47d3e3d6b

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cadar-0.1.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 836.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cadar-0.1.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 03ae87bc14cee2a01e1486bf1223f9b6557993e42fbe1ea66bf3274a2899cd6c
MD5 e8e1bb19b39b64f0da46a987767e2781
BLAKE2b-256 a9f36352c23118ed33d160370dc7b21ea88aa4ea5424ddd7f06c6fe062e12880

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3c53ad6f954a825d96c1e4258d81f128564d7c7d8c2d4ffcd3f30bf5d87113fd
MD5 84bdd8c06132549a4e28b85762e36036
BLAKE2b-256 3ff4c2d2190d32baf840074c43ef088342ee78e65c5a6a3b7360beebb1767fa0

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee34d634fe2625043b983a0660511442571df428b02c2d30ec37d5360e1450b8
MD5 cde90ff3edf65558415d073f5dcee057
BLAKE2b-256 f299dfe76e229cef4531390a2e6a7f0229301fec245731b77dc2889ab39d4dc7

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2c9842f785bd7855c4f0d4e417d95615191ca8b6b916aff6f1f8f70ce5f82441
MD5 f093457016d75b68303f4b8d4db76922
BLAKE2b-256 ad4dce58879b9bfbb8aa3fab22e810f2e7d580d08bb3c1d4f7ec08ecdb2ddc33

See more details on using hashes here.

File details

Details for the file cadar-0.1.6-cp38-cp38-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cadar-0.1.6-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 cef3b314e6740583f4468743d163432fc26ca26398cbabc9a3c025d48b2f9e96
MD5 4c5d2fd53e8450afc0aa5497a56be028
BLAKE2b-256 bfb9cdc3e7f8f52e8c4e89f5668fe5189d121f7ffdf7bea13b159018272504a5

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