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.7.tar.gz (64.0 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.7-cp312-cp312-win_amd64.whl (837.2 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.7-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.7-cp312-cp312-macosx_11_0_arm64.whl (827.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.7-cp311-cp311-win_amd64.whl (837.0 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.7-cp311-cp311-manylinux_2_34_x86_64.whl (946.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.7-cp310-cp310-win_amd64.whl (837.0 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.7-cp310-cp310-manylinux_2_34_x86_64.whl (946.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.7-cp310-cp310-macosx_11_0_arm64.whl (830.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.7-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.7-cp38-cp38-manylinux_2_34_x86_64.whl (946.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: cadar-0.1.7.tar.gz
  • Upload date:
  • Size: 64.0 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.7.tar.gz
Algorithm Hash digest
SHA256 a4cada58cc5c0b27b29393484a9d5ca2602c4e2dabecb3bb0ede0084b1560fcd
MD5 a042ad433ca9350cf291c83e1e9a32b1
BLAKE2b-256 f719658d8ef53c5dc687d55dc77267aa3d7e62cb519b1a3520d86b8a252a6ef9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 837.2 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.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a928b5ce1c176f213bb5a96b76ad09ff645b071f0080133c2ac322a8870bf5b6
MD5 3de0ac6b3abce1cd9db959e0f5d564c8
BLAKE2b-256 c8386bae7519abb02fe426f21ef3d61f7e7494d82b84c892e7b39334c628c4e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 162872551c49edf6059ab69461826a4f796f25279716af57eda508a0ab90b6f7
MD5 cb62ae31dda959b19909dfdaf96bdf82
BLAKE2b-256 d1e6ce96e15b78ffd96d7c66119bed50a2a151c6e14133e14921a1463a34d756

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 98796908d0717d0ef588909582f8cd715ef856174e19c306be3ba7cc1371eb73
MD5 6c812f83425b970be86663c38c774fde
BLAKE2b-256 b867de5680d17db06a73db984fbfcc26ef8b1c2ed874a3d2f9680464fe908a3a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 837.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.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 76b8be69c0c71656a77b28f6d7f8efafbffe10d0faf964adb36becbd77d93b47
MD5 2edb15d3104d9e6d753e250545ad0050
BLAKE2b-256 627ee45085e8af28f8ee482e5ba570ab06d57733f43ff16ebb9ef40f669418ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f71f731f34ddc4e4dfb07cb75f556afcf12a7f4a030228c7f8023234b838480f
MD5 5e395886e3a3d4be1cc955f718a6655d
BLAKE2b-256 df44e2cad816aa8300c459cc7c8673836ff4d5d80dd928a2d5b955fe9c87bc56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e06b0451af195678ea9c0b9faa41980ec6812037ea17d0304fcf59d86b1cb2ec
MD5 10953dc89712617762b39bd329a15392
BLAKE2b-256 787b42ccd557f66d3d07e58f70cf0f05e4176544082b4c162bfff8c92807a1f4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 837.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.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1855814b734ac7ac9a1eecda236e190cf73db373c2c55fcf82b6db5f029870a6
MD5 df6785357f02b947b0d7fff1bd01a570
BLAKE2b-256 7b3179ae281ef79370c9a56da733d831c01ab88ea6942f5db821cf423827c661

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7a6547e2596ed75de6f29cfd3ab43c08ed1ee807a81639d004f169ec31487428
MD5 ebf768d870a1d85a81d9de04d73fc3fb
BLAKE2b-256 1b79a7cc49df1e10143f02d8f70870f376d4473cd8750938d8be2c05366abb2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8fa90411f1bafdc32ebecf941276167ddef66eb03a153b6893f31cf8ff8fb9b9
MD5 374d48dd60a815f587d224bcba6970d9
BLAKE2b-256 01aa4bbd481f0b37669576eee96ea535d39b9688b44dd643239364a4c9c2b7ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d67d915157defd5c4b9cd7c70bafb8aee5a321529b415660b58ba5c56aafbc1c
MD5 72c041dcfb34a5ff19b9370dbc4accd7
BLAKE2b-256 9c8d2716681652122da8706f3b9a72b42c646c08d0b030376438334efb4bcb42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.7-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8902140cca9ba50ac1f9ba13b859b990d98c0b3063c724ad7b82e60f6e8568ca
MD5 50045dea877779d2448cb7af35b13410
BLAKE2b-256 ebed46a482269fb6db96339945e207c70f1ce975a03657dbd5806b29f09804ef

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