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.4.tar.gz (59.2 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.4-cp312-cp312-win_amd64.whl (838.3 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.4-cp312-cp312-manylinux_2_34_x86_64.whl (947.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

cadar-0.1.4-cp312-cp312-macosx_11_0_arm64.whl (830.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.4-cp311-cp311-win_amd64.whl (838.1 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.4-cp311-cp311-manylinux_2_34_x86_64.whl (947.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

cadar-0.1.4-cp311-cp311-macosx_11_0_arm64.whl (832.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.4-cp310-cp310-win_amd64.whl (838.2 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.4-cp310-cp310-manylinux_2_34_x86_64.whl (947.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.4-cp310-cp310-macosx_11_0_arm64.whl (832.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.4-cp39-cp39-manylinux_2_34_x86_64.whl (947.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

cadar-0.1.4-cp38-cp38-manylinux_2_34_x86_64.whl (947.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: cadar-0.1.4.tar.gz
  • Upload date:
  • Size: 59.2 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.4.tar.gz
Algorithm Hash digest
SHA256 833a83ef3d4c7fda427711178f2f55475e0ff155c7345369188cc397f665eb43
MD5 7b1e6bb03c6cd78bc57ce09851c3ec08
BLAKE2b-256 7fbb5ade8c1cda51d62be3fe2b246763cadd4d272f0b222f37d6e9ffca609257

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 838.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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cb866d8c3ca33d5c940a0d003d197bbd591defb0b3b9f3a97dd31d6ca40831c5
MD5 5dc200164456a6ef96eb27fb7453131e
BLAKE2b-256 d59537a6d29a5dc3c52b73cd4360239d37cd2dafe60c69751d04902792a559ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5602a38b8ecc5842450d11225d9e675ea17c923e4cd6fe2b0d0b52238ad9ecd8
MD5 3c5f8ebbc20e227713369543b9d28aa5
BLAKE2b-256 f10aac6d9da7dd298d78f9308558a20bd4d78f822f7ad70309ebafeb2786196f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6410923c6582dff06870238f798db87d7b94b5afb5b748bc8d7bb08bf7595064
MD5 ba0327bd96671d52fe48bce7e75acfdd
BLAKE2b-256 c02841b00597ca4d37c2d409bb8cd41d7990490fb1abb1b63ca5f707eb8790c0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 838.1 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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ed71423bab52d0be18124f135c5e0cab361959a4a98eab3e26979057fb8b2e02
MD5 71836150f84d1d3285a18b2a917e2a0b
BLAKE2b-256 ba4fa61cb843c1f0d35a3e034f5c0159fab7e787468b4331f0a81fc59907658c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b8e5e8ade574f0570fd1aaabb34b9d5c7f4c2cc36bc4f5ca69a292af80024224
MD5 f86d8f72ac77e09d4afc54285357870b
BLAKE2b-256 ca8716dd59aaab435b03a56af5cfdbb6cc0183e16100a93ad9297b2fc3280cba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88ff057b2a9289807afb46f1cc4c48e850c51d173411c508fcec2c4232e4dfb4
MD5 c7eccf88f908868276bfd43fe639d157
BLAKE2b-256 754668cb127385a13bc8b9b9bfe49d1a880dece4f9e0cd97d59039cc2e6f3a3b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 838.2 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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 809fdcd3d9f45bfaf529db64e1b84e22936c147b50ebdb39751d92fdb6a7a5c0
MD5 f3476104e9ce2239e29e09f5008525ad
BLAKE2b-256 562b22d474666cf9cb240eab08e55b7013f29ba365608bebfc214c421b771ecd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d30da6bae4b62209362a9b00efd19c0b953db9b08530deb0709b9cfccedeb03c
MD5 4f88c75ea7fd6b428d5dbe2dc3b985d9
BLAKE2b-256 83c67e55db0a15f41a917be7d189aa78c73fca34358da7dfc4e5f04a7a7d4726

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f0523110fd018e055ea086f2a81a479d074bea4c4b5bf1c09907beb322a6614f
MD5 af00c9d92f656e790f8e9c677a10736e
BLAKE2b-256 02c87f5ebd74b1c197bbe027163900c3bf38402e138fe6b4f6486111ba71a62c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 313d6099dffe8bec3efa2524f3d3ca91abb6c732eae01213dabb4cb0be967f8f
MD5 10ada7e1dd35d4143e3feaa8df3a4657
BLAKE2b-256 d4148756faa586c26a8a66116dc72efa18605f1c3640702b749b6f97f8141e05

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.4-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 135d6056c78d29c29a430c6af7b675895e5eb63952b8b01e2a4bd56ad1dccbe3
MD5 1bdf468121a9ba28d81213e8e02111d8
BLAKE2b-256 afa531f82c7fd4b041373fc049d02604ae022a25b43b46539f604033aec5bd70

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