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.9.tar.gz (69.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.9-cp312-cp312-win_amd64.whl (839.4 kB view details)

Uploaded CPython 3.12Windows x86-64

cadar-0.1.9-cp312-cp312-manylinux_2_34_x86_64.whl (948.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

cadar-0.1.9-cp312-cp312-macosx_11_0_arm64.whl (829.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cadar-0.1.9-cp311-cp311-win_amd64.whl (839.4 kB view details)

Uploaded CPython 3.11Windows x86-64

cadar-0.1.9-cp311-cp311-manylinux_2_34_x86_64.whl (948.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

cadar-0.1.9-cp311-cp311-macosx_11_0_arm64.whl (833.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cadar-0.1.9-cp310-cp310-win_amd64.whl (839.4 kB view details)

Uploaded CPython 3.10Windows x86-64

cadar-0.1.9-cp310-cp310-manylinux_2_34_x86_64.whl (948.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

cadar-0.1.9-cp310-cp310-macosx_11_0_arm64.whl (833.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cadar-0.1.9-cp39-cp39-manylinux_2_34_x86_64.whl (948.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

cadar-0.1.9-cp38-cp38-manylinux_2_34_x86_64.whl (948.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.34+ x86-64

File details

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

File metadata

  • Download URL: cadar-0.1.9.tar.gz
  • Upload date:
  • Size: 69.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.9.tar.gz
Algorithm Hash digest
SHA256 48bb12e37c33a82c1e5cabea4d0d4b3983b858a283a508592fdde7daa9253a19
MD5 3a150b6712958c010960a077ff30ffa8
BLAKE2b-256 7b95f2bc5031d2fc7f384b4378b97cefbb06009216e95259399ee15d77f8b699

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.9-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 839.4 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.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1ef0803cbaecff8f0e4ffe881835a580dab49c5c0deaa574e229336f0ce2db66
MD5 c664864057cf8b57a6956522058203f0
BLAKE2b-256 ad3a1618919729a2c72570d761914b3f17197b8f0a1389faa986b2c9b20e82eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 22e3daf2fbb04039fbde248344cb541d626aae6cd12c04373ceb5b48f1f162f2
MD5 ad63c918bef84361fdba373ec88033c9
BLAKE2b-256 4ad5c123c13f2cf972a9d7706376b16368fae703f113c6de079027af3b48fab2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4d8c659b76aaa1cf6947fc525df10ab476b24cd5fd7c369f539b974491b30283
MD5 66f5454872759317a93584ae4032eeda
BLAKE2b-256 064209665c11d21e5a61f210d73dc0b586d7b52ff435f027481d2ed30d9aa210

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.9-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 839.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.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c702fadeab4a545f4126424cb12bd38c64539b890fc610a28210683e763faab9
MD5 3adc7e773e9e20623d9fc338d9cae5b3
BLAKE2b-256 937e112d408e96f512790aceea39146681391a5c9f7d6cb646ff1a90a4b22c13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8715ed4a5972422a9b5a6399d0945338168e05323f979a2283a9669378e69299
MD5 8c9e7c530366c9a42b0a10b31e1ca0ba
BLAKE2b-256 59e332dd4900c51ddf461fa7143e3712d5229392f97ea1d2a9225f7e87ae4d6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7878c3e4da96a299afaba9d92b1f74df11eb1519891c2f03107191b42ccbfb27
MD5 003efe6ecf834ae3b87fcb880608aabb
BLAKE2b-256 0aead6a629cabd0f6dcc654472299d01740533d1962fddfda15c89ee6d1bf836

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cadar-0.1.9-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 839.4 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.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 73dc52fb74a7c8cb8492a1b539fc51a95d64dd8d1d7662cfc8e53fe3c04e6551
MD5 044d0fa841c114cc13cbec4febceba7a
BLAKE2b-256 e5b9a674c72ce90f121b3c11b705190d0b5e63dcf75e5284856ab1f387aa2d48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 fedbf2480e13af0120e9750d7724943a33bd8e4c02cff04319ca9b9241a4ec82
MD5 1b56d3d12269e4365b2cf06edafc4fb7
BLAKE2b-256 413077a00a827878144672f8568068fba1296e19965ca61d5e07cbac8356f4f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a657f613b2d68332aed182952b5948c2098698f97af58c1bbdea8b0aaed9a53a
MD5 e15f685f86ebe736baa29c56faf6c872
BLAKE2b-256 40fe20e16de0b1397be9fd9dd38f2bd926f1335f415cd0757fbd78e2ecb9772c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1209808124351b81c92f15751562f486c223ebda00ae90d8bc4aac91bc6838b2
MD5 9687134231f3479e5f8768e0a1f37b2b
BLAKE2b-256 457c6bebd4316ad8c1555f09e1b9de83ab87a97a5b0101338e071d7935bc1001

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cadar-0.1.9-cp38-cp38-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e9e8bc0721394b7fba79463efb082164da7f4f11cde4af35d1ba42dfb745ee20
MD5 b513d27877ffd365c309e1f72c99df8c
BLAKE2b-256 a38d6507c4a17160de21cc1def993a4d2360ecc2f583be6628db67817d0d166c

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