Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

RomanAlfaz (رومن الفاظ)

RomanAlfaz is a dictionary-based, predictive transliterator that converts roman-script Urdu words into their arabic-script equivalents. It automatically ranks and prioritizes matching suggestions based on their real-world usage frequency.

How it Works

The tool processes text using a specialized two-layer transformation workflow:

  1. Intermediate Representation: It leverages the rule-based transliteration algorithm proposed by Tafseer Ahmed. This converts the user's Roman Urdu input into an intermediate format designed to bridge the phonetic and structural spelling gaps between the two scripts.
  2. Dictionary Lookup: The engine passes this intermediate form to SymSpellPy to execute an optimized dictionary search against a precompiled vocabulary list.

Baseline Vocabulary

The baseline included dictionary is built upon the CLE Urdu 5000 words dataset, which captures the most frequently used words in the Urdu language.

Core Workflow

Using RomanAlfaz follows a simple three-step process:

  1. Load: Load a preconfigured arabic-script Urdu vocabulary and corresponding usage frequency.
  2. Input: Provide a roman-script Urdu word.
  3. Output: Receive a ranked list of predicted arabic-script suggestions.
RomanAlfaz Core Workflow

Documentation

The latest full documentation, installation guide, and API reference is available online.

Installation

You can install romanalfaz directly from PyPI using pip.

Standard Installation

Run the following command in your terminal:

pip install romanalfaz

It is highly recommended to install Python packages inside a virtual environment to prevent dependency conflicts with your global system packages.

On macOS/Linux:

# Create a virtual environment
python3 -m venv venv

# Activate the virtual environment
source venv/bin/activate

# Install the package
pip install romanalfaz

On Windows:

# Create a virtual environment
python -m venv venv

# Activate the virtual environment
venv\Scripts\activate

# Install the package
pip install romanalfaz

Adding to Project Dependencies

If you are using romanalfaz as part of a larger project, you can add it to your dependency tracking files:

  • requirements.txt: Add romanalfaz to your file, then install using:
    pip install -r requirements.txt
    
  • Poetry:
    poetry add romanalfaz
    
  • uv:
    uv add romanalfaz
    

Usage

The romanalfaz package provides the RomanAlfaz class as a centralized, easy-to-use interface for text transliterations.

Initialization and Input

  • Built-in Vocabulary: Instantiating the class automatically loads the include baseline, 5000-word vocabulary.
  • Word-Level Inputs: The RomanAlfaz.suggest() function processes single words only. It is your responsibility to tokenize sentences or larger paragraphs into individual words before passing them to the function.

Outputs and Edit Distance

The RomanAlfaz.suggest() function always returns a 3-tuple representing three matching tiers:

  1. Exact Matches,
  2. One-Edit Distance Matches, and
  3. Two-Edit Distance Matches

The distance parameter determines the maximum search depth. The function will always include the lowest tiers as well and return results across all matching levels up to your configured limit.

Interactive Examples

You can test the core functions interactively inside a Python shell. Open your terminal, run python, and follow the examples below:

>>> from romanalfaz import RomanAlfaz

>>> ra = RomanAlfaz()

>>> ra.getBestMatch('kitab')
Suggestion(arabic='کتاب', encodedRoman='KTAB', frequency=4643)

>>> ra.getExactMatches('kitab')
[Suggestion(arabic='کتاب', encodedRoman='KTAB', frequency=4643),
 Suggestion(arabic='کتب', encodedRoman='KTB', frequency=666)]

>>> for w in 'kya haal he'.split():
...    d0, d1, d2 = ra.suggest(w, distance=2)
...    # Formated dump of the suggestions 
...    print(f"'{w}' ->")
...    print('  Exact matches:')
...    for item in d0:
...        print(f"    {item!r}")
...    print('  One-Edit matches:')
...    for item in d1:
...        print(f"    {item!r}")
...    print('  Two-Edit matches:')
...    for item in d2:
...        print(f"    {item!r}")
...
'kya' ->
  Exact matches:
    Suggestion(arabic='کیا', encodedRoman='KYA', frequency=108414)
  One-Edit matches:
    Suggestion(arabic='کی', encodedRoman='KY', frequency=575545)
    Suggestion(arabic='کہ', encodedRoman='KH', frequency=237419)
    Suggestion(arabic='یہ', encodedRoman='YH', frequency=128103)
    Suggestion(arabic='کیا', encodedRoman='KYA', frequency=108414)
    Suggestion(arabic='کئے', encodedRoman='KYE', frequency=14970)
    Suggestion(arabic='کیے', encodedRoman='KYE', frequency=4976)
  Two-Edit matches:
'haal' ->
  Exact matches:
    Suggestion(arabic='حال', encodedRoman='HAL', frequency=4893)
    Suggestion(arabic='ہال', encodedRoman='HAL', frequency=936)
    Suggestion(arabic='حائل', encodedRoman='HAYL', frequency=316)
  One-Edit matches:
    Suggestion(arabic='حاصل', encodedRoman='HASL', frequency=25881)
    Suggestion(arabic='حال', encodedRoman='HAL', frequency=4893)
    Suggestion(arabic='حامل', encodedRoman='HAML', frequency=2227)
    Suggestion(arabic='آل', encodedRoman='AAL', frequency=1014)
    Suggestion(arabic='ہال', encodedRoman='HAL', frequency=936)
    Suggestion(arabic='فعال', encodedRoman='FAAL', frequency=718)
  Two-Edit matches:
    Suggestion(arabic='حاصل', encodedRoman='HASL', frequency=25881)
    Suggestion(arabic='حالات', encodedRoman='HALAT', frequency=6537)
    Suggestion(arabic='حال', encodedRoman='HAL', frequency=4893)
    Suggestion(arabic='حامل', encodedRoman='HAML', frequency=2227)
    Suggestion(arabic='آل', encodedRoman='AAL', frequency=1014)
    Suggestion(arabic='ہال', encodedRoman='HAL', frequency=936)
'he' ->
  Exact matches:
    Suggestion(arabic='ہے', encodedRoman='HE', frequency=466908)
  One-Edit matches:
  Two-Edit matches:

Metadata

Release files for romanalfaz 0.1.0a4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for romanalfaz 0.1.0a4
File Size Uploaded Provenance
romanalfaz-0.1.0a4.tar.gz 62.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for romanalfaz 0.1.0a4
File Interpreter ABI Platform
romanalfaz-0.1.0a4-py3-none-any.whl Python 3 none any Details

Total release size: 125.8 kB

Release files / romanalfaz-0.1.0a4.tar.gz

Download URL romanalfaz-0.1.0a4.tar.gz
Size 62.6 kB
Tags Source
SHA-256 checksum
How to use checksums
64ba4359e881c1a2290e45a64fd30946c105999f2114f2ef8a7de534d5788f3f
BLAKE2b-256 checksum
How to use checksums
23b5272ed31d18f83438cb1c7f4a4abfcf74eb9eaa47f685d385b7999a71a2ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / romanalfaz-0.1.0a4-py3-none-any.whl

Download URL romanalfaz-0.1.0a4-py3-none-any.whl
Size 63.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0cb848e655250f1723bbc0cc0b050a622abc5fe5362da518b25f8ef9167d76a4
BLAKE2b-256 checksum
How to use checksums
52ef9e74b2ef2c1e73bcb901153a4c8e4cd84175150ef319ca4544c455cb00ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for romanalfaz 0.1.0a4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page