From 420084b60f444d860dd893ab6519d9dd0319ee5f Mon Sep 17 00:00:00 2001 From: HitBlast Date: Sat, 10 Feb 2024 23:57:01 +0600 Subject: [PATCH] improved avro dictionary structure for multiformat support --- avro/config.py | 20 +- avro/main.py | 6 +- avro/resources/avrodict.py | 461 +++++++++++++++++++------------------ test.py | 5 + tests/test_main.py | 4 +- 5 files changed, 253 insertions(+), 243 deletions(-) create mode 100644 test.py diff --git a/avro/config.py b/avro/config.py index 16bf0ca..0bf03b3 100755 --- a/avro/config.py +++ b/avro/config.py @@ -2,19 +2,19 @@ # Import local modules. -from .resources import AVRO_DICT +from .resources import DICT # Shortcuts to vowels, constants, case-sensitives and numbers. -AVRO_VOWELS = set(AVRO_DICT['data']['vowel']) -AVRO_CONSONANTS = set(AVRO_DICT['data']['consonant']) -AVRO_CASESENSITIVES = set(AVRO_DICT['data']['casesensitive']) -AVRO_NUMBERS = set(AVRO_DICT['data']['number']) +AVRO_VOWELS = set(DICT['avro']['vowel']) +AVRO_CONSONANTS = set(DICT['avro']['consonant']) +AVRO_CASESENSITIVES = set(DICT['avro']['casesensitive']) +AVRO_NUMBERS = set(DICT['avro']['number']) # Shortcuts to Bengali Svaravarna, Kar(s) -AVRO_SHORBORNO = set(AVRO_DICT['data']['shorborno']) -AVRO_KAR = AVRO_DICT['data']['kar'] -AVRO_IGNORE = AVRO_DICT['data']['ignore'] -EXCEPTIONS = AVRO_DICT['data']['exceptions'] +AVRO_SHORBORNO = set(DICT['avro']['shorborno']) +AVRO_KAR = DICT['avro']['kar'] +AVRO_IGNORE = DICT['avro']['ignore'] +EXCEPTIONS = DICT['avro']['exceptions'] # Shortcuts for conversion (e.g. for Bijoy Keyboard support). -AVRO_TO_BIJ = AVRO_DICT['data']['avro_to_bijoy'] +BIJOY_MAP = DICT['bijoy']['unicode_map'] diff --git a/avro/main.py b/avro/main.py index 4f1ccf6..819b690 100755 --- a/avro/main.py +++ b/avro/main.py @@ -13,7 +13,7 @@ from .utils import validate # Constants. -PATTERNS = config.AVRO_DICT['data']['patterns'] +PATTERNS = config.DICT['avro']['patterns'] NON_RULE_PATTERNS = [p for p in PATTERNS if 'rules' not in p] RULE_PATTERNS = [p for p in PATTERNS if 'rules' in p] @@ -105,8 +105,8 @@ def output_generator() -> Generator[str, None, None]: def convert_to_bijoy(text: str) -> str: text = re.sub('ৌ', 'ৌ', re.sub('ো', 'ো', text)) - for unic in config.AVRO_TO_BIJ: - text = re.sub(unic, config.AVRO_TO_BIJ[unic], text) + for unic in config.BIJOY_MAP: + text = re.sub(unic, config.BIJOY_MAP[unic], text) return text.strip() diff --git a/avro/resources/avrodict.py b/avro/resources/avrodict.py index ca12483..7519f24 100644 --- a/avro/resources/avrodict.py +++ b/avro/resources/avrodict.py @@ -5,7 +5,8 @@ from typing import Dict # The Avro Dictionary, implemented in Python. -AVRO_DICT: Dict[str, str] = { +DICT: Dict[str, str] = { + # Metadata. 'meta': { 'file_name': 'avrodict.py', 'file_description': 'Provides Avro Dictionary in native Python.', @@ -15,229 +16,8 @@ 'adapted_by': 'HitBlast', 'encoding': 'utf-8', }, - 'data': { - 'avro_to_bijoy': { - '।': '|', - '‘': 'Ô', - '’': 'Õ', - '“': 'Ò', - '”': 'Ó', - '্র্য': 'ª¨', - 'র‌্য': 'i¨', - 'ক্ক': '°', - 'ক্ট': '±', - 'ক্ত': '³', - 'ক্ব': 'K¡', - 'স্ক্র': '¯Œ', - 'ক্র': 'µ', - 'ক্ল': 'K¬', - 'ক্ষ': '¶', - 'ক্স': '·', - 'গু': '¸', - 'গ্ধ': '»', - 'গ্ন': 'Mœ', - 'গ্ম': 'M¥', - 'গ্ল': 'M­', - 'গ্রু': 'Mªy', - 'ঙ্ক': '¼', - 'ঙ্ক্ষ': '•¶', - 'ঙ্খ': '•L', - 'ঙ্গ': '½', - 'ঙ্ঘ': '•N', - 'চ্চ': '”P', - 'চ্ছ': '”Q', - 'চ্ছ্ব': '”Q¡', - 'চ্ঞ': '”T', - 'জ্জ্ব': '¾¡', - 'জ্জ': '¾', - 'জ্ঝ': 'À', - 'জ্ঞ': 'Á', - 'জ্ব': 'R¡', - 'ঞ্চ': 'Â', - 'ঞ্ছ': 'Ã', - 'ঞ্জ': 'Ä', - 'ঞ্ঝ': 'Å', - 'ট্ট': 'Æ', - 'ট্ব': 'U¡', - 'ট্ম': 'U¥', - 'ড্ড': 'Ç', - 'ণ্ট': 'È', - 'ণ্ঠ': 'É', - 'ন্স': 'Ý', - 'ণ্ড': 'Ê', - 'ন্তু': 'š‘', - 'ণ্ব': 'Y^', - 'ত্ত': 'Ë', - 'ত্ত্ব': 'Ë¡', - 'ত্থ': 'Ì', - 'ত্ন': 'Zœ', - 'ত্ম': 'Z¥', - 'ন্ত্ব': 'š—¡', - 'ত্ব': 'Z¡', - 'থ্ব': '_¡', - 'দ্গ': '˜M', - 'দ্ঘ': '˜N', - 'দ্দ': 'Ï', - 'দ্ধ': '×', - 'দ্ব': '˜¡', - 'দ্ব': 'Ø', - 'দ্ভ': '™¢', - 'দ্ম': 'Ù', - 'দ্রু': '`ª“', - 'ধ্ব': 'aŸ', - 'ধ্ম': 'a¥', - 'ন্ট': '›U', - 'ন্ঠ': 'Ú', - 'ন্ড': 'Û', - 'ন্ত্র': 'š¿', - 'ন্ত': 'š—', - 'স্ত্র': '¯¿', - 'ত্র': 'Î', - 'ন্থ': 'š’', - 'ন্দ': '›`', - 'ন্দ্ব': '›Ø', - 'ন্ধ': 'Ü', - 'ন্ন': 'bœ', - 'ন্ব': 'š^', - 'ন্ম': 'b¥', - 'প্ট': 'Þ', - 'প্ত': 'ß', - 'প্ন': 'cœ', - 'প্প': 'à', - 'প্ল': 'c­', - 'প্স': 'á', - 'ফ্ল': 'd¬', - 'ব্জ': 'â', - 'ব্দ': 'ã', - 'ব্ধ': 'ä', - 'ব্ব': 'eŸ', - 'ব্ল': 'e­', - 'ভ্র': 'å', - 'ম্ন': 'gœ', - 'ম্প': '¤ú', - 'ম্ফ': 'ç', - 'ম্ব': '¤^', - 'ম্ভ': '¤¢', - 'ম্ভ্র': '¤£', - 'ম্ম': '¤§', - 'ম্ল': '¤­', - 'রু': 'i“', - 'রূ': 'iƒ', - 'ল্ক': 'é', - 'ল্গ': 'ê', - 'ল্প': 'í', - 'ল্ট': 'ë', - 'ল্ড': 'ì', - 'ল্ফ': 'î', - 'ল্ব': 'j¦', - 'ল্ম': 'j¥', - 'ল্ল': 'jø', - 'শু': 'ï', - 'শ্চ': 'ð', - 'শ্ন': 'kœ', - 'শ্ব': 'k¦', - 'শ্ম': 'k¥', - 'শ্ল': 'kø', - 'ষ্ক': '®‹', - 'ষ্ক্র': '®Œ', - 'ষ্ট': 'ó', - 'ষ্ঠ': 'ô', - 'ষ্ণ': 'ò', - 'ষ্প': '®ú', - 'ষ্ফ': 'õ', - 'ষ্ম': '®§', - 'স্ক': '¯‹', - 'স্ট': '÷', - 'স্খ': 'ö', - 'স্ত': '¯—', - 'স্তু': '¯‘', - 'স্থ': '¯’', - 'স্ন': 'mœ', - 'স্প': '¯ú', - 'স্ফ': 'ù', - 'স্ব': '¯^', - 'স্ম': '¯§', - 'স্ল': '¯­', - 'হু': 'û', - 'হ্ণ': 'nè', - 'হ্ন': 'ý', - 'হ্ম': 'þ', - 'হ্ল': 'n¬', - 'হৃ': 'ü', - 'র্': '©', - '্র': '«', - '্য': '¨', - '্': '&', - 'আ': 'Av', - 'অ': 'A', - 'ই': 'B', - 'ঈ': 'C', - 'উ': 'D', - 'ঊ': 'E', - 'ঋ': 'F', - 'এ': 'G', - 'ঐ': 'H', - 'ও': 'I', - 'ঔ': 'J', - 'ক': 'K', - 'খ': 'L', - 'গ': 'M', - 'ঘ': 'N', - 'ঙ': 'O', - 'চ': 'P', - 'ছ': 'Q', - 'জ': 'R', - 'ঝ': 'S', - 'ঞ': 'T', - 'ট': 'U', - 'ঠ': 'V', - 'ড': 'W', - 'ঢ': 'X', - 'ণ': 'Y', - 'ত': 'Z', - 'থ': '_', - 'দ': '`', - 'ধ': 'a', - 'ন': 'b', - 'প': 'c', - 'ফ': 'd', - 'ব': 'e', - 'ভ': 'f', - 'ম': 'g', - 'য': 'h', - 'র': 'i', - 'ল': 'j', - 'শ': 'k', - 'ষ': 'l', - 'স': 'm', - 'হ': 'n', - 'ড়': 'o', - 'ঢ়': 'p', - 'য়': 'q', - 'ৎ': 'r', - '০': '0', - '১': '1', - '২': '2', - '৩': '3', - '৪': '4', - '৫': '5', - '৬': '6', - '৭': '7', - '৮': '8', - '৯': '9', - 'া': 'v', - 'ি': 'w', - 'ী': 'x', - 'ু': 'y', - 'ূ': '~', - 'ৃ': '…', - 'ে': '‡', - 'ৈ': '‰', - 'ৗ': 'Š', - 'ং': 's', - 'ঃ': 't', - 'ঁ': 'u', - }, + # Avro Keyboard mappings. + 'avro': { 'patterns': [ {'find': 'bhl', 'replace': 'ভ্ল'}, {'find': 'psh', 'replace': 'পশ'}, @@ -859,7 +639,7 @@ # "replace": "" # } ], - # Remapped words + # Remapped words. 'exceptions': { 'ফেসবুক': 'Facebook', 'গুগল': 'Google', @@ -868,15 +648,240 @@ 'টুইটার': 'Twitter', 'লিঙ্কডইন': 'Linkedin', }, - # Constant values + # Constant values. 'vowel': 'aeiou', 'consonant': 'bcdfghjklmnpqrstvwxyz', 'casesensitive': 'oiudgjnrstyz', 'number': '0123456789', - # For reverse parsing + # For reverse parsing. 'shorborno': 'অআইঈউঊএঐওঔ', 'kar': {'া', 'ি', 'ী', 'ৗ', 'ু', 'ূ', 'ৃ', 'ে', 'ৈ', 'ো', 'ৌ'}, - # Ignored symbols + # Ignored symbols. 'ignore': {'ঁ', '।', '?', '.', '-', ';'}, }, + # Bijoy Keyboard mappings. + 'bijoy': { + 'unicode_map': { + '।': '|', + '‘': 'Ô', + '’': 'Õ', + '“': 'Ò', + '”': 'Ó', + '্র্য': 'ª¨', + 'র‌্য': 'i¨', + 'ক্ক': '°', + 'ক্ট': '±', + 'ক্ত': '³', + 'ক্ব': 'K¡', + 'স্ক্র': '¯Œ', + 'ক্র': 'µ', + 'ক্ল': 'K¬', + 'ক্ষ': '¶', + 'ক্স': '·', + 'গু': '¸', + 'গ্ধ': '»', + 'গ্ন': 'Mœ', + 'গ্ম': 'M¥', + 'গ্ল': 'M­', + 'গ্রু': 'Mªy', + 'ঙ্ক': '¼', + 'ঙ্ক্ষ': '•¶', + 'ঙ্খ': '•L', + 'ঙ্গ': '½', + 'ঙ্ঘ': '•N', + 'চ্চ': '”P', + 'চ্ছ': '”Q', + 'চ্ছ্ব': '”Q¡', + 'চ্ঞ': '”T', + 'জ্জ্ব': '¾¡', + 'জ্জ': '¾', + 'জ্ঝ': 'À', + 'জ্ঞ': 'Á', + 'জ্ব': 'R¡', + 'ঞ্চ': 'Â', + 'ঞ্ছ': 'Ã', + 'ঞ্জ': 'Ä', + 'ঞ্ঝ': 'Å', + 'ট্ট': 'Æ', + 'ট্ব': 'U¡', + 'ট্ম': 'U¥', + 'ড্ড': 'Ç', + 'ণ্ট': 'È', + 'ণ্ঠ': 'É', + 'ন্স': 'Ý', + 'ণ্ড': 'Ê', + 'ন্তু': 'š‘', + 'ণ্ব': 'Y^', + 'ত্ত': 'Ë', + 'ত্ত্ব': 'Ë¡', + 'ত্থ': 'Ì', + 'ত্ন': 'Zœ', + 'ত্ম': 'Z¥', + 'ন্ত্ব': 'š—¡', + 'ত্ব': 'Z¡', + 'থ্ব': '_¡', + 'দ্গ': '˜M', + 'দ্ঘ': '˜N', + 'দ্দ': 'Ï', + 'দ্ধ': '×', + 'দ্ব': '˜¡', + 'দ্ব': 'Ø', + 'দ্ভ': '™¢', + 'দ্ম': 'Ù', + 'দ্রু': '`ª“', + 'ধ্ব': 'aŸ', + 'ধ্ম': 'a¥', + 'ন্ট': '›U', + 'ন্ঠ': 'Ú', + 'ন্ড': 'Û', + 'ন্ত্র': 'š¿', + 'ন্ত': 'š—', + 'স্ত্র': '¯¿', + 'ত্র': 'Î', + 'ন্থ': 'š’', + 'ন্দ': '›`', + 'ন্দ্ব': '›Ø', + 'ন্ধ': 'Ü', + 'ন্ন': 'bœ', + 'ন্ব': 'š^', + 'ন্ম': 'b¥', + 'প্ট': 'Þ', + 'প্ত': 'ß', + 'প্ন': 'cœ', + 'প্প': 'à', + 'প্ল': 'c­', + 'প্স': 'á', + 'ফ্ল': 'd¬', + 'ব্জ': 'â', + 'ব্দ': 'ã', + 'ব্ধ': 'ä', + 'ব্ব': 'eŸ', + 'ব্ল': 'e­', + 'ভ্র': 'å', + 'ম্ন': 'gœ', + 'ম্প': '¤ú', + 'ম্ফ': 'ç', + 'ম্ব': '¤^', + 'ম্ভ': '¤¢', + 'ম্ভ্র': '¤£', + 'ম্ম': '¤§', + 'ম্ল': '¤­', + 'রু': 'i“', + 'রূ': 'iƒ', + 'ল্ক': 'é', + 'ল্গ': 'ê', + 'ল্প': 'í', + 'ল্ট': 'ë', + 'ল্ড': 'ì', + 'ল্ফ': 'î', + 'ল্ব': 'j¦', + 'ল্ম': 'j¥', + 'ল্ল': 'jø', + 'শু': 'ï', + 'শ্চ': 'ð', + 'শ্ন': 'kœ', + 'শ্ব': 'k¦', + 'শ্ম': 'k¥', + 'শ্ল': 'kø', + 'ষ্ক': '®‹', + 'ষ্ক্র': '®Œ', + 'ষ্ট': 'ó', + 'ষ্ঠ': 'ô', + 'ষ্ণ': 'ò', + 'ষ্প': '®ú', + 'ষ্ফ': 'õ', + 'ষ্ম': '®§', + 'স্ক': '¯‹', + 'স্ট': '÷', + 'স্খ': 'ö', + 'স্ত': '¯—', + 'স্তু': '¯‘', + 'স্থ': '¯’', + 'স্ন': 'mœ', + 'স্প': '¯ú', + 'স্ফ': 'ù', + 'স্ব': '¯^', + 'স্ম': '¯§', + 'স্ল': '¯­', + 'হু': 'û', + 'হ্ণ': 'nè', + 'হ্ন': 'ý', + 'হ্ম': 'þ', + 'হ্ল': 'n¬', + 'হৃ': 'ü', + 'র্': '©', + '্র': '«', + '্য': '¨', + '্': '&', + 'আ': 'Av', + 'অ': 'A', + 'ই': 'B', + 'ঈ': 'C', + 'উ': 'D', + 'ঊ': 'E', + 'ঋ': 'F', + 'এ': 'G', + 'ঐ': 'H', + 'ও': 'I', + 'ঔ': 'J', + 'ক': 'K', + 'খ': 'L', + 'গ': 'M', + 'ঘ': 'N', + 'ঙ': 'O', + 'চ': 'P', + 'ছ': 'Q', + 'জ': 'R', + 'ঝ': 'S', + 'ঞ': 'T', + 'ট': 'U', + 'ঠ': 'V', + 'ড': 'W', + 'ঢ': 'X', + 'ণ': 'Y', + 'ত': 'Z', + 'থ': '_', + 'দ': '`', + 'ধ': 'a', + 'ন': 'b', + 'প': 'c', + 'ফ': 'd', + 'ব': 'e', + 'ভ': 'f', + 'ম': 'g', + 'য': 'h', + 'র': 'i', + 'ল': 'j', + 'শ': 'k', + 'ষ': 'l', + 'স': 'm', + 'হ': 'n', + 'ড়': 'o', + 'ঢ়': 'p', + 'য়': 'q', + 'ৎ': 'r', + '০': '0', + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + 'া': 'v', + 'ি': 'w', + 'ী': 'x', + 'ু': 'y', + 'ূ': '~', + 'ৃ': '…', + 'ে': '‡', + 'ৈ': '‰', + 'ৗ': 'Š', + 'ং': 's', + 'ঃ': 't', + 'ঁ': 'u', + }, + }, } diff --git a/test.py b/test.py new file mode 100644 index 0000000..029d1c8 --- /dev/null +++ b/test.py @@ -0,0 +1,5 @@ +import avro + +# parse some text +text = 'ami amar ami ke cirodin ei banglay khu^je pai' +print(avro.parse(text, bijoy=True)) diff --git a/tests/test_main.py b/tests/test_main.py index 58182ee..13b3939 100755 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -10,7 +10,7 @@ # Import local modules. import avro -from avro.config import AVRO_DICT +from avro.config import DICT # Test functions for this file. @@ -19,7 +19,7 @@ def test_patterns_without_rules_from_config() -> None: Tests all patterns from config that don't have rules. """ - for pattern in AVRO_DICT['data']['patterns']: + for pattern in DICT['avro']['patterns']: if 'rules' not in pattern and pattern.get('find', None): assert pattern['replace'] == avro.parse(pattern['find'])