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.8.tar.gz (65.5 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.8-cp312-cp312-win_amd64.whl (839.0 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.8-cp312-cp312-manylinux_2_34_x86_64.whl (948.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

cadar-0.1.8-cp312-cp312-macosx_11_0_arm64.whl (828.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.8-cp311-cp311-win_amd64.whl (838.7 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.8-cp311-cp311-manylinux_2_34_x86_64.whl (947.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

cadar-0.1.8-cp311-cp311-macosx_11_0_arm64.whl (832.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.8-cp310-cp310-win_amd64.whl (838.8 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.8-cp310-cp310-manylinux_2_34_x86_64.whl (947.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.8-cp310-cp310-macosx_11_0_arm64.whl (832.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.8-cp39-cp39-manylinux_2_34_x86_64.whl (948.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

cadar-0.1.8-cp38-cp38-manylinux_2_34_x86_64.whl (948.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: cadar-0.1.8.tar.gz
  • Upload date:
  • Size: 65.5 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.8.tar.gz
Algorithm Hash digest
SHA256 622013181740febf6228a52f77ae757395ef54074d1b5c186c0ac09ddf174aa9
MD5 09e5e4afce5872ff3631fd2d629f5d26
BLAKE2b-256 fee872f7fc139f1b0a91b380f4e6b4da72705d9d0d1588b25108b71b17b7db19

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.8-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 839.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.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a45535411aeb799cbc2dd1107dede5233d3a6fd7f303ad167357a4acb2c0e3e1
MD5 b2149568605431f1d63a6d678a8e3bf1
BLAKE2b-256 1bd9c415c58182f1919b5ea108d08d8a5d3e10f97743dc7ed84c75210aabfae1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 374fe53813d395b4b2b0f339976af6161a67916fc5eaa8efb2f7ae67c6c205c2
MD5 c33827bbe3a53b1935adfc131a1b425b
BLAKE2b-256 763a7bfde75aacd9340df06d529f0a99d6d1750117278ac858e94d0b6a936f14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f70dc4f23d4a388a65ead195ce781260334725671d8a7bdc746205913a47bdc4
MD5 56139ec531550283318054b547358cb9
BLAKE2b-256 5ad67421987d4c66a8f63ff5fab8d482a58c7b7e2440e6975e11280251617016

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.8-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 838.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.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d760c7394c52d00368267da02b93406d02de37fe14ae79fba232b29f45d8e912
MD5 afd37a77de7b314e44f1b29d74c3f493
BLAKE2b-256 289e09dddc937ea17ad52f92d603228e786d73e9555e8af3b7e39e013352a01b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 060b9e78431d59dcb08129e31fcccbe5cc533fe7b53a94a5ef1e4ff7f31fafd1
MD5 37ea0c486788ba7a6437f61f1756b80b
BLAKE2b-256 da0e6844f2b18323876b068f2aa639f3b644c506ee1acb36fdf212e18f8a529f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b8c4f254194185b66aa03d8dd59b88a8e39415e00e638179abeb4ee471a9f9f
MD5 e573a1fe8ef0bc872ccb48ad6dc99c7b
BLAKE2b-256 ceb8b9e65a31da2b3fd233d2e8c1137db572676c2c10dda4e94e3dff5c824ab5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.8-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 838.8 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.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d88d3f43419460075729ca70c46aa79ce3e8121705651656329d46392a81aaae
MD5 41420fbe15af7f4811dbce5f31481539
BLAKE2b-256 d97e4a4de4b06786fae5a91c45a090a1fed82680de612736fda82f1e85142bd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1ba891e7dbe864f5f307d4f0923bf3864227ac23d89e50e81a61db273daaa0f0
MD5 762b1deb8f21bab7a3c010a4a84543b2
BLAKE2b-256 988253ff8033b18453aa022f6a23bb2f3a9b81fc90286679b08f68f6edb383a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c4ce34aa87ac88398988610cfb5ce1bbadc34769060f75e721042f07162d60a
MD5 d07bef8727d3bf68b4dcb428683f5808
BLAKE2b-256 80a357ed91b7c85689ff0f4198393d8a0f5b6912cc309f33aefb4d7ddde29c90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5aa969948d8faef0054ac853755cd463d13e02a5503251385103d796cb80f0ea
MD5 23be74e4d19d1577e3f301c3fef83c71
BLAKE2b-256 035a35ab0bad684fa1b5d318418f93c9c1db7ea732d881aa14b78caaf5a0d7a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.8-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3bc9827cceeb6f535f0dad0d751ad990dbfef7c7e80f3d52403c29968c360e46
MD5 282531111dc94ff54e9a5896aa249b47
BLAKE2b-256 6428e44db4975230bb19fbccf83af44db48f2863520810d62b8a324652ada1ca

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