Skip to main content

pybangla is the bangla text normalizer tool, it use for text normalization like word to number and date formating purposes

Project description

Citation Paper: BnVITS: Voice Cloning in Bangla with Minimal Audio Samples

PyBangla:

PyBangla is a python3 package for Bangla Number, DateTime and Text Normalizer and Date Extraction. This package can be used to Normalize the text number and date (ex: number to text vice versa). This framework also can be used Django, Flask, FastAPI, and others. PyBangla module supported operating systems Linux/Unix, Mac OS and Windows. Available Features.

Features available in PyBangla:

  1. Text Normalization
  2. Number Conversion
  3. Date Format
  4. Emoji Removal
  5. Months, Weekdays, Seasons

[N.B: Here listed Every Feature has implemented Text Normalization as well as Isolated Uses feature]

Installation

The easiest way to install pybangla is to use pip:

pip install pybangla
#or
pip install git+https://github.com/saiful9379/pybangla.git
#or
git clone https://github.com/saiful9379/pybangla.git
cd pybangla
pip install -e .

Evaluation

For the evaluation, we selected 200 sentences. The dataset contains numerical values and has been normalized using PyBangla. We generated AI-based ground truth (GT) text and had it corrected by human annotators. The performance of our tool is evaluated using three key metrics: Word Error Rate (WER), Character Error Rate (CER), and Match Error Rate (MER).

PyBangla Evaluation

The performance of PyBangla was evaluated using 200 sentences. However, no evaluation report is available for versions earlier than V2.0.9. PyBangla V2.0.9 Presenting conversion accuracy as well as it's processing time performance.

Conversion Accuracy

Module Version No. of Sentences WER (Word Error Rate) CER (Character Error Rate) MER (Match Error Rate)
<= V2.0.8 200 No evaluation report No evaluation report No evaluation report
V2.0.9 200 0.1291 0.0319 0.0975

N.B : For more detail and all of processing category listed here please check : link

Processing Time Performance

Module Version Total Sentences Raw Character Count Normalized Character Count Per Character Processing Time (sec) Total Processing Time (sec)
2.0.9 200 9,217 12,584 0.0001167 1.076

Interpretation

  • The text normalization process increased the character count from 9,217 to 12,584 due to transformations such as Unicode normalization, diacritic removal, and standardization.
  • The average processing time per character was 0.0001167 seconds, resulting in a total processing time of 1.076 seconds for 200 sentences.
  • These metrics demonstrate the efficiency of PyBangla in handling Bangla text normalization.

Usage

1. Text Normalization

It supports converting Bangla abbreviations, symbols, and currencies to Bangla textual format.

Processes a given text by applying various normalization techniques based on specified boolean parameters.

Parameters:

  • text (str): The input text to be normalized.
  • all_operation (bool): Make this True if you need all operations to take place or False
  • number_plate (bool, default=False): Converts or normalizes vehicle number plates if present in the text.
  • abbreviations (bool, default=False): Expands common abbreviations into their full forms.
  • year (bool, default=False): Handles and formats years correctly.
  • punctuation (bool, default=False): Removes or standardizes unwanted punctuation marks.
  • phone_number (bool, default=False): Extracts and normalizes phone numbers.
  • symbols (bool, default=False): Expands common symbols into their textual representation.
  • ordinals (bool, default=False): Converts ordinal numbers.
  • currency (bool, default=False): Converts currency values into words.
  • date (bool, default=False): Standardizes and normalizes date formats.
  • nid (bool, default=False): Converts national identification numbers (NID) into a textual format.
  • passport (bool, default=False): Normalizes passport numbers.
  • number (bool, default=False): Processes and converts numeric values into textual form.
  • emoji (bool, default=False): Removes emojis from text.

Returns:

  • str: The normalized text after applying the selected transformations.

Example:

We can enable all conversion with a simple boolean parameter.

import pybangla
nrml = pybangla.Normalizer()
text = "রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য ২০৩০ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে"
print(f"Input: {text} \nOutput {nrml.text_normalizer(text, 
                                                     all_operation=True)}")

