⚡ 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.
[!IMPORTANT]
Update: As of October 2024, Python 3.8 has reached its EOL, so for keeping
this project updated, the minimum required version will be Python 3.9 from now
onwards. It is strongly suggested that you migrate your project for better
compatibility.
✨ 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.
$ pip install avro.py
📦 ...or you can try the CLI!
avnie is a newly developed CLI tool
that uses avro.py under the hood. You can install it using:
$ pip install avnie
🔖 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.
parse()
Let's assume I want to parse some English text to Bengali, which is "ami banglay
gan gai.", so in this case to convert it to Bengali, we can use this snippet as
a starter code and then extend upon it as our boilerplate for multiple
operations later on:
import avro
dummy = 'ami banglay gan gai.'
avro_output = avro.parse(dummy)
print(output)
parse(bijoy=True)
Alternatively, I can also do it in Bijoy Keyboard format:
bijoy_output = avro.parse(dummy, bijoy=True)
to_bijoy()
Or, we can take the previous avro_output
and convert it to Bijoy if we want to, like this:
bijoy_text = avro.to_bijoy(avro_output)
to_unicode()
Conversely, we can convert the Bijoy text we got just now and convert it back to Unicode Bengali:
unicode_text = avro.to_unicode(bijoy_text)
reverse()
Finally, we can just reverse back to the original text we passed as input in the first place:
reversed_text = avro.reverse(uncode_text)
🐍 A note on async
/await
support:
Since version
2024.12.5, the
package now supports async
/await
syntax for all the functions.
[!NOTE]
Unless you have a very specific use, the asynchronous functions only
provide slight performance improvements and are not necessary for most use
cases, so their usage is optional.
Please have a look at the
examples for a more
thorough understanding of how to use the package in both synchronous and
asynchronous contexts.
🛠️ Contributing
:octocat: Fork -> Do your changes -> Send a Pull Request, it's that easy!
Additional Developer Notes
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:
$ uv python install && uv venv
$ source .venv/bin/activate
$ uv sync --all-extras --dev
$ uv build --verbose
In order to run the tests, you can use the following command:
$ uv run pytest .
🐛 We're looking for bug hunters, by the way!
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.