Skip to main content

A modern Pythonic implementation of Avro Phonetic.

Project description

avro.py

A modern Pythonic implementation of the popular Bengali phonetic-typing software Avro Phonetic.

Downloads Python Version License



⚡ Overview

avro.py provides a fully fledged, batteries-included text parser which can parse, reverse and even convert English Roman script into its phonetic equivalent (unicode) of Bengali. At its core, it implements an extensively modified version of the Avro Phonetic Dictionary Search Library by Mehdi Hasan Khan.

✨ Inspirations

This package is inspired from Rifat Nabi's jsAvroPhonetic library and derives from Kaustav Das Modak's pyAvroPhonetic.


🔨 Installation

This package requires Python 3.9 or higher to be used inside your development environment.

# Install or upgrade.
pip install -U avro.py

🔖 Usage Guide

This small tour guide will describe how you can use avro.py back and forth to operate (cutlery!) on Bengali text. You can also check the examples directory for checking this whole snippet in action, as well as other use cases.

  1. parse()

Let's assume you want to parse a single English string to Bengali, for example "ami banglay gan gai.". You can convert it like this:

# Import the package.
import avro

# Our dummy text.
dummy = 'ami banglay gan gai.'

# Parse a single string.
parsed = avro.parse(dummy)
print(parsed)  # Output: আমি বাংলায় গান গাই।

1.a parse_iter()

If you have multiple strings, use parse_iter() to get a list of parsed results:

texts = ['ami banglay gan gai.', 'tumi kothay jao?']
parsed_list = avro.parse_iter(texts)
print(parsed_list)  # Output: ['আমি বাংলায় গান গাই।', 'তুমি কোথায় যাও?']
  1. parse(bijoy=True)

Alternatively, I can also do it in Bijoy Keyboard format:

bijoy_output = avro.parse(dummy, bijoy=True)
# Output: Avwg evsjvh় Mvb MvB।
  1. to_bijoy()

To convert a single Bengali string (Avro/Unicode) to Bijoy ASCII format:

bijoy_text = avro.to_bijoy(parsed)
print(bijoy_text)  # Output: Avwg evsjvh় Mvb MvB।

3.a to_bijoy_iter()

To convert multiple strings at once, use to_bijoy_iter():

bijoy_list = avro.to_bijoy_iter(['আমি বাংলায় গান গাই।', 'তুমি কোথায় যাও?'])
print(bijoy_list)  # Output: ['Avwg evsjvh় Mvb MvB।', 'tvmf wkrwb‡¶ jd?']
  1. to_unicode()

To convert a single Bijoy ASCII string back to Unicode Bengali:

unicode_text = avro.to_unicode(bijoy_text)
print(unicode_text)  # Output: আমি বাংলায় গান গাই।

4.a to_unicode_iter()

For multiple strings, use to_unicode_iter():

unicode_list = avro.to_unicode_iter(['Avwg evsjvh় Mvb MvB।', 'tvmf wkrwb‡¶ jd?'])
print(unicode_list)  # Output: ['আমি বাংলায় গান গাই।', 'তুমি কোথায় যাও?']
  1. reverse()

To reverse a single Unicode Bengali string back to Roman script:

reversed_text = avro.reverse(unicode_text)
print(reversed_text)  # Output: ami banglay gan gai.

[!WARNING] The reverse functions are by-nature lossy and might not output the correct replacement for some letters in favor of readability sometimes.

5.a reverse_iter()

To reverse multiple strings at once, use reverse_iter():

rev_list = avro.reverse_iter(['আমি বাংলায় গান গাই।', 'তুমি কোথায় যাও?'])
print(rev_list)  # Output: ['ami banglay gan gai.', 'tumi kothay jao?']

🔖 Asynchronous Operations

All of the functions above, when suffixed with _async, provide their asynchronous counterparts which have a slight performance bump in certain use cases. Please see the async examples to find out more about their usage.


🛠️ Contributing

:octocat: "Fork -> Do your changes -> Send a Pull Request, it's that easy!"

This project is based on the uv package manager by Astral. In order to automatically update and set up the environment, you can run the following command:

# (Optional) Install recommended Python version: (also sets up the virtual environment)
$ uv python install && uv venv
$ source .venv/bin/activate

# Install the project:
$ uv sync --all-extras --dev

# Build the project:
$ uv build --verbose

In order to run the tests, you can use the following command:

# Run unit tests:
$ uv run pytest .

🐛 Bug hunters wanted!

If you come across any kind of bug or wanna request a feature, please let us know by opening an issue here. We do need more ideas to keep the project alive and running, don't we? :P



👑 Acknowledgements

  • Mehdi Hasan Khan for originally developing and maintaining Avro Phonetic.
  • Rifat Nabi for porting it to Javascript.
  • Sarim Khan for writing ibus-avro which helped to clarify my concepts further.
  • Kaustav Das Modak for porting Rifat Nabi's JavaScript iteration to Python 2.
  • Md Enzam Hossain for helping him understand the ins and outs of the Avro dictionary and the way it works.

📋 License

Licensed under the MIT License.

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

avro_py-2025.8.8.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

avro_py-2025.8.8-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file avro_py-2025.8.8.tar.gz.

File metadata

  • Download URL: avro_py-2025.8.8.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.6

File hashes

Hashes for avro_py-2025.8.8.tar.gz
Algorithm Hash digest
SHA256 3901728b2b3e4fca9efe60a97b105f4d9571fefacb562a9d783b493bed8baf6d
MD5 103fe6e25315e356670ab5252fe7c270
BLAKE2b-256 15abddf06e33c6fd1022d09676c4217fbfd2c8370482c3901ab676a8995569a9

See more details on using hashes here.

File details

Details for the file avro_py-2025.8.8-py3-none-any.whl.

File metadata

File hashes

Hashes for avro_py-2025.8.8-py3-none-any.whl
Algorithm Hash digest
SHA256 7f0fb275eecd821acc4b9fe979a05fdc2bf9744c53e850abf25cd130d12f2a3d
MD5 b1e4d5b48a0e703912cad8f4c4132a74
BLAKE2b-256 4aa30eb1d113a70d685a1490dd3ff87af2b8c9fbf49cd1f5ce95ec229fdadd91

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