print(text)

# output:
'রাহিম ক্লাস ওয়ান এ প্রথম, এন্ড বাসার ক্লাস এ তেত্রিশতম, সে জন্য দুই হাজার ত্রিশ শতাব্দীতে দুই হাজার ত্রিশ দশমিক এক দুই তিন চার ইয়েন দিতে হয়েছে'

This can be used for single operations also.

For example, if only year conversion needed -

import pybangla
nrml = pybangla.Normalizer()
text = "রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য ২০৩০ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে"
print(f"Input: {text} \nOutput {nrml.text_normalizer(text,
                                                     all_operation=False
                                                     year=True)}")

print(text)

# output:
'রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য দুই হাজার ত্রিশ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে'

If only ordinal conversion needed -

import pybangla
nrml = pybangla.Normalizer()
text = "রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য ২০৩০ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে"
print(f"Input: {text} \nOutput {nrml.text_normalizer(text,
                                                     all_operation=False
                                                     ordinals=True)}")

print(text)

# output:
'রাহিম ক্লাস ওয়ান এ প্রথম, এন্ড বাসার ক্লাস এ তেত্রিশতম, সে জন্য ২০৩০ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে'

If only currency conversion needed -

import pybangla
nrml = pybangla.Normalizer()
text = "রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য ২০৩০ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে"
print(f"Input: {text} \nOutput {nrml.text_normalizer(text,
                                                     all_operation=False
                                                     currency=True)}")

print(text)

# output:
'রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য ২০৩০ শতাব্দীতে দুই হাজার ত্রিশ দশমিক এক দুই তিন চার ইয়েন দিতে হয়েছে'

We can also use multiple conversion at once.

import pybangla
nrml = pybangla.Normalizer()
text = "রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য ২০৩০ শতাব্দীতে ¥২০৩০.১২৩৪ দিতে হয়েছে"
print(f"Input: {text} \nOutput {nrml.text_normalizer(text,
                                                     all_operation=False
                                                     currency=True)}")

print(text)

# output:
'রাহিম ক্লাস ওয়ান এ ১ম, এন্ড বাসার ক্লাস এ ৩৩ তম, সে জন্য দুই হাজার ত্রিশ শতাব্দীতে দুই হাজার ত্রিশ দশমিক এক দুই তিন চার ইয়েন দিতে হয়েছে'

Normalizer more information or example check the link

2. Number Conversion

Example:

import pybangla
nrml = pybangla.Normalizer()
text = "আমাকে এক লক্ষ দুই হাজার এক টাকা দেয় এন্ড তুমি বিশ হাজার টাকা নিও এন্ড এক লক্ষ চার হাজার দুইশ এক টাকা এক ডবল দুই"
text = nrml.word2number(text)
print(text)
#output:
'আমাকে 102001 টাকা দেয় এন্ড তুমি 20000 টাকা নিও এন্ড 104201 টাকা 122 '

Number conversion more information or examples check the link

3. Date Format

Example:

import pybangla
nrml = pybangla.Normalizer()
date = "০১-এপ্রিল/২০২৩"
date = nrml.date_format(date, language="bn")
print(date)
#output:


{'date': '০১', 'month': '৪', 'year': '২০২৩', 'txt_date': 'এক', 'txt_month': 'এপ্রিল', 'txt_year': 'দুই হাজার তেইশ', 'weekday': 'শনিবার', 'ls_month': 'শ্রাবণ', 'seasons': 'বর্ষা'}

Date Format for more information or example check the link

4. Today, Months, Weekdays, Seasons

import pybangla
nrml = pybangla.Normalizer()
today = nrml.today()
print(today)

Output: 
{'date': '৩০', 'month': 'এপ্রিল', 'year': '২০২৪', 'txt_date': 'ত্রিশ', 'txt_year': 'দুই হাজার চব্বিশ', 'weekday': 'মঙ্গলবার', 'ls_month': 'শ্রাবণ', 'seasons': 'বর্ষা'}

