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={Oit Technologies},
  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.5.tar.gz (62.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.5-cp312-cp312-win_amd64.whl (838.6 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.5-cp312-cp312-manylinux_2_34_x86_64.whl (947.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

cadar-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (830.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.5-cp311-cp311-win_amd64.whl (838.4 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.5-cp311-cp311-manylinux_2_34_x86_64.whl (947.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

cadar-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (832.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.5-cp310-cp310-win_amd64.whl (838.6 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.5-cp310-cp310-manylinux_2_34_x86_64.whl (947.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.5-cp310-cp310-macosx_11_0_arm64.whl (832.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.5-cp39-cp39-manylinux_2_34_x86_64.whl (947.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

cadar-0.1.5-cp38-cp38-manylinux_2_34_x86_64.whl (947.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: cadar-0.1.5.tar.gz
  • Upload date:
  • Size: 62.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.5.tar.gz
Algorithm Hash digest
SHA256 5b23c1595accd4b0b9d9bb8c061114299a97cb765a65bf0bcd8c097c72fbe58f
MD5 7314ae4a6853d3a5ce0a8d047b17c398
BLAKE2b-256 134aa6d5fab252b6535aae95ecdaaec1deb2caf54502423e128f4015c89c1b72

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 838.6 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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 229105c491915df563f76002975bd0eb43aebf1c6f268d998e13c6f77a798eee
MD5 8791710504561abe2bf6817654b1a0b8
BLAKE2b-256 ce74fb90184ac748a8e36eebeccf5de6bafa94ecc597fbc56b45ff5ae8b7f6f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8dd617a442face6cea7cf5842bce852999a1364731f7df9a41b3b7692df5ed34
MD5 d76a6d155dadb4b3357e6c5ec59a1dc0
BLAKE2b-256 765b5d8538bc5c07f7b0d391dacea558a6c7499030b46def792cf441065ba54b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bd5b68ccb6039d045d9efe4f0b7e4c816dd98a4b7a96a82146c86026e83948be
MD5 ba42c9418206eac0325eae1ddc059a25
BLAKE2b-256 f36462907af971f892542353f2c5decf7236d9924136c0a768ed66b4af42712f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 838.4 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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ca2c9cff5b933d430c824f38de546e8bc1cd44c418b2052509f7390ff50b341b
MD5 119d24f7509532ba6eb54d4e75758f5d
BLAKE2b-256 1038a607164cc9d4883a2d66f3ba1f431bf33b0bfe80a9b4be31c78c6ccfa10b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9a695f62173d678f11d08f632451150c2a34397579d77be42371830917fdea40
MD5 399788704454b63ffdcb2efc897a7500
BLAKE2b-256 c499141b409bea19a1f3b38d774d31d0cd6c489b25b34744b1275511b9e9c29b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 660c6773cea887f023f85a92fd7a74d07ab9517a0a59a82747cda95c2f78895e
MD5 7ad3c4825707dfb15d96fa9be05cdf86
BLAKE2b-256 b815f11b33630cd78e47c6521194a2f93a28b3778a854d8ee808aa356430db70

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 838.6 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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 00a7840e5905feed4ff3b816b08ce99ff283190a27cbacec177d7b5755d69816
MD5 8e1545a5bdc843571b00888014953dd5
BLAKE2b-256 736d471870a61dae6451fbd74a2ef6bd2b96d299ebde6302f920dc06bfc925e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3eca6658017c55cf547fb948e4ea0a821b826765703983f5005f6a94e681b1c1
MD5 a900882764a07f06d0f76e3a7d019de7
BLAKE2b-256 5a4a41d0ff8456d44526c388210d1f589e7cad19738d6ef545a9ddb84303dd8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 841757aa9c2e9b67b7f4342b27b5cf254146319e56aa59909ac1f758298b1408
MD5 5105a30a73424d5dcd780a8a2509d482
BLAKE2b-256 75d9dcc58b837331f720420c833ca2a19770726a8f0aa01795d7d4d72611e25a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b8f6efbafb8a5708747dba76609f0f2a329afcf713231d9a5a59751b6b387442
MD5 11678704f5eac261a9fceddd95b35b5c
BLAKE2b-256 90f4201844d8dd496b83401ac4d528f1361b511f71e440aa76e5eb19d2ac9800

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.5-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1d2bc03dc324b158dff5af874bd2476d907a06244fe98ec2b5f3f3bee281709d
MD5 43775b856588c1e408f84e1df72710da
BLAKE2b-256 00bd0f40b545c47d2692db7c451348a9d2f99b43a125d204ce8998edcbcb993e

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