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.3.tar.gz (58.1 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.3-cp312-cp312-win_amd64.whl (836.3 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.3-cp312-cp312-manylinux_2_34_x86_64.whl (946.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

cadar-0.1.3-cp312-cp312-macosx_11_0_arm64.whl (829.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.3-cp311-cp311-win_amd64.whl (836.0 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.3-cp311-cp311-manylinux_2_34_x86_64.whl (946.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

cadar-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (831.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.3-cp310-cp310-win_amd64.whl (836.0 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.3-cp310-cp310-manylinux_2_34_x86_64.whl (946.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (831.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.3-cp39-cp39-manylinux_2_34_x86_64.whl (946.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

cadar-0.1.3-cp38-cp38-manylinux_2_34_x86_64.whl (946.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: cadar-0.1.3.tar.gz
  • Upload date:
  • Size: 58.1 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.3.tar.gz
Algorithm Hash digest
SHA256 fffc091be0e1c2ca70f85e16c5d1eec22c7a81f6db00beceb34eab0c6301bdf2
MD5 5eaa8cc6856b1fda8bca2033185e1b13
BLAKE2b-256 1b50993c5c02e8e519911d881699f8e12abf83bd83ae4a4200e77e6bb305eae9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 836.3 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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 23c96569d7b32258fc9eec90cf3ef986535ef05b17712e57567b913beb14f286
MD5 cdc114ea050650aa57ab954e758e29f1
BLAKE2b-256 bc9f84c7440e1a978a942a70dc2e8095b46e21f3b0ad5f87dbc33df288572e83

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9f5f46dccda27378cd2de5e300eb6473401a6c9aa02428c0ecd6a0a40fd5fdee
MD5 63b3c935609c491a0bf5b15efa5debf8
BLAKE2b-256 70dc8ac7a8ced2dee1f59a8916c95254396a227ea224e2b82d0bf7cef28cfee5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 22fde5a7a3a1d09ab284383b67262b13ccf0392f3136e1b216a7402cdc6c487a
MD5 8e8fefe73844aece1dbb40983260dfe6
BLAKE2b-256 88de12bd8166d8a9d2479a34b37d665a8e1f0a14364e41673b460ad7e6a4f92b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 836.0 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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 65b1d61098254bad4112d427fd1cb454249a722391748ead86b2899411ebd8df
MD5 c99077ccf4e6616553bcb1dff1912076
BLAKE2b-256 86ea9cb204c271c2510a002bf54a44293a79b0fe793babfb545d127ebe5e83fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e29f0698c305104d52d520683bb1b1029bddbe73bb3eb206718fa9803de5d64c
MD5 932e576e832a36495db516e81ca32554
BLAKE2b-256 7ef6ea0fd3a10efac95aab413749912ce95551c73510ecd2a158ce65cc59d8c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 107e31423127cf8f97ac219cdf3e3bf00777d629a9b2eb50e173c40108ad944b
MD5 5e061ebb1cff39748c274aebaf14bb62
BLAKE2b-256 ac8b02ebd66f8972cc699e8799b35ea49b3e4f7d9e226ff82227b0fea16db538

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 836.0 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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 663a84e98b1d98c71ebbb36fda3f8ad4df90e15bd95c48604776d3429a011c26
MD5 5282abc10ffce620dfb79de2ee9666ca
BLAKE2b-256 187d7c136b1dc3bc6451835816116ecc7e0516fc038fb6260d1fb69dd9aa1b88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4831eb53fad373f578c58820e64dd9bec01acbc0ba7590fe9668bf4e145b4acc
MD5 6ad9b9888d188acedd406223fe936738
BLAKE2b-256 691f9d5295aa4f4dafe9d9f5447f255c56932731984918cf950c6aa68b9e3557

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e6055bcb322ce63f1bba83c24bdd496d317adb6eafe811b7d5e2703a910d2fd
MD5 932a8afa736c175430313d0dfa691113
BLAKE2b-256 15cba871d331758e88d45c8d49988029869aa7656d168ac2a7f020a22c02ed32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3bba8d5be23a353a63074e56c1194b923c3010b2b0e12ed4650c073bbca3d3cb
MD5 3eb0d22c2a8a4279ef92aedd0278e1fe
BLAKE2b-256 ff5efe932c69b80e00e0416b4ccb50c6df80cd0017118c473d080f2da2bab8f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.3-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 dab47476dd15209402b7d8dda52e5446a6165a65db8763357dccc401cf395e73
MD5 6357ccfc1662eb153521d4a895d3fedc
BLAKE2b-256 5a277ad323f2e0feadf5cea157c682fcb9608d49c7d9d86d2732da564cd2b8ea

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