Today, Months, Weekdays, Seasons more information or examples check the link

New Feature

(UPDATE TEXT NORMALIZATION) It supports year conversion like

  • "১৯৮৭-র" to "উনিশশো সাতাশি এর"
  • "১৯৯৫ সালে" to "উনিশশো পঁচানব্বই সালে"
  • "২০২৬-২৭" to "দুই হাজার ছাব্বিশ সাতাশ"

Now it also has the abbreviation for units of temperature

  • "৪৪°F" to "চুয়াল্লিশ ডিগ্রী ফারেনহাইট"
  • "৪৪°C" to "চুয়াল্লিশ ডিগ্রী সেলসিয়াস"

Phone Number Processing

  • "01790-540211" to "জিরো ওয়ান সেভেন নাইন জিরো ফাইভ ফোর জিরো টু ডাবল ওয়ান"
import pybangla
nrml = pybangla.Normalizer()
number_string = nrml.process_phone_number("01790-540211")
Output:
জিরো ওয়ান সেভেন নাইন জিরো ফাইভ ফোর জিরো টু ডাবল ওয়ান

Compare Two String Changes

import pybangla
nrml = pybangla.Normalizer()

input1 = "১৯৯৬সালের ৬ সেপ্টেম্বররণ ভ্রমণ পরিকল্পনা করছি ২০৩০সালের ৬সেপ্টেম্বর"

input2 = "উনিশশো ছিয়ানব্বই সালের ছয় সেপ্টেম্বর রণ ভ্রমণ পরিকল্পনা করছি দুই হাজার ত্রিশ সালের ছয় সেপ্টেম্বর"

print(nrml.text_diff(input1, input2))

#Output: 

(
    ['১৯৯৬সালের ৬', 'সেপ্টেম্বররণ', '২০৩০সালের', '৬সেপ্টেম্বর'], 
    ['উনিশশো ছিয়ানব্বই সালের ছয়', 'সেপ্টেম্বর রণ', 'দুই হাজার ত্রিশ সালের ছয়', 'সেপ্টেম্বর']
)

Next Upcoming Features

  1. Bangla lemmatization and stemming algorithm
  2. Bangla Tokenizer

Contact

If you have any suggestions: Email: saifulbrur79@gmail.com

Contributor

@misc{pybangla,
  title={PYBANGLA module used for normalize textual format like text to number and number to text},
  author={Islam, Md Saiful and Emon, Hassan Ali and  HM-badhon and Sarker, Sagor and Das, Udoy},
  howpublished={},
  year={2024}
}

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

pybangla-2.10.0.tar.gz (57.0 kB view details)

Uploaded Source

Built Distribution

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

pybangla-2.10.0-py3-none-any.whl (58.1 kB view details)

Uploaded Python 3

File details

Details for the file pybangla-2.10.0.tar.gz.

File metadata

  • Download URL: pybangla-2.10.0.tar.gz
  • Upload date:
  • Size: 57.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for pybangla-2.10.0.tar.gz
Algorithm Hash digest
SHA256 d0ad1b9d42d9938aec71704dd9990c8ffcabae547617726ed94ed144a5d88539
MD5 3ee47772c193a19d8d250b9c5e59d751
BLAKE2b-256 91ad2205bbf2094c84febaf24feae0f9b71af2e875dc0f590af5e4ce5804adee

See more details on using hashes here.

File details

Details for the file pybangla-2.10.0-py3-none-any.whl.

File metadata

  • Download URL: pybangla-2.10.0-py3-none-any.whl
  • Upload date:
  • Size: 58.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.22

File hashes

Hashes for pybangla-2.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d96762f973e1582195a04892a626321d9b9d1031dec87196091c12b6f6c05e0
MD5 b1497b37fe82c0d015c8661cc7a17678
BLAKE2b-256 b1387eb526ffad4db82348f8b41e4a024926c1e66d55e715c3bcb54047b91704

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