From 06ace623035f6a5a14f41cdf23bd0f6351d36f10 Mon Sep 17 00:00:00 2001 From: retheckj Date: Tue, 7 Jul 2026 18:48:15 +0530 Subject: [PATCH 1/2] style: apply black formatting Signed-off-by: retheckj --- .../blind_test_case.txt | 1398 +++++++++++++++++ .../inverse_normalize.py | 8 +- .../run_evaluate.py | 80 +- .../ta/data/numbers/case_suffix.tsv | 23 + .../ta/data/numbers/crores.tsv | 9 + .../ta/data/numbers/crores_10_99.tsv | 90 ++ .../ta/data/numbers/crores_10_99_join.tsv | 90 ++ .../ta/data/numbers/crores_join.tsv | 9 + .../ta/data/numbers/digit.tsv | 10 + .../ta/data/numbers/hundreds.tsv | 11 + .../ta/data/numbers/hundreds_join.tsv | 12 + .../ta/data/numbers/lakhs.tsv | 18 + .../ta/data/numbers/lakhs_10_99.tsv | 182 +++ .../ta/data/numbers/lakhs_10_99_join.tsv | 182 +++ .../ta/data/numbers/lakhs_join.tsv | 18 + .../ta/data/numbers/teens_and_ties.tsv | 177 +++ .../ta/data/numbers/thousands.tsv | 10 + .../ta/data/numbers/thousands_10_99.tsv | 114 ++ .../ta/data/numbers/thousands_10_99_join.tsv | 114 ++ .../ta/data/numbers/thousands_join.tsv | 10 + .../ta/data/numbers/zero.tsv | 3 + .../ta/graph_utils.py | 204 +++ .../ta/taggers/__init__.py | 0 .../ta/taggers/cardinal.py | 495 ++++++ .../ta/taggers/punctuation.py | 31 + .../ta/taggers/tokenize_and_classify.py | 86 + .../ta/taggers/word.py | 31 + .../inverse_text_normalization/ta/utils.py | 63 + .../ta/verbalizers/__init__.py | 0 .../ta/verbalizers/cardinal.py | 34 + .../ta/verbalizers/verbalize.py | 26 + .../ta/verbalizers/verbalize_final.py | 46 + .../ta/verbalizers/word.py | 26 + tests/nemo_text_processing/ta/__init__.py | 0 .../test_cases_cardinal.txt | 54 + .../nemo_text_processing/ta/run_blind_test.py | 82 + .../nemo_text_processing/ta/test_cardinal.py | 36 + tests/nemo_text_processing/ta/utils.py | 0 38 files changed, 3774 insertions(+), 8 deletions(-) create mode 100644 nemo_text_processing/inverse_text_normalization/blind_test_case.txt create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/case_suffix.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/digit.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/teens_and_ties.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_join.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/data/numbers/zero.tsv create mode 100644 nemo_text_processing/inverse_text_normalization/ta/graph_utils.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/taggers/__init__.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/taggers/cardinal.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/taggers/punctuation.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/taggers/tokenize_and_classify.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/taggers/word.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/utils.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/verbalizers/cardinal.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize_final.py create mode 100644 nemo_text_processing/inverse_text_normalization/ta/verbalizers/word.py create mode 100644 tests/nemo_text_processing/ta/__init__.py create mode 100644 tests/nemo_text_processing/ta/data_inverse_text_normalization/test_cases_cardinal.txt create mode 100644 tests/nemo_text_processing/ta/run_blind_test.py create mode 100644 tests/nemo_text_processing/ta/test_cardinal.py create mode 100644 tests/nemo_text_processing/ta/utils.py diff --git a/nemo_text_processing/inverse_text_normalization/blind_test_case.txt b/nemo_text_processing/inverse_text_normalization/blind_test_case.txt new file mode 100644 index 000000000..a31ff59a1 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/blind_test_case.txt @@ -0,0 +1,1398 @@ +CARDINAL ௪ சிக்ஸர்கள் ௧௪ பவுண்டரிகள் நான்கு சிக்ஸர்கள் பதினான்கு பவுண்டரிகள் + +CARDINAL ௬ ரன்கள் எடுத்தார் ஆறு ரன்கள் எடுத்தார் + +CARDINAL ௩ கோல்கள் அடித்தார் மூன்று கோல்கள் அடித்தார் + +CARDINAL ௯ சிக்ஸர்கள் ஒன்பது சிக்ஸர்கள் + +CARDINAL ௫ பவுண்டரிகள் ஐந்து பவுண்டரிகள் + +CARDINAL ௨ சிக்ஸர்கள் ௧௨ ரன்கள் இரண்டு சிக்ஸர்கள் பன்னிரண்டு ரன்கள் + +CARDINAL ௯ புள்ளிகள் ஒன்பது புள்ளிகள் + +CARDINAL ௪ பேர் உயிரிழப்பு ௧௮ பேர் காயம் நான்கு பேர் உயிரிழப்பு பதினெட்டு பேர் காயம் + +CARDINAL ௫ கோல்கள் அடித்தனர் ஐந்து கோல்கள் அடித்தனர் + +CARDINAL ௩ பேட்ஸ்மேன்கள் ௧௨ வீரர்கள் மூன்று பேட்ஸ்மேன்கள் பன்னிரண்டு வீரர்கள் + +CARDINAL ௧ ஓவர் ௧௩ ரன்கள் ஒரு ஓவர் பதின்மூன்று ரன்கள் + +CARDINAL ௩ ஓவர்கள் மூன்று ஓவர்கள் + +CARDINAL ௫ கோல்கள் ஐந்து கோல்கள் + +CARDINAL ௩ ஆப்பிள்கள் மூன்று ஆப்பிள்கள் + +CARDINAL ௭ வாழைப்பழங்கள் ஏழு வாழைப்பழங்கள் + +CARDINAL ௩ தோல்வி ௧௨ வெற்றி மூன்று தோல்வி பன்னிரண்டு வெற்றி + +CARDINAL ௫ தோல்விகள் ௧ டிரா ௧௭ வெற்றிகள் ஐந்து தோல்விகள் ஒரு டிரா பதினேழு வெற்றிகள் + +CARDINAL ௮ போட்டிகள் டிரா எட்டு போட்டிகள் டிரா + +CARDINAL ௪ பவுண்டரிகள் நான்கு பவுண்டரிகள் + +CARDINAL ௮ சிக்ஸர்கள் ௨ அவுட் எட்டு சிக்ஸர்கள் இரண்டு அவுட் + +CARDINAL ௬ வீரர்கள் அவுட் ஆறு வீரர்கள் அவுட் + +CARDINAL ௪ ரன்கள் ௩ பவுண்டரிகள் நான்கு ரன்கள் மூன்று பவுண்டரிகள் + +CARDINAL ஒன்பிளஸ் ௮ ப்ரோ ஒன்பிளஸ் எட்டு ப்ரோ + +CARDINAL ௫ சார்ஜர்கள் ஐந்து சார்ஜர்கள் + +CARDINAL ௪ ஓவரில் ௧௭ ரன்கள் நான்கு ஓவரில் பதினேழு ரன்கள் + +CARDINAL ௫ சாக்லேட்டுகள் ௯ டாபிகள் ஐந்து சாக்லேட்டுகள் ஒன்பது டாபிகள் + +CARDINAL ௬ பேட்ஸ்மேன்கள் ௨ பவுலர்கள் ஆறு பேட்ஸ்மேன்கள் இரண்டு பவுலர்கள் + +CARDINAL ௧ விக்கெட் கீப்பர் ஒரு விக்கெட் கீப்பர் + +CARDINAL ௮ கேட்ச் அவுட் எட்டு கேட்ச் அவுட் + +CARDINAL ௫ விக்கெட்டுக்கு ௧௦ ரன்கள் ஐந்து விக்கெட்டுக்கு பத்து ரன்கள் + +CARDINAL ௭ வெற்றி ௨ டிரா ஏழு வெற்றி இரண்டு டிரா + +CARDINAL ௨ பவுண்டரிகள் இரண்டு பவுண்டரிகள் + +CARDINAL ௬ ரன்கள் ௫ விக்கெட்டுகள் ஆறு ரன்கள் ஐந்து விக்கெட்டுகள் + +CARDINAL ௭ பந்துகள் ௧௧ ரன்கள் ஏழு பந்துகள் பதினொன்று ரன்கள் + +CARDINAL ௬ சாக்லேட்டுகள் ௪ டாபிகள் ஆறு சாக்லேட்டுகள் நான்கு டாபிகள் + +CARDINAL ௮ வெண்கலங்கள் ௨ தங்கங்கள் எட்டு வெண்கலங்கள் இரண்டு தங்கங்கள் + +CARDINAL ௧ தங்கப் பதக்கம் ஒன்று தங்கப் பதக்கம் + +CARDINAL ௩ ரன்கள் மூன்று ரன்கள் + +CARDINAL ௫ ஓவர்கள் ஐந்து ஓவர்கள் + +CARDINAL ௬ பந்து ஆறு பந்து + +CARDINAL ௩ இன்னிங்ஸ் மூன்று இன்னிங்ஸ் + +CARDINAL வசனம் ௭ பாடம் ௧௫ வசனம் ஏழு பாடம் பதினைந்து + +CARDINAL பாடம் எண் ௨ வசனம் ௪ பாடம் எண் இரண்டு வசனம் நான்கு + +CARDINAL பக்க எண் ௮ பத்தி ௬ பக்க எண் எட்டு பத்தி ஆறு + +CARDINAL ௨ பந்துகள் ௪ ரன்கள் இரண்டு பந்துகள் நான்கு ரன்கள் + +CARDINAL ௬ விக்கெட்டுகள் ஆறு விக்கெட்டுகள் + +CARDINAL ௨ புள்ளி ௫ கோல்கள் இரண்டு புள்ளி ஐந்து கோல்கள் + +CARDINAL பாடம் ௧௦ ஸ்லோகம் ௨ பாடம் பத்து ஸ்லோகம் இரண்டு + +CARDINAL அத்தியாயம் ௫ காட்சி ௬ அத்தியாயம் ஐந்து காட்சி ஆறு + +CARDINAL ௬ கேள்விகள் ௫ தவறு ஆறு கேள்விகள் ஐந்து தவறு + +CARDINAL ௩ ரோஜா ௪ மல்லிகை ௨ சாமந்தி மூன்று ரோஜா நான்கு மல்லிகை இரண்டு சாமந்தி + +CARDINAL ௨ ஃப்ரீ ஹிட் ௧ நோ பால் இரண்டு ஃப்ரீ ஹிட் ஒன்று நோ பால் + +CARDINAL ௩ போன் ௧ சார்ஜர் மூன்று போன் ஒன்று சார்ஜர் + +CARDINAL ௬ டிரா ௭ தோல்வி ௯ வெற்றி ஆறு டிரா ஏழு தோல்வி ஒன்பது வெற்றி + +CARDINAL ௪ கார் ௨ பைக் நான்கு கார் இரண்டு பைக் + +CARDINAL ௧ கூடை ௮ பழம் ஒன்று கூடை எட்டு பழம் + +CARDINAL ௩ வரிசை ௮ நபர் மூன்று வரிசை எட்டு நபர் + +CARDINAL ௧௦ பென்சில் ௨ பேனா பத்து பென்சில் இரண்டு பேனா + +CARDINAL ௫ கட்டிடம் ஐந்து கட்டிடம் + +CARDINAL ௬ குழந்தை ஆறு குழந்தை + +CARDINAL பத்தி ௧௩ வரிசை ௪ பத்தி பதிமூன்று வரிசை நான்கு + +CARDINAL ௩ தங்கம் ௪ வெள்ளி மூன்று தங்கம் நான்கு வெள்ளி + +CARDINAL ௫ குழிகள் ஐந்து குழிகள் + +CARDINAL ௮ குப்பம் எட்டு குப்பம் + +CARDINAL ௩ லேப்டாப் மூன்று லேப்டாப் + +CARDINAL ௧ சிக்ஸர் ௨ பவுண்டரிகள் ஒன்று சிக்ஸர் இரண்டு பவுண்டரிகள் + +CARDINAL ௫ பஸ் ஐந்து பஸ் + +CARDINAL ௨ லாரி இரண்டு லாரி + +CARDINAL ௩ வண்டி மூன்று வண்டி + +CARDINAL ௬ சுறா ௩௦ முதலீட்டாளர்கள் ஆறு சுறா முப்பது முதலீட்டாளர்கள் + +CARDINAL ௨ அமைச்சர் ௫௦ பிரச்சனைகள் இரண்டு அமைச்சர் ஐம்பது பிரச்சனைகள் + +CARDINAL ௬ பவுலர் ஆறு பவுலர் + +CARDINAL ஸ்லோகம் ௩ பாடம் ௧ ஸ்லோகம் மூன்று பாடம் ஒன்று + +CARDINAL வரிசை ௬ பத்தி ௯ வரிசை ஆறு பத்தி ஒன்பது + +CARDINAL புத்தகம் ௧ பாடம் ௮ புத்தகம் ஒன்று பாடம் எட்டு + +CARDINAL சிறுகதை எண் ௨ வரிசை ௬ சிறுகதை எண் இரண்டு வரிசை ஆறு + +CARDINAL கைதி எண் ௪ கைதி எண் நான்கு + +CARDINAL பக்க எண் ௧௦ வரிசை ௨ பக்க எண் பத்து வரிசை இரண்டு + +CARDINAL ௪ மருத்துவர் நான்கு மருத்துவர் + +CARDINAL ௨ பந்து ௩ ரன் இரண்டு பந்து மூன்று ரன் + +CARDINAL புள்ளிகள் ௨ கோல் ௪ புள்ளிகள் இரண்டு கோல் நான்கு + +CARDINAL பாடம் எண் ௪ பாடம் எண் நான்கு + +CARDINAL ௮ ஓவர் எட்டு ஓவர் + +CARDINAL ௭ ரன் ௨ ஓவர் ஏழு ரன் இரண்டு ஓவர் + +CARDINAL ௪ பந்து ௮ ரன் நான்கு பந்து எட்டு ரன் + +CARDINAL ௩ பாட்டில் ௫ கிளாஸ் மூன்று பாட்டில் ஐந்து கிளாஸ் + +CARDINAL ௬ ரன் ஆறு ரன் + +CARDINAL ௬ கோல் ஆறு கோல் + +CARDINAL ௧௦ புள்ளிகள் ௩ கோல் பத்து புள்ளிகள் மூன்று கோல் + +CARDINAL ௧௪ சிக்ஸர் ௩ பவுண்டரி பதினான்கு சிக்ஸர் மூன்று பவுண்டரி + +CARDINAL ௬ ஆப்பிள் ௩ வாழைப்பழம் ஆறு ஆப்பிள் மூன்று வாழைப்பழம் + +CARDINAL ௩ மேட்ச் டிரா மூன்று மேட்ச் டிரா + +CARDINAL ௬ மேட்ச் தோல்வி ஆறு மேட்ச் தோல்வி + +CARDINAL ௯ மேட்ச் வெற்றி ஒன்பது மேட்ச் வெற்றி + +CARDINAL ஸ்லோகம் ௬ பாடம் ௯ ஸ்லோகம் ஆறு பாடம் ஒன்பது + +CARDINAL பதம் ௪ வரிசை எண் ௩ பதம் நான்கு வரிசை எண் மூன்று + +CARDINAL பாடம் ௧௦ பக்கம் ௪ பாடம் பத்து பக்கம் நான்கு + +CARDINAL ௫ கார் ௨ மோட்டார் சைக்கிள் ஐந்து கார் இரண்டு மோட்டார் சைக்கிள் + +CARDINAL ௭ புள்ளிகள் ௨ கோல் ஏழு புள்ளிகள் இரண்டு கோல் + +CARDINAL ௪ இரவு ௩ பகல் நான்கு இரவு மூன்று பகல் + +CARDINAL ௧ ஆஸ் ௧ ராணி ௫ சீட்டுகள் ஒன்று ஆஸ் ஒன்று ராணி ஐந்து சீட்டுகள் + +CARDINAL வரிசை ௨ பத்தி ௧ வரிசை இரண்டு பத்தி ஒன்று + +CARDINAL ௫ ஜோடி காலணி ஐந்து ஜோடி காலணி + +CARDINAL ௧௦ ஓவரில் ௯ ரன் பத்து ஓவரில் ஒன்பது ரன் + +CARDINAL ௮ ரன் எட்டு ரன் + +CARDINAL ௪ சிக்ஸர்கள் ௧ ஃபோர் நான்கு சிக்ஸர்கள் ஒன்று ஃபோர் + +CARDINAL பக்க எண் ௯ இன் வரிசை ௪ பக்க எண் ஒன்பதின் வரிசை நான்கு + +CARDINAL பாரா ௧௦ இன் பகுதி ௩ பாரா பத்தின் பகுதி மூன்று + +CARDINAL ஆயத் ௪ ருகூ ௬ ஆயத் நான்கு ருகூ ஆறு + +CARDINAL பாரா ௯ ருகூ ௬ பாரா ஒன்பது ருகூ ஆறு + +CARDINAL ௮ கால்சட்டைகள் ௯ சட்டைகள் எட்டு கால்சட்டைகள் ஒன்பது சட்டைகள் + +CARDINAL ௪ ரொட்டி ௨ காய்கறி நான்கு ரொட்டி இரண்டு காய்கறி + +CARDINAL ௩ மேட்ச் ௪ வெற்றி மூன்று மேட்ச் நான்கு வெற்றி + +CARDINAL ௪ தோல்வி ௩ வெற்றி ௧ டிரா நான்கு தோல்வி மூன்று வெற்றி ஒன்று டிரா + +CARDINAL படம் ௧௯ பாடம் ௨ படம் பத்தொன்பது பாடம் இரண்டு + +CARDINAL பாடம் ௧ பக்கம் ௧௨௨ பாடம் ஒன்று பக்கம் நூற்று இருபத்திரண்டு + +CARDINAL பாடம் ௩ வரிசை ௬ பாடம் மூன்று வரிசை ஆறு + +CARDINAL ஸ்லோகம் ௧௦ பக்கம் ௩ ஸ்லோகம் பத்து பக்கம் மூன்று + +CARDINAL ௬ புள்ளிகள் ௩ கோல் ஆறு புள்ளிகள் மூன்று கோல் + +CARDINAL ௨ டெஸ்ட் போட்டிகள் ௬ ஒருநாள் போட்டிகள் இரண்டு டெஸ்ட் போட்டிகள் ஆறு ஒருநாள் போட்டிகள் + +CARDINAL ௨ ஓவரில் ௭ ரன் இரண்டு ஓவரில் ஏழு ரன் + +CARDINAL ௮ ஓவரில் ௪௫ ரன் எட்டு ஓவரில் நாற்பத்தைந்து ரன் + +CARDINAL ௯ ஓவரில் ௬௦ ரன் ஒன்பது ஓவரில் அறுபது ரன் + +CARDINAL ௫ போட்டிகள் ௪ வெற்றிகள் ஐந்து போட்டிகள் நான்கு வெற்றிகள் + +CARDINAL ௨ வெற்றி ௪ தோல்வி ௫ டிரா இரண்டு வெற்றி நான்கு தோல்வி ஐந்து டிரா + +CARDINAL ஸ்லோகம் ௯ பக்கம் ௭ ஸ்லோகம் ஒன்பது பக்கம் ஏழு + +CARDINAL ௨ பக்கம் ௬௬ இரண்டு பக்கம் அறுபத்தாறு + +CARDINAL ௨ டயகிராம் ௧௩ பக்க எண் இரண்டு டயகிராம் பதிமூன்று பக்க எண் + +CARDINAL பட எண் ௮ பாடம் ௪ பட எண் எட்டு பாடம் நான்கு + +CARDINAL பக்க எண் ௧௦ பாடம் ௩ பக்க எண் பத்து பாடம் மூன்று + +CARDINAL ருகு ௩ ஆயத் ௮ ருகு மூன்று ஆயத் எட்டு + +CARDINAL ருகு ௪ ஆயத் ௬ வரி ௩௩ ருகு நான்கு ஆயத் ஆறு வரி முப்பத்து மூன்று + +CARDINAL பாரா ௨ ருகு ௭ வரி ௧௫ பாரா இரண்டு ருகு ஏழு வரி பதினைந்து + +CARDINAL ௩௦ பாரா வரி ௮ முப்பது பாரா வரி எட்டு + +CARDINAL ௪ சிக்ஸர்கள் ௧௨ ஃபோர்கள் நான்கு சிக்ஸர்கள் பன்னிரண்டு ஃபோர்கள் + +CARDINAL ௫ புள்ளிகள் ௭ கோல்கள் ஐந்து புள்ளிகள் ஏழு கோல்கள் + +CARDINAL பதிப்பு ௨ தலைமுறை ௪ பதிப்பு இரண்டு தலைமுறை நான்கு + +CARDINAL ௮ செங்கற்கள் ௩௨ கற்கள் எட்டு செங்கற்கள் முப்பத்திரண்டு கற்கள் + +CARDINAL ௯ ஓவரில் ௧௫ ரன்கள் ஒன்பது ஓவரில் பதினைந்து ரன்கள் + +CARDINAL ௪ விக்கெட் ௧௧௩ ரன்கள் நான்கு விக்கெட் நூற்று பதின்மூன்று ரன்கள் + +CARDINAL ௭ விக்கெட் ௨௧௧ ரன்கள் ஏழு விக்கெட் இருநூற்று பதினொன்று ரன்கள் + +CARDINAL ௪ சிக்ஸர்கள் ௫ ஃபோர்கள் ௪௪ ரன்கள் நான்கு சிக்ஸர்கள் ஐந்து ஃபோர்கள் நாற்பத்துநான்கு ரன்கள் + +CARDINAL ருகு ௮ வரி ௧௦ ருகு எட்டு வரி பத்து + +CARDINAL பாடம் ௯ வரி ௧௩ பாடம் ஒன்பது வரி பதிமூன்று + +CARDINAL பகுதி ௧௦ வரி ௬ சுலோகம் ௨ பகுதி பத்து வரி ஆறு சுலோகம் இரண்டு + +CARDINAL பகுதி ௧௨ சுலோகம் ௩ வரி ௧௭ பகுதி பன்னிரண்டு சுலோகம் மூன்று வரி பதினேழு + +CARDINAL ௭ ஓவர் ஏழு ஓவர் + +CARDINAL ௬ ஃபோர்கள் ஆறு ஃபோர்கள் + +CARDINAL ௩ ஒருநாள் ௫ டெஸ்ட் போட்டிகள் மூன்று ஒருநாள் ஐந்து டெஸ்ட் போட்டிகள் + +CARDINAL ௭ வீரர்கள் ௨ காயம் ஏழு வீரர்கள் இரண்டு காயம் + +CARDINAL பதிப்பு ௩ தலைமுறை ௧௦ பதிப்பு மூன்று தலைமுறை பத்து + +CARDINAL ருகு ௧௪ பாரா ௮ ருகு பதினான்கு பாரா எட்டு + +CARDINAL சுலோகம் ௮ பாடம் ௬ சுலோகம் எட்டு பாடம் ஆறு + +CARDINAL விரிவுரை ௩ வகுப்பு ௮ விரிவுரை மூன்று வகுப்பு எட்டு + +CARDINAL வகுப்பு ௧௦ பிரிவு ௨ வகுப்பு பத்து பிரிவு இரண்டு + +CARDINAL ௩ டிரா ௨ தோல்வி மூன்று டிரா இரண்டு தோல்வி + +CARDINAL சுலோகம் ௩ பாடம் ௧௧ சுலோகம் மூன்று பாடம் பதினொன்று + +CARDINAL வரி ௬ பாடம் ௧௦ வரி ஆறு பாடம் பத்து + +CARDINAL ருகு ௨ பாரா ௧௫ ருகு இரண்டு பாரா பதினைந்து + +CARDINAL ௪ சிக்ஸர்கள் ௫ பந்துகள் நான்கு சிக்ஸர்கள் ஐந்து பந்துகள் + +CARDINAL ௨ பந்துகள் ௧ ரன் இரண்டு பந்துகள் ஒரு ரன் + +CARDINAL வரி ௮ அத்தியாயம் ௧௯ வரி எட்டு அத்தியாயம் பத்தொன்பது + +CARDINAL பக்கம் ௧௦ பத்தி ௨ பக்கம் பத்து பத்தி இரண்டு + +CARDINAL ௯ ஓவரில் ௧௭ ரன்கள் ஒன்பது ஓவரில் பதினேழு ரன்கள் + +CARDINAL ரன்கள் ௪ பந்துகளில் ௬ ரன்கள் ரன்கள் நான்கு பந்துகளில் ஆறு ரன்கள் + +CARDINAL ௧௭ பந்துகளில் ௧௦ ரன்கள் பதினேழு பந்துகளில் பத்து ரன்கள் + +CARDINAL ௫ ஓவர் ௬௬ ரன்கள் ஐந்து ஓவர் அறுபத்தாறு ரன்கள் + +CARDINAL ௮ புள்ளிகள் ௯ கோல்கள் எட்டு புள்ளிகள் ஒன்பது கோல்கள் + +CARDINAL ௫ கொய்யாப்பழங்கள் ஐந்து கொய்யாப்பழங்கள் + +CARDINAL ௬ ருகு ௭ பாரா ஆறு ருகு ஏழு பாரா + +CARDINAL சு லோகம் ௮ பதம் ௯ சு லோகம் எட்டு பதம் ஒன்பது + +CARDINAL ௭ ஓவரில் ௨௧ ரன்கள் ஏழு ஓவரில் இருபத்தொன்று ரன்கள் + +CARDINAL ௧ ஓவரில் ௩ ரன்கள் ஒரு ஓவரில் மூன்று ரன்கள் + +CARDINAL ௭ சிக்ஸர்கள் ௫ ஃபோர்கள் ஏழு சிக்ஸர்கள் ஐந்து ஃபோர்கள் + +CARDINAL ௩ சுலோகங்கள் மூன்று சுலோகங்கள் + +CARDINAL ௬ பக்கங்கள் ஆறு பக்கங்கள் + +CARDINAL ௫ சிக்ஸர்கள் ஐந்து சிக்ஸர்கள் + +CARDINAL ௩ பாட்டில்கள் ௧௦ கண்ணாடிகள் மூன்று பாட்டில்கள் பத்து கண்ணாடிகள் + +CARDINAL ௩ போட்டிகள் மூன்று போட்டிகள் + +CARDINAL ௬ போட்டிகள் ௪ டிரா ஆறு போட்டிகள் நான்கு டிரா + +CARDINAL ௨ பந்துகளில் ௩ ரன்கள் இரண்டு பந்துகளில் மூன்று ரன்கள் + +CARDINAL ௩ புள்ளிகள் ௪ கோல்கள் மூன்று புள்ளிகள் நான்கு கோல்கள் + +CARDINAL ஆயத் ௪ வரி ௯ ஆயத் நான்கு வரி ஒன்பது + +CARDINAL பாரா ௪ ருகு ௧௦ வரி ௧௭ பாரா நான்கு ருகு பத்து வரி பதினேழு + +CARDINAL பாரா ௬ ருகு ௨௫ வரி ௨௦ பாரா ஆறு ருகு இருபத்தைந்து வரி இருபது + +CARDINAL பாடம் ௩ தோஹா ௪ வரி ௨ பாடம் மூன்று தோஹா நான்கு வரி இரண்டு + +CARDINAL வரி ௮ சொல் ௬ வரி எட்டு சொல் ஆறு + +CARDINAL கட்டுரை ௧௦ பத்தி ௨ கட்டுரை பத்து பத்தி இரண்டு + +CARDINAL ௭ ஸ்வரங்கள் ஏழு ஸ்வரங்கள் + +CARDINAL பாடல் ௪ முகடை ௨ பாடல் நான்கு முகடை இரண்டு + +CARDINAL டிக்கெட் எண் ௯ வரி ௮ டிக்கெட் எண் ஒன்பது வரி எட்டு + +CARDINAL ஆயத் ௧௦ வரி ௧௮ ஆயத் பத்து வரி பதினெட்டு + +CARDINAL ௬ ஓவர் ௨௦ ரன்கள் ஆறு ஓவர் இருபது ரன்கள் + +CARDINAL ௮௦ ரன்கள் ௩ விக்கெட்டுகள் எண்பது ரன்கள் மூன்று விக்கெட்டுகள் + +CARDINAL ௪ ஸ்பின்னர்கள் ௩ பேட்ஸ்மேன்கள் ௧ விக்கெட் கீப்பர் நான்கு ஸ்பின்னர்கள் மூன்று பேட்ஸ்மேன்கள் ஒரு விக்கெட் கீப்பர் + +CARDINAL ௧ கோல் கீப்பர் ௬ வீரர்கள் ஒரு கோல் கீப்பர் ஆறு வீரர்கள் + +CARDINAL பாடம் ௧௮ பதம் ௫ பாடம் பதினெட்டு பதம் ஐந்து + +CARDINAL தோஹா ௬ வரி ௯ தோஹா ஆறு வரி ஒன்பது + +CARDINAL படம் ௬ பக்கம் ௮௦ படம் ஆறு பக்கம் எண்பது + +CARDINAL ௨ டிரா ௩ வெற்றி இரண்டு டிரா மூன்று வெற்றி + +CARDINAL ௪ வைவா ௩ தேர்வுகள் நான்கு வைவா மூன்று தேர்வுகள் + +CARDINAL ௪ தேர்வுகள் ௬ செஷனல்கள் நான்கு தேர்வுகள் ஆறு செஷனல்கள் + +CARDINAL ௩ தட்டுகள் ௪ கிண்ணங்கள் ௨ கரண்டிகள் மூன்று தட்டுகள் நான்கு கிண்ணங்கள் இரண்டு கரண்டிகள் + +CARDINAL ௪ டிரா ௫ வெற்றி நான்கு டிரா ஐந்து வெற்றி + +CARDINAL ௮ சிக்ஸர்கள் ௧௪ ஃபோர்கள் எட்டு சிக்ஸர்கள் பதினான்கு ஃபோர்கள் + +CARDINAL ௫ ஓவர்கள் ௪ விக்கெட்டுகள் ஐந்து ஓவர்கள் நான்கு விக்கெட்டுகள் + +CARDINAL ௩ ரன்கள் ௨ விக்கெட்டுகள் மூன்று ரன்கள் இரண்டு விக்கெட்டுகள் + +CARDINAL ௬ ஓவர்கள் ௪ ரன்கள் ஆறு ஓவர்கள் நான்கு ரன்கள் + +CARDINAL ௪ டெஸ்ட் போட்டிகள் ௧ ஒருநாள் போட்டி நான்கு டெஸ்ட் போட்டிகள் ஒரு ஒருநாள் போட்டி + +CARDINAL ௨ புள்ளிகள் ௧௨ கோல்கள் இரண்டு புள்ளிகள் பன்னிரண்டு கோல்கள் + +CARDINAL ௭ கரண்டிகள் உடைந்தன ஏழு கரண்டிகள் உடைந்தன + +CARDINAL ௧௦ இல் ௬ மதிப்பெண்கள் பத்தில் ஆறு மதிப்பெண்கள் + +CARDINAL பாடம் ௨ பக்க எண் ௧௨ பாடம் இரண்டு பக்க எண் பன்னிரண்டு + +CARDINAL ௧ ஓவரில் ௬ பந்துகள் ஒரு ஓவரில் ஆறு பந்துகள் + +CARDINAL ௭ ஷாட்டுகள் சரியாக பட்டன ஏழு ஷாட்டுகள் சரியாக பட்டன + +CARDINAL இந்தியாவுக்கு ௪ புள்ளிகள் முன்னிலை இந்தியாவுக்கு நான்கு புள்ளிகள் முன்னிலை + +CARDINAL சதத்திற்கு ௩ ரன்கள் மீதம் சதத்திற்கு மூன்று ரன்கள் மீதம் + +CARDINAL ௧ தோல்வி ௨ டிரா ஒரு தோல்வி இரண்டு டிரா + +CARDINAL அர்ஜென்டினா ௨ புள்ளிகள் பின்தங்கி அர்ஜென்டினா இரண்டு புள்ளிகள் பின்தங்கி + +CARDINAL ௨ கோல்கள் அடிக்கப்பட்டன இரண்டு கோல்கள் அடிக்கப்பட்டன + +CARDINAL ௮ கூடுதல் ரன்கள் எட்டு கூடுதல் ரன்கள் + +CARDINAL ௪ வைடு பந்துகள் நான்கு வைடு பந்துகள் + +CARDINAL வகுப்பு ௯ வகுப்பு ஒன்பது + +CARDINAL வகுப்பு ௫ வகுப்பு ஐந்து + +CARDINAL ௯ பகுதிகள் ஒன்பது பகுதிகள் + +CARDINAL வகுப்பு ௪ பாடம் ௩ வகுப்பு நான்கு பாடம் மூன்று + +CARDINAL பாடம் ௯ பாடம் ஒன்பது + +CARDINAL பக்க எண் ௮ பக்க எண் எட்டு + +CARDINAL ௪ பாட்டில்கள் நான்கு பாட்டில்கள் + +CARDINAL ௧௦௦ இல் ௪ மதிப்பெண்கள் நூற்றில் நான்கு மதிப்பெண்கள் + +CARDINAL ௮ மதிப்பெண்கள் எட்டு மதிப்பெண்கள் + +CARDINAL கண்ணாடி எண் ௨ கண்ணாடி எண் இரண்டு + +CARDINAL ௭ செருப்புகள் ஏழு செருப்புகள் + +CARDINAL ௫ காலணிகள் ஐந்து காலணிகள் + +CARDINAL ௨ சாண்டல்கள் இரண்டு சாண்டல்கள் + +CARDINAL ௭ விளையாட்டுகளில் வெற்றி ஏழு விளையாட்டுகளில் வெற்றி + +CARDINAL ௬ மூடிகள் ஆறு மூடிகள் + +CARDINAL ௧௦௦௦ ரூபாய் ௨ நோட்டுகள் ஆயிரம் ரூபாய் இரண்டு நோட்டுகள் + +CARDINAL ௧௯ இல் ௩ கண்ணாடிகள் பத்தொன்பதில் மூன்று கண்ணாடிகள் + +CARDINAL பக்கம் ௧௯௯ பாடம் ௬ பக்கம் நூற்று தொண்ணூற்றொன்பது பாடம் ஆறு + +CARDINAL ௮ பாராக்கள் எட்டு பாராக்கள் + +CARDINAL பகுதி ௫ பாடம் ௧௯ பகுதி ஐந்து பாடம் பத்தொன்பது + +CARDINAL ௮௦ ரன்கள் ௬ விக்கெட்டுகள் எண்பது ரன்கள் ஆறு விக்கெட்டுகள் + +CARDINAL ௯ கூடுதல் ரன்கள் ஒன்பது கூடுதல் ரன்கள் + +CARDINAL ௧௧ பந்துகள் ௮ ரன்கள் பதினொன்று பந்துகள் எட்டு ரன்கள் + +CARDINAL ௨ மஞ்சள் ௮ சிவப்பு அட்டைகள் இரண்டு மஞ்சள் எட்டு சிவப்பு அட்டைகள் + +CARDINAL அத்தியாயம் ௧௨ சுலோகம் ௮ அத்தியாயம் பன்னிரண்டு சுலோகம் எட்டு + +CARDINAL பக்கம் ௮௮ அத்தியாயம் ௭ பக்கம் எண்பத்தெட்டு அத்தியாயம் ஏழு + +CARDINAL ௧௦௦ ரன்கள் ௫ விக்கெட்டுகள் நூறு ரன்கள் ஐந்து விக்கெட்டுகள் + +CARDINAL ௮ கோல்களால் வெற்றி எட்டு கோல்களால் வெற்றி + +CARDINAL ௩ சக்கர வாகனம் மூன்று சக்கர வாகனம் + +CARDINAL அத்தியாயம் ௧௯ பகுதி ௪ அத்தியாயம் பத்தொன்பது பகுதி நான்கு + +CARDINAL ௧௧ மாதங்கள் ௮ நாட்கள் பதினொன்று மாதங்கள் எட்டு நாட்கள் + +CARDINAL ௯ நாட்கள் ௧௨ மணி நேரம் ஒன்பது நாட்கள் பன்னிரண்டு மணி நேரம் + +CARDINAL ௪ கட்டுகள் ௧௩ அட்டைகள் நான்கு கட்டுகள் பதிமூன்று அட்டைகள் + +CARDINAL ௭ போட்டிகள் ௧௨ விக்கெட்டுகள் ஏழு போட்டிகள் பன்னிரண்டு விக்கெட்டுகள் + +CARDINAL ௧ மனிதன் ஒரு மனிதன் + +CARDINAL ௨ பெண்கள் இரண்டு பெண்கள் + +CARDINAL ௩ குழந்தைகள் மூன்று குழந்தைகள் + +CARDINAL ௪ புத்தகங்கள் நான்கு புத்தகங்கள் + +CARDINAL ௫ அறைகள் ஐந்து அறைகள் + +CARDINAL ௬ வீடுகள் ஆறு வீடுகள் + +CARDINAL ௭ பக்கங்கள் ஏழு பக்கங்கள் + +CARDINAL ௮ நாணயங்கள் எட்டு நாணயங்கள் + +CARDINAL ௯ பெட்டிகள் ஒன்பது பெட்டிகள் + +CARDINAL ௧௦ வேலைகள் பத்து வேலைகள் + +CARDINAL ௧௧ பழங்கள் ௨ பூக்கள் பதினொன்று பழங்கள் இரண்டு பூக்கள் + +CARDINAL ௩ பூக்கள் மூன்று பூக்கள் + +CARDINAL ௧௩ பூந்தொட்டிகள் ௪ செடிகள் பதிமூன்று பூந்தொட்டிகள் நான்கு செடிகள் + +CARDINAL ௪ பப்பாளிப்பழங்கள் நான்கு பப்பாளிப்பழங்கள் + +CARDINAL ௫ மாம்பழங்கள் ஐந்து மாம்பழங்கள் + +CARDINAL ௬ வாழைப்பழங்கள் ஆறு வாழைப்பழங்கள் + +CARDINAL ௭ திராட்சைப்பழங்கள் ஏழு திராட்சைப்பழங்கள் + +CARDINAL ௮ ஆரஞ்சுப்பழங்கள் எட்டு ஆரஞ்சுப்பழங்கள் + +CARDINAL ௯ ஆப்பிள்கள் ஒன்பது ஆப்பிள்கள் + +CARDINAL ௧௦ சப்போட்டா பழங்கள் பத்து சப்போட்டா பழங்கள் + +CARDINAL ௧ தாமரை ஒரு தாமரை + +CARDINAL ௨ கற்கள் இரண்டு கற்கள் + +CARDINAL ௩ நாற்காலிகள் மூன்று நாற்காலிகள் + +CARDINAL ௪ பைகள் நான்கு பைகள் + +CARDINAL ௫ தொலைபேசிகள் ஐந்து தொலைபேசிகள் + +CARDINAL ௬ அறைகள் ஆறு அறைகள் + +CARDINAL ௭ பெண்கள் ஏழு பெண்கள் + +CARDINAL ௮ புத்தகங்கள் எட்டு புத்தகங்கள் + +CARDINAL ௯ வாகனங்கள் ஒன்பது வாகனங்கள் + +CARDINAL ௧௦ நதிகள் பத்து நதிகள் + +CARDINAL ௩ எருமைகள் மூன்று எருமைகள் + +CARDINAL ௨ காலணிகள் இரண்டு காலணிகள் + +CARDINAL ௩ நாய்கள் மூன்று நாய்கள் + +CARDINAL ௪ குதிரைகள் நான்கு குதிரைகள் + +CARDINAL ௫ மகன்கள் ஐந்து மகன்கள் + +CARDINAL ௬ சேவல்கள் ஆறு சேவல்கள் + +CARDINAL ௭ கழுதைகள் ஏழு கழுதைகள் + +CARDINAL ௮ சிறுமிகள் எட்டு சிறுமிகள் + +CARDINAL ௯ சிறுவர்கள் ஒன்பது சிறுவர்கள் + +CARDINAL ௧௦ கேள்விகள் பத்து கேள்விகள் + +CARDINAL ௧ சட்டை ஒரு சட்டை + +CARDINAL ௨ படகுகள் இரண்டு படகுகள் + +CARDINAL ௩ பெட்டிகள் மூன்று பெட்டிகள் + +CARDINAL ௪ மூடிகள் நான்கு மூடிகள் + +CARDINAL ௫ நோட்டுகள் ஐந்து நோட்டுகள் + +CARDINAL ௬ நாணயங்கள் ஆறு நாணயங்கள் + +CARDINAL ௭ காயங்கள் ஏழு காயங்கள் + +CARDINAL ௮ நிறங்கள் எட்டு நிறங்கள் + +CARDINAL ௯ மக்கள் ஒன்பது மக்கள் + +CARDINAL ௧௦ நாட்கள் பத்து நாட்கள் + +CARDINAL ௫ விஷயங்கள் ஐந்து விஷயங்கள் + +CARDINAL ௨ மருந்துகள் இரண்டு மருந்துகள் + +CARDINAL ௩ கூடுகள் மூன்று கூடுகள் + +CARDINAL ௪ தோழிகள் நான்கு தோழிகள் + +CARDINAL ௫ செடிகள் ஐந்து செடிகள் + +CARDINAL ௬ திரைகள் ஆறு திரைகள் + +CARDINAL ௭ பூனைகள் ஏழு பூனைகள் + +CARDINAL ௮ எலிகள் எட்டு எலிகள் + +CARDINAL ௯ வாகனங்கள் ஒன்பது வாகனங்கள் + +CARDINAL ௧௦ கண்கள் பத்து கண்கள் + +CARDINAL ௬ சுவர்கள் ஆறு சுவர்கள் + +CARDINAL ௨ கடிகாரங்கள் இரண்டு கடிகாரங்கள் + +CARDINAL ௩ பப்பாளிப்பழங்கள் மூன்று பப்பாளிப்பழங்கள் + +CARDINAL ௪ மிதிவண்டிகள் நான்கு மிதிவண்டிகள் + +CARDINAL ௫ ஜன்னல்கள் ஐந்து ஜன்னல்கள் + +CARDINAL ௬ கிளைகள் ஆறு கிளைகள் + +CARDINAL ௭ பொம்மைகள் ஏழு பொம்மைகள் + +CARDINAL ௮ கவிதைகள் எட்டு கவிதைகள் + +CARDINAL ௯ கதைகள் ஒன்பது கதைகள் + +CARDINAL ௧௦ கதைகள் பத்து கதைகள் + +CARDINAL ௭ மொட்டுகள் ஏழு மொட்டுகள் + +CARDINAL ௨ கோழிகள் இரண்டு கோழிகள் + +CARDINAL ௩ தெருக்கள் மூன்று தெருக்கள் + +CARDINAL ௪ தேதிகள் நான்கு தேதிகள் + +CARDINAL ௫ கருவிகள் ஐந்து கருவிகள் + +CARDINAL ௬ கன்னியர்கள் ஆறு கன்னியர்கள் + +CARDINAL ௭ தட்டுகள் ஏழு தட்டுகள் + +CARDINAL ௮ பெண்கள் எட்டு பெண்கள் + +CARDINAL ௯ இரவுகள் ஒன்பது இரவுகள் + +CARDINAL ௧௦ காய்கறிகள் பத்து காய்கறிகள் + +CARDINAL ௮ குழந்தைகள் எட்டு குழந்தைகள் + +CARDINAL ௨ தொப்பிகள் இரண்டு தொப்பிகள் + +CARDINAL ௩ சிறுமிகள் மூன்று சிறுமிகள் + +CARDINAL ௪ நதிகள் நான்கு நதிகள் + +CARDINAL ௫ பெண்கள் ஐந்து பெண்கள் + +CARDINAL ௬ பொட்டுகள் ஆறு பொட்டுகள் + +CARDINAL ௭ பெட்டிகள் ஏழு பெட்டிகள் + +CARDINAL ௯ பொம்மைகள் ஒன்பது பொம்மைகள் + +CARDINAL ௧௦ கதைகள் பத்து கதைகள் + +CARDINAL ௯ இதழ்கள் ஒன்பது இதழ்கள் + +CARDINAL ௨ கொடிகள் இரண்டு கொடிகள் + +CARDINAL ௩ கவிதைகள் மூன்று கவிதைகள் + +CARDINAL ௪ ஏரிகள் நான்கு ஏரிகள் + +CARDINAL ௫ செருப்புகள் ஐந்து செருப்புகள் + +CARDINAL ௬ பசுக்கள் ஆறு பசுக்கள் + +CARDINAL ௭ சாலைகள் ஏழு சாலைகள் + +CARDINAL ௮ கண்கள் எட்டு கண்கள் + +CARDINAL ௧௦ பேச்சுகள் பத்து பேச்சுகள் + +CARDINAL ௧௦௧ நூற்று ஒன்று + +CARDINAL ௧௦௨ நூற்று இரண்டு + +CARDINAL ௧௦௩ நூற்று மூன்று + +CARDINAL ௧௦௪ நூற்று நான்கு + +CARDINAL ௧௦௫ நூற்று ஐந்து + +CARDINAL ௧௦௬ நூற்று ஆறு + +CARDINAL ௧௦௭ நூற்று ஏழு + +CARDINAL ௧௦௮ நூற்று எட்டு + +CARDINAL ௧௦௯ நூற்று ஒன்பது + +CARDINAL ௧௧௦ நூற்று பத்து + +CARDINAL ௧௧௧ நூற்று பதினொன்று + +CARDINAL ௧௧௨ நூற்று பன்னிரண்டு + +CARDINAL ௧௧௩ நூற்று பதின்மூன்று + +CARDINAL ௧௧௪ நூற்று பதினான்கு + +CARDINAL ௧௧௫ நூற்று பதினைந்து + +CARDINAL ௧௧௬ நூற்று பதினாறு + +CARDINAL ௮௧௭ எண்ணூற்று பதினேழு + +CARDINAL ௮௧௮ எண்ணூற்று பதினெட்டு + +CARDINAL ௮௧௯ எண்ணூற்று பத்தொன்பது + +CARDINAL ௮௨௦ எண்ணூற்று இருபது + +CARDINAL ௮௨௧ எண்ணூற்று இருபத்து ஒன்று + +CARDINAL ௮௨௨ எண்ணூற்று இருபத்து இரண்டு + +CARDINAL ௮௨௩ எண்ணூற்று இருபத்து மூன்று + +CARDINAL ௮௨௪ எண்ணூற்று இருபத்து நான்கு + +CARDINAL ௮௨௫ எண்ணூற்று இருபத்து ஐந்து + +CARDINAL ௮௨௬ எண்ணூற்று இருபத்து ஆறு + +CARDINAL ௮௨௭ எண்ணூற்று இருபத்து ஏழு + +CARDINAL ௮௨௮ எண்ணூற்று இருபத்து எட்டு + +CARDINAL ௮௨௯ எண்ணூற்று இருபத்து ஒன்பது + +CARDINAL ௮௩௦ எண்ணூற்று முப்பது + +CARDINAL ௮௩௧ எண்ணூற்று முப்பத்து ஒன்று + +CARDINAL ௮௩௨ எண்ணூற்று முப்பத்து இரண்டு + +CARDINAL ௮௩௩ எண்ணூற்று முப்பத்து மூன்று + +CARDINAL ௮௩௪ எண்ணூற்று முப்பத்து நான்கு + +CARDINAL ௮௩௫ எண்ணூற்று முப்பத்து ஐந்து + +CARDINAL ௮௩௬ எண்ணூற்று முப்பத்து ஆறு + +CARDINAL ௭௩௮ எழுநூற்று முப்பத்து எட்டு + +CARDINAL ௭௩௯ எழுநூற்று முப்பத்து ஒன்பது + +CARDINAL ௭௪௦ எழுநூற்று நாற்பது + +CARDINAL ௭௪௧ எழுநூற்று நாற்பத்து ஒன்று + +CARDINAL ௭௪௨ எழுநூற்று நாற்பத்து இரண்டு + +CARDINAL ௭௪௩ எழுநூற்று நாற்பத்து மூன்று + +CARDINAL ௭௪௪ எழுநூற்று நாற்பத்து நான்கு + +CARDINAL ௭௪௫ எழுநூற்று நாற்பத்து ஐந்து + +CARDINAL ௪௪௬ நானூற்று நாற்பத்து ஆறு + +CARDINAL ௪௪௭ நானூற்று நாற்பத்து ஏழு + +CARDINAL ௪௪௮ நானூற்று நாற்பத்து எட்டு + +CARDINAL ௪௪௯ நானூற்று நாற்பத்து ஒன்பது + +CARDINAL ௪௫௦ நானூற்று ஐம்பது + +CARDINAL ௪௬௧ நானூற்று அறுபத்து ஒன்று + +CARDINAL ௧௭௫ நூற்று எழுபத்து ஐந்து + +CARDINAL ௧௮௧ நூற்று எண்பத்து ஒன்று + +CARDINAL ௧௯௦ நூற்று தொண்ணூறு + +CARDINAL ௧௯௯ நூற்று தொண்ணூற்று ஒன்பது + +CARDINAL ௧௦௦௧ ஆயிரத்து ஒன்று + +CARDINAL ௧௦௦௨ ஆயிரத்து இரண்டு + +CARDINAL ௧௦௦௩ ஆயிரத்து மூன்று + +CARDINAL ௧௦௦௪ ஆயிரத்து நான்கு + +CARDINAL ௧௦௦௫ ஆயிரத்து ஐந்து + +CARDINAL ௧௦௦௬ ஆயிரத்து ஆறு + +CARDINAL ௧௦௦௭ ஆயிரத்து ஏழு + +CARDINAL ௧௦௦௮ ஆயிரத்து எட்டு + +CARDINAL ௧௦௦௯ ஆயிரத்து ஒன்பது + +CARDINAL ௧௦௧௦ ஆயிரத்து பத்து + +CARDINAL ௧௦௧௧ ஆயிரத்து பதினொன்று + +CARDINAL ௧௦௧௨ ஆயிரத்து பன்னிரண்டு + +CARDINAL ௧௦௧௩ ஆயிரத்து பதின்மூன்று + +CARDINAL ௧௦௧௪ ஆயிரத்து பதினான்கு + +CARDINAL ௧௦௧௫ ஆயிரத்து பதினைந்து + +CARDINAL ௧௦௧௬ ஆயிரத்து பதினாறு + +CARDINAL ௧௦௧௭ ஆயிரத்து பதினேழு + +CARDINAL ௧௦௧௮ ஆயிரத்து பதினெட்டு + +CARDINAL ௧௦௧௯ ஆயிரத்து பத்தொன்பது + +CARDINAL ௧௦௨௦ ஆயிரத்து இருபது + +CARDINAL ௧௦௨௧ ஆயிரத்து இருபத்து ஒன்று + +CARDINAL ௧௦௨௨ ஆயிரத்து இருபத்து இரண்டு + +CARDINAL ௧௧௨௩ ஆயிரத்து நூற்று இருபத்து மூன்று + +CARDINAL ௧௪௨௪ ஆயிரத்து நானூற்று இருபத்து நான்கு + +CARDINAL ௧௫௨௫ ஆயிரத்து ஐநூற்று இருபத்து ஐந்து + +CARDINAL ௧௩௨௬ ஆயிரத்து முன்னூற்று இருபத்து ஆறு + +CARDINAL ௧௪௨௭ ஆயிரத்து நானூற்று இருபத்து ஏழு + +CARDINAL ௧௬௨௮ ஆயிரத்து அறுநூற்று இருபத்து எட்டு + +CARDINAL ௧௭௨௯ ஆயிரத்து எழுநூற்று இருபத்து ஒன்பது + +CARDINAL ௧௮௩௦ ஆயிரத்து எண்ணூற்று முப்பது + +CARDINAL ௧௧௩௧ ஆயிரத்து நூற்று முப்பத்து ஒன்று + +CARDINAL ௧௨௩௨ ஆயிரத்து இருநூற்று முப்பத்து இரண்டு + +CARDINAL ௧௩௩௩ ஆயிரத்து முன்னூற்று முப்பத்து மூன்று + +CARDINAL ௧௪௩௪ ஆயிரத்து நானூற்று முப்பத்து நான்கு + +CARDINAL ௧௫௩௫ ஆயிரத்து ஐநூற்று முப்பத்து ஐந்து + +CARDINAL ௧௬௩௬ ஆயிரத்து அறுநூற்று முப்பத்து ஆறு + +CARDINAL ௧௭௩௭ ஆயிரத்து எழுநூற்று முப்பத்து ஏழு + +CARDINAL ௧௮௩௮ ஆயிரத்து எண்ணூற்று முப்பத்து எட்டு + +CARDINAL ௧௯௩௯ ஆயிரத்து தொள்ளுநூற்று முப்பத்து ஒன்பது + +CARDINAL ௧௦௪௦ ஆயிரத்து நாற்பது + +CARDINAL ௧௦௪௧ ஆயிரத்து நாற்பத்து ஒன்று + +CARDINAL ௧௦௪௨ ஆயிரத்து நாற்பத்து இரண்டு + +CARDINAL ௧௦௪௩ ஆயிரத்து நாற்பத்து மூன்று + +CARDINAL ௧௦௪௪ ஆயிரத்து நாற்பத்து நான்கு + +CARDINAL ௧௦௪௫ ஆயிரத்து நாற்பத்து ஐந்து + +CARDINAL ௧௦௪௬ ஆயிரத்து நாற்பத்து ஆறு + +CARDINAL ௧௦௪௭ ஆயிரத்து நாற்பத்து ஏழு + +CARDINAL ௧௦௪௮ ஆயிரத்து நாற்பத்து எட்டு + +CARDINAL ௧௦௪௯ ஆயிரத்து நாற்பத்து ஒன்பது + +CARDINAL ௧௦௫௦ ஆயிரத்து ஐம்பது + +CARDINAL ௧௦௬௧ ஆயிரத்து அறுபத்து ஒன்று + +CARDINAL ௧௦௭௫ ஆயிரத்து எழுபத்து ஐந்து + +CARDINAL ௧௦௮௧ ஆயிரத்து எண்பத்து ஒன்று + +CARDINAL ௧௦௯௦ ஆயிரத்து தொண்ணூறு + +CARDINAL ௧௦௯௯ ஆயிரத்து தொண்ணூற்று ஒன்பது + +CARDINAL ௧௦௦௦௧ பத்தாயிரத்து ஒன்று + +CARDINAL ௧௦௦௦௨ பத்தாயிரத்து இரண்டு + +CARDINAL ௧௦௨௦௩ பத்தாயிரத்து இருநூற்று மூன்று + +CARDINAL ௧௦௩௦௪ பத்தாயிரத்து முன்னூற்று நான்கு + +CARDINAL ௧௧௩௦௫ பதினொன்றாயிரத்து முன்னூற்று ஐந்து + +CARDINAL ௧௨௪௫௬ பன்னிரண்டாயிரத்து நானூற்று ஐம்பத்து ஆறு + +CARDINAL ௧௩௦௪௭ பதின்மூன்றாயிரத்து நாற்பத்து ஏழு + +CARDINAL ௧௦௦௦௮ பத்தாயிரத்து எட்டு + +CARDINAL ௧௦௦௦௯ பத்தாயிரத்து ஒன்பது + +CARDINAL ௧௦௦௧௦ பத்தாயிரத்து பத்து + +CARDINAL ௧௦௦௧௧ பத்தாயிரத்து பதினொன்று + +CARDINAL ௧௦௦௧௨ பத்தாயிரத்து பன்னிரண்டு + +CARDINAL ௧௦௦௧௩ பத்தாயிரத்து பதின்மூன்று + +CARDINAL ௧௦௦௧௪ பத்தாயிரத்து பதினான்கு + +CARDINAL ௧௦௦௧௫ பத்தாயிரத்து பதினைந்து + +CARDINAL ௧௦௦௧௬ பத்தாயிரத்து பதினாறு + +CARDINAL ௧௦௦௧௭ பத்தாயிரத்து பதினேழு + +CARDINAL ௧௦௦௧௮ பத்தாயிரத்து பதினெட்டு + +CARDINAL ௧௦௦௧௯ பத்தாயிரத்து பத்தொன்பது + +CARDINAL ௧௦௦௨௦ பத்தாயிரத்து இருபது + +CARDINAL ௧௦௦௨௧ பத்தாயிரத்து இருபத்து ஒன்று + +CARDINAL ௧௦௦௨௨ பத்தாயிரத்து இருபத்து இரண்டு + +CARDINAL ௧௦௦௨௩ பத்தாயிரத்து இருபத்து மூன்று + +CARDINAL ௧௦௦௨௪ பத்தாயிரத்து இருபத்து நான்கு + +CARDINAL ௧௦௦௨௫ பத்தாயிரத்து இருபத்து ஐந்து + +CARDINAL ௧௦௦௨௬ பத்தாயிரத்து இருபத்து ஆறு + +CARDINAL ௧௦௦௨௭ பத்தாயிரத்து இருபத்து ஏழு + +CARDINAL ௧௦௦௨௮ பத்தாயிரத்து இருபத்து எட்டு + +CARDINAL ௧௦௦௨௯ பத்தாயிரத்து இருபத்து ஒன்பது + +CARDINAL ௧௦௦௩௦ பத்தாயிரத்து முப்பது + +CARDINAL ௧௦௦௩௧ பத்தாயிரத்து முப்பத்து ஒன்று + +CARDINAL ௧௦௦௩௨ பத்தாயிரத்து முப்பத்து இரண்டு + +CARDINAL ௧௦௦௩௩ பத்தாயிரத்து முப்பத்து மூன்று + +CARDINAL ௧௦௦௩௪ பத்தாயிரத்து முப்பத்து நான்கு + +CARDINAL ௧௦௦௩௫ பத்தாயிரத்து முப்பத்து ஐந்து + +CARDINAL ௧௦௦௩௬ பத்தாயிரத்து முப்பத்து ஆறு + +CARDINAL ௧௦௦௩௭ பத்தாயிரத்து முப்பத்து ஏழு + +CARDINAL ௧௦௦௩௮ பத்தாயிரத்து முப்பத்து எட்டு + +CARDINAL ௧௦௦௩௯ பத்தாயிரத்து முப்பத்து ஒன்பது + +CARDINAL ௧௦௦௪௦ பத்தாயிரத்து நாற்பது + +CARDINAL ௧௦௦௪௧ பத்தாயிரத்து நாற்பத்து ஒன்று + +CARDINAL ௧௦௦௪௨ பத்தாயிரத்து நாற்பத்து இரண்டு + +CARDINAL ௧௦௦௪௩ பத்தாயிரத்து நாற்பத்து மூன்று + +CARDINAL ௧௦௦௪௪ பத்தாயிரத்து நாற்பத்து நான்கு + +CARDINAL ௧௦௦௪௫ பத்தாயிரத்து நாற்பத்து ஐந்து + +CARDINAL ௧௦௦௪௬ பத்தாயிரத்து நாற்பத்து ஆறு + +CARDINAL ௧௦௦௪௭ பத்தாயிரத்து நாற்பத்து ஏழு + +CARDINAL ௧௦௦௪௮ பத்தாயிரத்து நாற்பத்து எட்டு + +CARDINAL ௧௦௦௪௯ பத்தாயிரத்து நாற்பத்து ஒன்பது + +CARDINAL ௧௦௦௫௦ பத்தாயிரத்து ஐம்பது + +CARDINAL ௧௦௦௬௧ பத்தாயிரத்து அறுபத்து ஒன்று + +CARDINAL ௧௦௦௭௫ பத்தாயிரத்து எழுபத்து ஐந்து + +CARDINAL ௧௦௦௮௧ பத்தாயிரத்து எண்பத்து ஒன்று + +CARDINAL ௧௦௦௯௦ பத்தாயிரத்து தொண்ணூறு + +CARDINAL ௧௦௦௯௯ பத்தாயிரத்து தொண்ணூற்று ஒன்பது + +CARDINAL ௧௦௦௦௦௧ ஒரு லட்சத்து ஒன்று + +CARDINAL ௧௧௦௦௦௨ ஒரு லட்சத்து பத்தாயிரத்து இரண்டு + +CARDINAL ௧௨௦௪௦௩ ஒரு லட்சத்து இருபதாயிரத்து நானூற்று மூன்று + +CARDINAL ௧௪௧௫௦௪ ஒரு லட்சத்து நாற்பத்து ஒன்றாயிரத்து ஐநூற்று நான்கு + +CARDINAL ௧௫௧௫௧௫ ஒரு லட்சத்து ஐம்பத்து ஒன்றாயிரத்து ஐநூற்று பதினைந்து + +CARDINAL ௧௦௦௦௦௬ ஒரு லட்சத்து ஆறு + +CARDINAL ௧௦௦௦௦௭ ஒரு லட்சத்து ஏழு + +CARDINAL ௧௦௦௦௦௮ ஒரு லட்சத்து எட்டு + +CARDINAL ௧௦௦௦௦௯ ஒரு லட்சத்து ஒன்பது + +CARDINAL ௧௦௦௦௧௦ ஒரு லட்சத்து பத்து + +CARDINAL ௧௦௦௦௧௧ ஒரு லட்சத்து பதினொன்று + +CARDINAL ௧௦௦௦௧௨ ஒரு லட்சத்து பன்னிரண்டு + +CARDINAL ௧௦௦௦௧௩ ஒரு லட்சத்து பதின்மூன்று + +CARDINAL ௧௦௦௦௧௪ ஒரு லட்சத்து பதினான்கு + +CARDINAL ௧௦௦௦௧௫ ஒரு லட்சத்து பதினைந்து + +CARDINAL ௧௦௦௦௧௬ ஒரு லட்சத்து பதினாறு + +CARDINAL ௧௦௦௦௧௭ ஒரு லட்சத்து பதினேழு + +CARDINAL ௧௦௦௦௧௮ ஒரு லட்சத்து பதினெட்டு + +CARDINAL ௧௦௦௦௧௯ ஒரு லட்சத்து பத்தொன்பது + +CARDINAL ௧௦௦௦௨௦ ஒரு லட்சத்து இருபது + +CARDINAL ௧௦௦௦௨௧ ஒரு லட்சத்து இருபத்து ஒன்று + +CARDINAL ௧௦௦௦௨௨ ஒரு லட்சத்து இருபத்து இரண்டு + +CARDINAL ௧௦௦௦௨௩ ஒரு லட்சத்து இருபத்து மூன்று + +CARDINAL ௧௦௦௦௨௪ ஒரு லட்சத்து இருபத்து நான்கு + +CARDINAL ௧௦௦௦௨௫ ஒரு லட்சத்து இருபத்து ஐந்து + +CARDINAL ௧௦௦௦௨௬ ஒரு லட்சத்து இருபத்து ஆறு + +CARDINAL ௧௦௦௦௨௭ ஒரு லட்சத்து இருபத்து ஏழு + +CARDINAL ௧௦௦௦௨௮ ஒரு லட்சத்து இருபத்து எட்டு + +CARDINAL ௧௦௦௦௨௯ ஒரு லட்சத்து இருபத்து ஒன்பது + +CARDINAL ௧௦௦௦௩௦ ஒரு லட்சத்து முப்பது + +CARDINAL ௧௦௦௦௩௧ ஒரு லட்சத்து முப்பத்து ஒன்று + +CARDINAL ௧௦௦௦௩௨ ஒரு லட்சத்து முப்பத்து இரண்டு + +CARDINAL ௧௦௦௦௩௩ ஒரு லட்சத்து முப்பத்து மூன்று + +CARDINAL ௧௦௦௦௩௪ ஒரு லட்சத்து முப்பத்து நான்கு + +CARDINAL ௧௦௦௦௩௫ ஒரு லட்சத்து முப்பத்து ஐந்து + +CARDINAL ௧௦௦௦௩௬ ஒரு லட்சத்து முப்பத்து ஆறு + +CARDINAL ௧௦௦௦௩௭ ஒரு லட்சத்து முப்பத்து ஏழு + +CARDINAL ௧௦௦௦௩௮ ஒரு லட்சத்து முப்பத்து எட்டு + +CARDINAL ௧௦௦௦௩௯ ஒரு லட்சத்து முப்பத்து ஒன்பது + +CARDINAL ௧௦௦௦௪௦ ஒரு லட்சத்து நாற்பது + +CARDINAL ௧௦௦௦௪௧ ஒரு லட்சத்து நாற்பத்து ஒன்று + +CARDINAL ௧௦௦௦௪௨ ஒரு லட்சத்து நாற்பத்து இரண்டு + +CARDINAL ௧௦௦௦௪௩ ஒரு லட்சத்து நாற்பத்து மூன்று + +CARDINAL ௧௦௦௦௪௪ ஒரு லட்சத்து நாற்பத்து நான்கு + +CARDINAL ௧௦௦௦௪௫ ஒரு லட்சத்து நாற்பத்து ஐந்து + +CARDINAL ௧௦௦௦௪௬ ஒரு லட்சத்து நாற்பத்து ஆறு + +CARDINAL ௧௦௦௦௪௭ ஒரு லட்சத்து நாற்பத்து ஏழு + +CARDINAL ௧௦௦௦௪௮ ஒரு லட்சத்து நாற்பத்து எட்டு + +CARDINAL ௧௦௦௦௪௯ ஒரு லட்சத்து நாற்பத்து ஒன்பது + +CARDINAL ௧௦௦௦௫௦ ஒரு லட்சத்து ஐம்பது + +CARDINAL ௧௦௦௦௬௧ ஒரு லட்சத்து அறுபத்து ஒன்று + +CARDINAL ௧௦௦௦௭௫ ஒரு லட்சத்து எழுபத்து ஐந்து + +CARDINAL ௧௦௦௦௮௧ ஒரு லட்சத்து எண்பத்து ஒன்று + +CARDINAL ௧௦௦௦௯௦ ஒரு லட்சத்து தொண்ணூறு + +CARDINAL ௧௦௦௦௯௯ ஒரு லட்சத்து தொண்ணூற்று ஒன்பது + +CARDINAL ௧௦௦௦௦௦௧ பத்து லட்சத்து ஒன்று + +CARDINAL ௧௦௦௦௦௦௨ பத்து லட்சத்து இரண்டு + +CARDINAL ௧௦௦௦௦௦௩ பத்து லட்சத்து மூன்று + +CARDINAL ௧௦௦௦௦௦௪ பத்து லட்சத்து நான்கு + +CARDINAL ௧௦௦௦௦௦௫ பத்து லட்சத்து ஐந்து + +CARDINAL ௧௦௦௦௦௦௬ பத்து லட்சத்து ஆறு + +CARDINAL ௧௦௦௦௦௦௭ பத்து லட்சத்து ஏழு + +CARDINAL ௧௦௦௦௦௦௮ பத்து லட்சத்து எட்டு + +CARDINAL ௧௦௦௦௦௦௯ பத்து லட்சத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௧௦ பத்து லட்சத்து பத்து + +CARDINAL ௧௦௦௦௦௧௧ பத்து லட்சத்து பதினொன்று + +CARDINAL ௧௦௦௦௦௧௨ பத்து லட்சத்து பன்னிரண்டு + +CARDINAL ௧௦௦௦௦௧௩ பத்து லட்சத்து பதின்மூன்று + +CARDINAL ௧௦௦௦௦௧௪ பத்து லட்சத்து பதினான்கு + +CARDINAL ௧௦௦௦௦௧௫ பத்து லட்சத்து பதினைந்து + +CARDINAL ௧௦௦௦௦௧௬ பத்து லட்சத்து பதினாறு + +CARDINAL ௧௦௦௦௦௧௭ பத்து லட்சத்து பதினேழு + +CARDINAL ௧௦௦௦௦௧௮ பத்து லட்சத்து பதினெட்டு + +CARDINAL ௧௦௦௦௦௧௯ பத்து லட்சத்து பத்தொன்பது + +CARDINAL ௧௦௦௦௦௨௦ பத்து லட்சத்து இருபது + +CARDINAL ௧௦௦௦௦௨௧ பத்து லட்சத்து இருபத்து ஒன்று + +CARDINAL ௧௦௦௦௦௨௨ பத்து லட்சத்து இருபத்து இரண்டு + +CARDINAL ௧௦௦௦௦௨௩ பத்து லட்சத்து இருபத்து மூன்று + +CARDINAL ௧௦௦௦௦௨௪ பத்து லட்சத்து இருபத்து நான்கு + +CARDINAL ௧௦௦௦௦௨௫ பத்து லட்சத்து இருபத்து ஐந்து + +CARDINAL ௧௦௦௦௦௨௬ பத்து லட்சத்து இருபத்து ஆறு + +CARDINAL ௧௦௦௦௦௨௭ பத்து லட்சத்து இருபத்து ஏழு + +CARDINAL ௧௦௦௦௦௨௮ பத்து லட்சத்து இருபத்து எட்டு + +CARDINAL ௧௦௦௦௦௨௯ பத்து லட்சத்து இருபத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௩௦ பத்து லட்சத்து முப்பது + +CARDINAL ௧௦௦௦௦௩௧ பத்து லட்சத்து முப்பத்து ஒன்று + +CARDINAL ௧௦௦௦௦௩௨ பத்து லட்சத்து முப்பத்து இரண்டு + +CARDINAL ௧௦௦௦௦௩௩ பத்து லட்சத்து முப்பத்து மூன்று + +CARDINAL ௧௦௦௦௦௩௪ பத்து லட்சத்து முப்பத்து நான்கு + +CARDINAL ௧௦௦௦௦௩௫ பத்து லட்சத்து முப்பத்து ஐந்து + +CARDINAL ௧௦௦௦௦௩௬ பத்து லட்சத்து முப்பத்து ஆறு + +CARDINAL ௧௦௦௦௦௩௭ பத்து லட்சத்து முப்பத்து ஏழு + +CARDINAL ௧௦௦௦௦௩௮ பத்து லட்சத்து முப்பத்து எட்டு + +CARDINAL ௧௦௦௦௦௩௯ பத்து லட்சத்து முப்பத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௪௦ பத்து லட்சத்து நாற்பது + +CARDINAL ௧௦௦௦௦௪௧ பத்து லட்சத்து நாற்பத்து ஒன்று + +CARDINAL ௧௦௦௦௦௪௨ பத்து லட்சத்து நாற்பத்து இரண்டு + +CARDINAL ௧௦௦௦௦௪௩ பத்து லட்சத்து நாற்பத்து மூன்று + +CARDINAL ௧௦௦௦௦௪௪ பத்து லட்சத்து நாற்பத்து நான்கு + +CARDINAL ௧௦௦௦௦௪௫ பத்து லட்சத்து நாற்பத்து ஐந்து + +CARDINAL ௧௦௦௦௦௪௬ பத்து லட்சத்து நாற்பத்து ஆறு + +CARDINAL ௧௦௦௦௦௪௭ பத்து லட்சத்து நாற்பத்து ஏழு + +CARDINAL ௧௦௦௦௦௪௮ பத்து லட்சத்து நாற்பத்து எட்டு + +CARDINAL ௧௦௦௦௦௪௯ பத்து லட்சத்து நாற்பத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௫௦ பத்து லட்சத்து ஐம்பது + +CARDINAL ௧௦௦௦௦௬௧ பத்து லட்சத்து அறுபத்து ஒன்று + +CARDINAL ௧௦௦௦௦௭௫ பத்து லட்சத்து எழுபத்து ஐந்து + +CARDINAL ௧௦௦௦௦௮௧ பத்து லட்சத்து எண்பத்து ஒன்று + +CARDINAL ௧௦௦௦௦௯௦ பத்து லட்சத்து தொண்ணூறு + +CARDINAL ௧௦௦௦௦௯௯ பத்து லட்சத்து தொண்ணூற்று ஒன்பது + +CARDINAL ௧௦௦௦௦௦௦௧ ஒரு கோடியே ஒன்று + +CARDINAL ௧௦௦௦௦௦௦௨ ஒரு கோடியே இரண்டு + +CARDINAL ௧௦௦௦௦௦௦௩ ஒரு கோடியே மூன்று + +CARDINAL ௧௦௦௦௦௦௦௪ ஒரு கோடியே நான்கு + +CARDINAL ௧௦௦௦௦௦௦௫ ஒரு கோடியே ஐந்து + +CARDINAL ௧௦௦௦௦௦௦௬ ஒரு கோடியே ஆறு + +CARDINAL ௧௦௦௦௦௦௦௭ ஒரு கோடியே ஏழு + +CARDINAL ௧௦௦௦௦௦௦௮ ஒரு கோடியே எட்டு + +CARDINAL ௧௦௦௦௦௦௦௯ ஒரு கோடியே ஒன்பது + +CARDINAL ௧௦௦௦௦௦௧௦ ஒரு கோடியே பத்து + +CARDINAL ௧௦௦௦௦௦௧௧ ஒரு கோடியே பதினொன்று + +CARDINAL ௧௦௦௦௦௦௧௨ ஒரு கோடியே பன்னிரண்டு + +CARDINAL ௧௦௦௦௦௦௧௩ ஒரு கோடியே பதின்மூன்று + +CARDINAL ௧௦௦௦௦௦௧௪ ஒரு கோடியே பதினான்கு + +CARDINAL ௧௦௦௦௦௦௧௫ ஒரு கோடியே பதினைந்து + +CARDINAL ௧௦௦௦௦௦௧௬ ஒரு கோடியே பதினாறு + +CARDINAL ௧௦௦௦௦௦௧௭ ஒரு கோடியே பதினேழு + +CARDINAL ௧௦௦௦௦௦௧௮ ஒரு கோடியே பதினெட்டு + +CARDINAL ௧௦௦௦௦௦௧௯ ஒரு கோடியே பத்தொன்பது + +CARDINAL ௧௦௦௦௦௦௨௦ ஒரு கோடியே இருபது + +CARDINAL ௧௦௦௦௦௦௨௧ ஒரு கோடியே இருபத்து ஒன்று + +CARDINAL ௧௦௦௦௦௦௨௨ ஒரு கோடியே இருபத்து இரண்டு + +CARDINAL ௧௦௦௦௦௦௨௩ ஒரு கோடியே இருபத்து மூன்று + +CARDINAL ௧௦௦௦௦௦௨௪ ஒரு கோடியே இருபத்து நான்கு + +CARDINAL ௧௦௦௦௦௦௨௫ ஒரு கோடியே இருபத்து ஐந்து + +CARDINAL ௧௦௦௦௦௦௨௬ ஒரு கோடியே இருபத்து ஆறு + +CARDINAL ௧௦௦௦௦௦௨௭ ஒரு கோடியே இருபத்து ஏழு + +CARDINAL ௧௦௦௦௦௦௨௮ ஒரு கோடியே இருபத்து எட்டு + +CARDINAL ௧௦௦௦௦௦௨௯ ஒரு கோடியே இருபத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௦௩௦ ஒரு கோடியே முப்பது + +CARDINAL ௧௦௦௦௦௦௩௧ ஒரு கோடியே முப்பத்து ஒன்று + +CARDINAL ௧௦௦௦௦௦௩௨ ஒரு கோடியே முப்பத்து இரண்டு + +CARDINAL ௧௦௦௦௦௦௩௩ ஒரு கோடியே முப்பத்து மூன்று + +CARDINAL ௧௦௦௦௦௦௩௪ ஒரு கோடியே முப்பத்து நான்கு + +CARDINAL ௧௦௦௦௦௦௩௫ ஒரு கோடியே முப்பத்து ஐந்து + +CARDINAL ௧௦௦௦௦௦௩௬ ஒரு கோடியே முப்பத்து ஆறு + +CARDINAL ௧௦௦௦௦௦௩௭ ஒரு கோடியே முப்பத்து ஏழு + +CARDINAL ௧௦௦௦௦௦௩௮ ஒரு கோடியே முப்பத்து எட்டு + +CARDINAL ௧௦௦௦௦௦௩௯ ஒரு கோடியே முப்பத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௦௪௦ ஒரு கோடியே நாற்பது + +CARDINAL ௧௦௦௦௦௦௪௧ ஒரு கோடியே நாற்பத்து ஒன்று + +CARDINAL ௧௦௦௦௦௦௪௨ ஒரு கோடியே நாற்பத்து இரண்டு + +CARDINAL ௧௦௦௦௦௦௪௩ ஒரு கோடியே நாற்பத்து மூன்று + +CARDINAL ௧௦௦௦௦௦௪௪ ஒரு கோடியே நாற்பத்து நான்கு + +CARDINAL ௧௦௦௦௦௦௪௫ ஒரு கோடியே நாற்பத்து ஐந்து + +CARDINAL ௧௦௦௦௦௦௪௬ ஒரு கோடியே நாற்பத்து ஆறு + +CARDINAL ௧௦௦௦௦௦௪௭ ஒரு கோடியே நாற்பத்து ஏழு + +CARDINAL ௧௦௦௦௦௦௪௮ ஒரு கோடியே நாற்பத்து எட்டு + +CARDINAL ௧௦௦௦௦௦௪௯ ஒரு கோடியே நாற்பத்து ஒன்பது + +CARDINAL ௧௦௦௦௦௦௫௦ ஒரு கோடியே ஐம்பது + +CARDINAL ௧௦௦௦௦௦௬௧ ஒரு கோடியே அறுபத்து ஒன்று + +CARDINAL ௧௦௦௦௦௦௭௫ ஒரு கோடியே எழுபத்து ஐந்து + +CARDINAL ௧௦௦௦௦௦௮௧ ஒரு கோடியே எண்பத்து ஒன்று + +CARDINAL ௧௦௦௦௦௦௯௦ ஒரு கோடியே தொண்ணூறு + +CARDINAL ௧௦௦௦௦௦௯௯ ஒரு கோடியே தொண்ணூற்று ஒன்பது + +CARDINAL ௧௩௨௩ ஆயிரத்து முன்னூற்று இருபத்து மூன்று + +CARDINAL ௧௩௪௫ ஆயிரத்து முன்னூற்று நாற்பத்து ஐந்து + +CARDINAL ௧௩௪௫௬ பதின்மூன்றாயிரத்து நானூற்று ஐம்பத்து ஆறு + +CARDINAL ௧௨௩௪௬ பன்னிரண்டாயிரத்து முன்னூற்று நாற்பத்து ஆறு + +CARDINAL ௧௨௩௪௫௬ ஒரு லட்சத்து இருபத்து மூன்றாயிரத்து நானூற்று ஐம்பத்து ஆறு + +CARDINAL ௮௭௨௯௮௭ எட்டு லட்சத்து எழுபத்து இரண்டாயிரத்து தொள்ளுநூற்று எண்பத்து ஏழு + +CARDINAL ௯௮௭௬௦௯ ஒன்பது லட்சத்து எண்பத்து ஏழாயிரத்து அறுநூற்று ஒன்பது + +CARDINAL ௯௮௭௬௭௮௯ தொண்ணூற்று எட்டு லட்சத்து எழுபத்து ஆறாயிரத்து எழுநூற்று எண்பத்து ஒன்பது + +CARDINAL ௨௩௪௫௫௬௭ இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + +CARDINAL ௧௨௩௪௫௫௬௭ ஒரு கோடியே இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + +CARDINAL ௧௨௧௨௧௨௧௨௨ பன்னிரண்டு கோடியே பன்னிரண்டு லட்சத்து பன்னிரண்டாயிரத்து நூற்று இருபத்து இரண்டு + +CARDINAL ௧௦௦௨௩௪௫௫௬௭ நூறு கோடியே இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + +CARDINAL ௧௧௨௨௩௪௫௫௬௭ நூற்று பன்னிரண்டு கோடியே இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + +CARDINAL ௧௦௨௨௩௪௫௫௬௭ நூற்று இரண்டு கோடியே இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + +CARDINAL ௧௧௦௨௨௩௪௫௫௬௭ ஆயிரத்து நூற்று இரண்டு கோடியே இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + +CARDINAL ௫௧௦௨௨௩௪௫௫௬௭ ஐயாயிரத்து நூற்று இரண்டு கோடியே இருபத்து மூன்று லட்சத்து நாற்பத்து ஐந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு + diff --git a/nemo_text_processing/inverse_text_normalization/inverse_normalize.py b/nemo_text_processing/inverse_text_normalization/inverse_normalize.py index 1ab727660..611654c05 100644 --- a/nemo_text_processing/inverse_text_normalization/inverse_normalize.py +++ b/nemo_text_processing/inverse_text_normalization/inverse_normalize.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -141,6 +141,11 @@ def __init__( from nemo_text_processing.inverse_text_normalization.ko.verbalizers.verbalize_final import ( VerbalizeFinalFst, ) + elif lang == 'ta': # Tamil + from nemo_text_processing.inverse_text_normalization.ta.taggers.tokenize_and_classify import ClassifyFst + from nemo_text_processing.inverse_text_normalization.ta.verbalizers.verbalize_final import ( + VerbalizeFinalFst, + ) else: raise NotImplementedError(f"Language {lang} has not been supported yet.") @@ -205,6 +210,7 @@ def parse_args(): 'mr', 'ja', 'ko', + 'ta', ], default="en", type=str, diff --git a/nemo_text_processing/inverse_text_normalization/run_evaluate.py b/nemo_text_processing/inverse_text_normalization/run_evaluate.py index c93d8df64..f658bcfa4 100644 --- a/nemo_text_processing/inverse_text_normalization/run_evaluate.py +++ b/nemo_text_processing/inverse_text_normalization/run_evaluate.py @@ -1,4 +1,4 @@ -# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -35,7 +35,25 @@ def parse_args(): parser.add_argument( "--lang", help="language", - choices=["ar", "de", "en", "es", "es_en", "fr", "hi", "hy", "ko", "mr", "pt", "ru", "sv", "vi", "zh", 'ja'], + choices=[ + "ar", + "de", + "en", + "es", + "es_en", + "fr", + "hi", + "hy", + "ko", + "ta", + "mr", + "pt", + "ru", + "sv", + "vi", + "zh", + 'ja', + ], default="en", type=str, ) @@ -60,7 +78,15 @@ def parse_args(): if args.lang == 'en': from nemo_text_processing.inverse_text_normalization.en.clean_eval_data import filter_loaded_data file_path = args.input - inverse_normalizer = InverseNormalizer(lang=args.lang, input_case=args.input_case) + print("Before creating InverseNormalizer") + + inverse_normalizer = InverseNormalizer( + lang=args.lang, + input_case=args.input_case, + overwrite_cache=True, + ) + + print("After creating InverseNormalizer") print("Loading training data: " + file_path) if args.output_case == "lower_cased": @@ -78,9 +104,9 @@ def parse_args(): sentences_un_normalized, sentences_normalized, _ = training_data_to_sentences(training_data) print("- Data: " + str(len(sentences_normalized)) + " sentences") sentences_prediction = inverse_normalizer.inverse_normalize_list(sentences_normalized) - with open('result.log', 'w') as ofp: + with open("result.log", "w", encoding="utf-8") as ofp: for inp, out in zip(sentences_un_normalized, sentences_prediction): - ofp.write(f'{inp==out}; {inp}\t{out}\n') + ofp.write(f"{inp == out}; {inp}\t{out}\n") print("- Denormalized. Evaluating...") sentences_accuracy = evaluate( @@ -91,20 +117,60 @@ def parse_args(): print("Token level evaluation...") tokens_per_type = training_data_to_tokens(training_data, category=args.category) token_accuracy = {} + for token_type in tokens_per_type: print("- Token type: " + token_type) tokens_un_normalized, tokens_normalized = tokens_per_type[token_type] + for i, (inp, out) in enumerate(zip(tokens_normalized, tokens_un_normalized)): + if "முப்பத்தி" in inp: + print("=" * 80) + print("Normalized :", repr(inp)) + print("Expected :", repr(out)) + print("Prediction :", repr(inverse_normalizer.inverse_normalize(inp, verbose=False))) + break print(" - Data: " + str(len(tokens_normalized)) + " tokens") + tokens_prediction = inverse_normalizer.inverse_normalize_list(tokens_normalized) + for inp, pred, label in zip(tokens_normalized, tokens_prediction, tokens_un_normalized): + if inp == "இருநூற்று முப்பத்தி நான்காவது": + print("=" * 80) + print("Normalized :", repr(inp)) + print("Expected :", repr(label)) + print("Prediction :", repr(pred)) + break + + # Print all failed predictions + print(" - Failed cases:") + failed = 0 + for inp, pred, label in zip(tokens_normalized, tokens_prediction, tokens_un_normalized): + if pred != label: + failed += 1 + print("=" * 80) + print(f"Input : {inp}") + print(f"Expected : {label}") + print(f"Predicted : {pred}") + + if failed == 0: + print(" None") + print(" - Denormalized. Evaluating...") - token_accuracy[token_type] = evaluate(tokens_prediction, tokens_un_normalized, input=tokens_normalized) + token_accuracy[token_type] = evaluate( + tokens_prediction, + tokens_un_normalized, + input=tokens_normalized, + ) print(" - Accuracy: " + str(token_accuracy[token_type])) + + # ===================================================== + # FIX: Add these back - they were accidentally removed + # ===================================================== token_count_per_type = {token_type: len(tokens_per_type[token_type][0]) for token_type in tokens_per_type} + token_weighted_accuracy = [ token_count_per_type[token_type] * accuracy for token_type, accuracy in token_accuracy.items() ] - print("- Accuracy: " + str(sum(token_weighted_accuracy) / sum(token_count_per_type.values()))) + print("- Accuracy: " + str(sum(token_weighted_accuracy) / sum(token_count_per_type.values()))) print(" - Total: " + str(sum(token_count_per_type.values())), '\n') for token_type in token_accuracy: diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/case_suffix.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/case_suffix.tsv new file mode 100644 index 000000000..d1608710c --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/case_suffix.tsv @@ -0,0 +1,23 @@ +ஒன்றின் ௧ இன் +இரண்டின் ௨ இன் +மூன்றின் ௩ இன் +நான்கின் ௪ இன் +ஐந்தின் ௫ இன் +ஆறின் ௬ இன் +ஏழின் ௭ இன் +எட்டின் ௮ இன் +ஒன்பதின் ௯ இன் +ஒன்றில் ௧ இல் +இரண்டில் ௨ இல் +மூன்றில் ௩ இல் +நான்கில் ௪ இல் +ஐந்தில் ௫ இல் +ஆறில் ௬ இல் +ஏழில் ௭ இல் +எட்டில் ௮ இல் +ஒன்பதில் ௯ இல் +பத்தின் ௧௦ இன் +பத்தில் ௧௦ இல் +பத்தொன்பதில் ௧௯ இல் +நூற்றில் ௧௦௦ இல் +நூற்றின் ௧௦௦ இன் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores.tsv new file mode 100644 index 000000000..6b303b610 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores.tsv @@ -0,0 +1,9 @@ +௧ ஒரு கோடி +௨ இரண்டு கோடி +௩ மூன்று கோடி +௪ நான்கு கோடி +௫ ஐந்து கோடி +௬ ஆறு கோடி +௭ ஏழு கோடி +௮ எட்டு கோடி +௯ ஒன்பது கோடி \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99.tsv new file mode 100644 index 000000000..6f257aa72 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99.tsv @@ -0,0 +1,90 @@ +௧௦ பத்து கோடி +௧௧ பதினொன்று கோடி +௧௨ பன்னிரண்டு கோடி +௧௩ பதின்மூன்று கோடி +௧௪ பதினான்கு கோடி +௧௫ பதினைந்து கோடி +௧௬ பதினாறு கோடி +௧௭ பதினேழு கோடி +௧௮ பதினெட்டு கோடி +௧௯ பத்தொன்பது கோடி +௨௦ இருபது கோடி +௨௧ இருபத்து ஒன்று கோடி +௨௨ இருபத்து இரண்டு கோடி +௨௩ இருபத்து மூன்று கோடி +௨௪ இருபத்து நான்கு கோடி +௨௫ இருபத்து ஐந்து கோடி +௨௬ இருபத்து ஆறு கோடி +௨௭ இருபத்து ஏழு கோடி +௨௮ இருபத்து எட்டு கோடி +௨௯ இருபத்து ஒன்பது கோடி +௩௦ முப்பது கோடி +௩௧ முப்பத்து ஒன்று கோடி +௩௨ முப்பத்து இரண்டு கோடி +௩௩ முப்பத்து மூன்று கோடி +௩௪ முப்பத்து நான்கு கோடி +௩௫ முப்பத்து ஐந்து கோடி +௩௬ முப்பத்து ஆறு கோடி +௩௭ முப்பத்து ஏழு கோடி +௩௮ முப்பத்து எட்டு கோடி +௩௯ முப்பத்து ஒன்பது கோடி +௪௦ நாற்பது கோடி +௪௧ நாற்பத்து ஒன்று கோடி +௪௨ நாற்பத்து இரண்டு கோடி +௪௩ நாற்பத்து மூன்று கோடி +௪௪ நாற்பத்து நான்கு கோடி +௪௫ நாற்பத்து ஐந்து கோடி +௪௬ நாற்பத்து ஆறு கோடி +௪௭ நாற்பத்து ஏழு கோடி +௪௮ நாற்பத்து எட்டு கோடி +௪௯ நாற்பத்து ஒன்பது கோடி +௫௦ ஐம்பது கோடி +௫௧ ஐம்பத்து ஒன்று கோடி +௫௨ ஐம்பத்து இரண்டு கோடி +௫௩ ஐம்பத்து மூன்று கோடி +௫௪ ஐம்பத்து நான்கு கோடி +௫௫ ஐம்பத்து ஐந்து கோடி +௫௬ ஐம்பத்து ஆறு கோடி +௫௭ ஐம்பத்து ஏழு கோடி +௫௮ ஐம்பத்து எட்டு கோடி +௫௯ ஐம்பத்து ஒன்பது கோடி +௬௦ அறுபது கோடி +௬௧ அறுபத்து ஒன்று கோடி +௬௨ அறுபத்து இரண்டு கோடி +௬௩ அறுபத்து மூன்று கோடி +௬௪ அறுபத்து நான்கு கோடி +௬௫ அறுபத்து ஐந்து கோடி +௬௬ அறுபத்து ஆறு கோடி +௬௭ அறுபத்து ஏழு கோடி +௬௮ அறுபத்து எட்டு கோடி +௬௯ அறுபத்து ஒன்பது கோடி +௭௦ எழுபது கோடி +௭௧ எழுபத்து ஒன்று கோடி +௭௨ எழுபத்து இரண்டு கோடி +௭௩ எழுபத்து மூன்று கோடி +௭௪ எழுபத்து நான்கு கோடி +௭௫ எழுபத்து ஐந்து கோடி +௭௬ எழுபத்து ஆறு கோடி +௭௭ எழுபத்து ஏழு கோடி +௭௮ எழுபத்து எட்டு கோடி +௭௯ எழுபத்து ஒன்பது கோடி +௮௦ எண்பது கோடி +௮௧ எண்பத்து ஒன்று கோடி +௮௨ எண்பத்து இரண்டு கோடி +௮௩ எண்பத்து மூன்று கோடி +௮௪ எண்பத்து நான்கு கோடி +௮௫ எண்பத்து ஐந்து கோடி +௮௬ எண்பத்து ஆறு கோடி +௮௭ எண்பத்து ஏழு கோடி +௮௮ எண்பத்து எட்டு கோடி +௮௯ எண்பத்து ஒன்பது கோடி +௯௦ தொண்ணூறு கோடி +௯௧ தொண்ணூற்று ஒன்று கோடி +௯௨ தொண்ணூற்று இரண்டு கோடி +௯௩ தொண்ணூற்று மூன்று கோடி +௯௪ தொண்ணூற்று நான்கு கோடி +௯௫ தொண்ணூற்று ஐந்து கோடி +௯௬ தொண்ணூற்று ஆறு கோடி +௯௭ தொண்ணூற்று ஏழு கோடி +௯௮ தொண்ணூற்று எட்டு கோடி +௯௯ தொண்ணூற்று ஒன்பது கோடி \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99_join.tsv new file mode 100644 index 000000000..c37fb4776 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_10_99_join.tsv @@ -0,0 +1,90 @@ +௧௦ பத்து கோடியே +௧௧ பதினொன்று கோடியே +௧௨ பன்னிரண்டு கோடியே +௧௩ பதின்மூன்று கோடியே +௧௪ பதினான்கு கோடியே +௧௫ பதினைந்து கோடியே +௧௬ பதினாறு கோடியே +௧௭ பதினேழு கோடியே +௧௮ பதினெட்டு கோடியே +௧௯ பத்தொன்பது கோடியே +௨௦ இருபது கோடியே +௨௧ இருபத்து ஒன்று கோடியே +௨௨ இருபத்து இரண்டு கோடியே +௨௩ இருபத்து மூன்று கோடியே +௨௪ இருபத்து நான்கு கோடியே +௨௫ இருபத்து ஐந்து கோடியே +௨௬ இருபத்து ஆறு கோடியே +௨௭ இருபத்து ஏழு கோடியே +௨௮ இருபத்து எட்டு கோடியே +௨௯ இருபத்து ஒன்பது கோடியே +௩௦ முப்பது கோடியே +௩௧ முப்பத்து ஒன்று கோடியே +௩௨ முப்பத்து இரண்டு கோடியே +௩௩ முப்பத்து மூன்று கோடியே +௩௪ முப்பத்து நான்கு கோடியே +௩௫ முப்பத்து ஐந்து கோடியே +௩௬ முப்பத்து ஆறு கோடியே +௩௭ முப்பத்து ஏழு கோடியே +௩௮ முப்பத்து எட்டு கோடியே +௩௯ முப்பத்து ஒன்பது கோடியே +௪௦ நாற்பது கோடியே +௪௧ நாற்பத்து ஒன்று கோடியே +௪௨ நாற்பத்து இரண்டு கோடியே +௪௩ நாற்பத்து மூன்று கோடியே +௪௪ நாற்பத்து நான்கு கோடியே +௪௫ நாற்பத்து ஐந்து கோடியே +௪௬ நாற்பத்து ஆறு கோடியே +௪௭ நாற்பத்து ஏழு கோடியே +௪௮ நாற்பத்து எட்டு கோடியே +௪௯ நாற்பத்து ஒன்பது கோடியே +௫௦ ஐம்பது கோடியே +௫௧ ஐம்பத்து ஒன்று கோடியே +௫௨ ஐம்பத்து இரண்டு கோடியே +௫௩ ஐம்பத்து மூன்று கோடியே +௫௪ ஐம்பத்து நான்கு கோடியே +௫௫ ஐம்பத்து ஐந்து கோடியே +௫௬ ஐம்பத்து ஆறு கோடியே +௫௭ ஐம்பத்து ஏழு கோடியே +௫௮ ஐம்பத்து எட்டு கோடியே +௫௯ ஐம்பத்து ஒன்பது கோடியே +௬௦ அறுபது கோடியே +௬௧ அறுபத்து ஒன்று கோடியே +௬௨ அறுபத்து இரண்டு கோடியே +௬௩ அறுபத்து மூன்று கோடியே +௬௪ அறுபத்து நான்கு கோடியே +௬௫ அறுபத்து ஐந்து கோடியே +௬௬ அறுபத்து ஆறு கோடியே +௬௭ அறுபத்து ஏழு கோடியே +௬௮ அறுபத்து எட்டு கோடியே +௬௯ அறுபத்து ஒன்பது கோடியே +௭௦ எழுபது கோடியே +௭௧ எழுபத்து ஒன்று கோடியே +௭௨ எழுபத்து இரண்டு கோடியே +௭௩ எழுபத்து மூன்று கோடியே +௭௪ எழுபத்து நான்கு கோடியே +௭௫ எழுபத்து ஐந்து கோடியே +௭௬ எழுபத்து ஆறு கோடியே +௭௭ எழுபத்து ஏழு கோடியே +௭௮ எழுபத்து எட்டு கோடியே +௭௯ எழுபத்து ஒன்பது கோடியே +௮௦ எண்பது கோடியே +௮௧ எண்பத்து ஒன்று கோடியே +௮௨ எண்பத்து இரண்டு கோடியே +௮௩ எண்பத்து மூன்று கோடியே +௮௪ எண்பத்து நான்கு கோடியே +௮௫ எண்பத்து ஐந்து கோடியே +௮௬ எண்பத்து ஆறு கோடியே +௮௭ எண்பத்து ஏழு கோடியே +௮௮ எண்பத்து எட்டு கோடியே +௮௯ எண்பத்து ஒன்பது கோடியே +௯௦ தொண்ணூறு கோடியே +௯௧ தொண்ணூற்று ஒன்று கோடியே +௯௨ தொண்ணூற்று இரண்டு கோடியே +௯௩ தொண்ணூற்று மூன்று கோடியே +௯௪ தொண்ணூற்று நான்கு கோடியே +௯௫ தொண்ணூற்று ஐந்து கோடியே +௯௬ தொண்ணூற்று ஆறு கோடியே +௯௭ தொண்ணூற்று ஏழு கோடியே +௯௮ தொண்ணூற்று எட்டு கோடியே +௯௯ தொண்ணூற்று ஒன்பது கோடியே \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_join.tsv new file mode 100644 index 000000000..08ddc9228 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/crores_join.tsv @@ -0,0 +1,9 @@ +௧ ஒரு கோடியே +௨ இரண்டு கோடியே +௩ மூன்று கோடியே +௪ நான்கு கோடியே +௫ ஐந்து கோடியே +௬ ஆறு கோடியே +௭ ஏழு கோடியே +௮ எட்டு கோடியே +௯ ஒன்பது கோடியே \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/digit.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/digit.tsv new file mode 100644 index 000000000..f7c5e1f86 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/digit.tsv @@ -0,0 +1,10 @@ +௧ ஒன்று +௧ ஒரு +௨ இரண்டு +௩ மூன்று +௪ நான்கு +௫ ஐந்து +௬ ஆறு +௭ ஏழு +௮ எட்டு +௯ ஒன்பது \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds.tsv new file mode 100644 index 000000000..1484dc578 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds.tsv @@ -0,0 +1,11 @@ +௧ நூறு +௨ இருநூறு +௩ முன்னூறு +௪ நானூறு +௫ ஐநூறு +௬ அறுநூறு +௭ எழுநூறு +௮ எண்ணூறு +௮ எட்டுநூறு +௯ தொள்ளுநூறு +௯ தொள்ளாயிரம் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds_join.tsv new file mode 100644 index 000000000..71f453de9 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/hundreds_join.tsv @@ -0,0 +1,12 @@ +௧ நூற்று +௨ இருநூற்று +௩ முன்னூற்று +௪ நானூற்று +௫ ஐநூற்று +௬ அறுநூற்று +௭ எழுநூற்று +௮ எண்ணூற்று +௮ எட்டுநூற்று +௯ தொள்ளூற்று +௯ தொள்ளாயிரத்து +௯ தொள்ளுநூற்று \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs.tsv new file mode 100644 index 000000000..acc4be383 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs.tsv @@ -0,0 +1,18 @@ +௧ ஒரு இலட்சம் +௨ இரண்டு இலட்சம் +௩ மூன்று இலட்சம் +௪ நான்கு இலட்சம் +௫ ஐந்து இலட்சம் +௬ ஆறு இலட்சம் +௭ ஏழு இலட்சம் +௮ எட்டு இலட்சம் +௯ ஒன்பது இலட்சம் +௧ ஒரு லட்சம் +௨ இரண்டு லட்சம் +௩ மூன்று லட்சம் +௪ நான்கு லட்சம் +௫ ஐந்து லட்சம் +௬ ஆறு லட்சம் +௭ ஏழு லட்சம் +௮ எட்டு லட்சம் +௯ ஒன்பது லட்சம் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99.tsv new file mode 100644 index 000000000..63c7db10c --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99.tsv @@ -0,0 +1,182 @@ +௧௦ பத்து இலட்சம் +௧௧ பதினொன்று இலட்சம் +௧௨ பன்னிரண்டு இலட்சம் +௧௩ பதின்மூன்று இலட்சம் +௧௪ பதினான்கு இலட்சம் +௧௫ பதினைந்து இலட்சம் +௧௬ பதினாறு இலட்சம் +௧௭ பதினேழு இலட்சம் +௧௮ பதினெட்டு இலட்சம் +௧௯ பத்தொன்பது இலட்சம் +௨௦ இருபது இலட்சம் +௨௧ இருபத்து ஒன்று இலட்சம் +௨௨ இருபத்து இரண்டு இலட்சம் +௨௩ இருபத்து மூன்று இலட்சம் +௨௪ இருபத்து நான்கு இலட்சம் +௨௫ இருபத்து ஐந்து இலட்சம் +௨௬ இருபத்து ஆறு இலட்சம் +௨௭ இருபத்து ஏழு இலட்சம் +௨௮ இருபத்து எட்டு இலட்சம் +௨௯ இருபத்து ஒன்பது இலட்சம் +௩௦ முப்பது இலட்சம் +௩௧ முப்பத்து ஒன்று இலட்சம் +௩௨ முப்பத்து இரண்டு இலட்சம் +௩௩ முப்பத்து மூன்று இலட்சம் +௩௪ முப்பத்து நான்கு இலட்சம் +௩௫ முப்பத்து ஐந்து இலட்சம் +௩௬ முப்பத்து ஆறு இலட்சம் +௩௭ முப்பத்து ஏழு இலட்சம் +௩௮ முப்பத்து எட்டு இலட்சம் +௩௯ முப்பத்து ஒன்பது இலட்சம் +௪௦ நாற்பது இலட்சம் +௪௧ நாற்பத்து ஒன்று இலட்சம் +௪௨ நாற்பத்து இரண்டு இலட்சம் +௪௩ நாற்பத்து மூன்று இலட்சம் +௪௪ நாற்பத்து நான்கு இலட்சம் +௪௫ நாற்பத்து ஐந்து இலட்சம் +௪௬ நாற்பத்து ஆறு இலட்சம் +௪௭ நாற்பத்து ஏழு இலட்சம் +௪௮ நாற்பத்து எட்டு இலட்சம் +௪௯ நாற்பத்து ஒன்பது இலட்சம் +௫௦ ஐம்பது இலட்சம் +௫௧ ஐம்பத்து ஒன்று இலட்சம் +௫௨ ஐம்பத்து இரண்டு இலட்சம் +௫௩ ஐம்பத்து மூன்று இலட்சம் +௫௪ ஐம்பத்து நான்கு இலட்சம் +௫௫ ஐம்பத்து ஐந்து இலட்சம் +௫௬ ஐம்பத்து ஆறு இலட்சம் +௫௭ ஐம்பத்து ஏழு இலட்சம் +௫௮ ஐம்பத்து எட்டு இலட்சம் +௫௯ ஐம்பத்து ஒன்பது இலட்சம் +௬௦ அறுபது இலட்சம் +௬௧ அறுபத்து ஒன்று இலட்சம் +௬௨ அறுபத்து இரண்டு இலட்சம் +௬௩ அறுபத்து மூன்று இலட்சம் +௬௪ அறுபத்து நான்கு இலட்சம் +௬௫ அறுபத்து ஐந்து இலட்சம் +௬௬ அறுபத்து ஆறு இலட்சம் +௬௭ அறுபத்து ஏழு இலட்சம் +௬௮ அறுபத்து எட்டு இலட்சம் +௬௯ அறுபத்து ஒன்பது இலட்சம் +௭௦ எழுபது இலட்சம் +௭௧ எழுபத்து ஒன்று இலட்சம் +௭௨ எழுபத்து இரண்டு இலட்சம் +௭௩ எழுபத்து மூன்று இலட்சம் +௭௪ எழுபத்து நான்கு இலட்சம் +௭௫ எழுபத்து ஐந்து இலட்சம் +௭௬ எழுபத்து ஆறு இலட்சம் +௭௭ எழுபத்து ஏழு இலட்சம் +௭௮ எழுபத்து எட்டு இலட்சம் +௭௯ எழுபத்து ஒன்பது இலட்சம் +௮௦ எண்பது இலட்சம் +௮௧ எண்பத்து ஒன்று இலட்சம் +௮௨ எண்பத்து இரண்டு இலட்சம் +௮௩ எண்பத்து மூன்று இலட்சம் +௮௪ எண்பத்து நான்கு இலட்சம் +௮௫ எண்பத்து ஐந்து இலட்சம் +௮௬ எண்பத்து ஆறு இலட்சம் +௮௭ எண்பத்து ஏழு இலட்சம் +௮௮ எண்பத்து எட்டு இலட்சம் +௮௯ எண்பத்து ஒன்பது இலட்சம் +௯௦ தொண்ணூறு இலட்சம் +௯௧ தொண்ணூற்று ஒன்று இலட்சம் +௯௧ தொண்ணூற்று ஒரு இலட்சம் +௯௨ தொண்ணூற்று இரண்டு இலட்சம் +௯௩ தொண்ணூற்று மூன்று இலட்சம் +௯௪ தொண்ணூற்று நான்கு இலட்சம் +௯௫ தொண்ணூற்று ஐந்து இலட்சம் +௯௬ தொண்ணூற்று ஆறு இலட்சம் +௯௭ தொண்ணூற்று ஏழு இலட்சம் +௯௮ தொண்ணூற்று எட்டு இலட்சம் +௯௯ தொண்ணூற்று ஒன்பது இலட்சம் +௧௦ பத்து லட்சம் +௧௧ பதினொன்று லட்சம் +௧௨ பன்னிரண்டு லட்சம் +௧௩ பதின்மூன்று லட்சம் +௧௪ பதினான்கு லட்சம் +௧௫ பதினைந்து லட்சம் +௧௬ பதினாறு லட்சம் +௧௭ பதினேழு லட்சம் +௧௮ பதினெட்டு லட்சம் +௧௯ பத்தொன்பது லட்சம் +௨௦ இருபது லட்சம் +௨௧ இருபத்து ஒன்று லட்சம் +௨௨ இருபத்து இரண்டு லட்சம் +௨௩ இருபத்து மூன்று லட்சம் +௨௪ இருபத்து நான்கு லட்சம் +௨௫ இருபத்து ஐந்து லட்சம் +௨௬ இருபத்து ஆறு லட்சம் +௨௭ இருபத்து ஏழு லட்சம் +௨௮ இருபத்து எட்டு லட்சம் +௨௯ இருபத்து ஒன்பது லட்சம் +௩௦ முப்பது லட்சம் +௩௧ முப்பத்து ஒன்று லட்சம் +௩௨ முப்பத்து இரண்டு லட்சம் +௩௩ முப்பத்து மூன்று லட்சம் +௩௪ முப்பத்து நான்கு லட்சம் +௩௫ முப்பத்து ஐந்து லட்சம் +௩௬ முப்பத்து ஆறு லட்சம் +௩௭ முப்பத்து ஏழு லட்சம் +௩௮ முப்பத்து எட்டு லட்சம் +௩௯ முப்பத்து ஒன்பது லட்சம் +௪௦ நாற்பது லட்சம் +௪௧ நாற்பத்து ஒன்று லட்சம் +௪௨ நாற்பத்து இரண்டு லட்சம் +௪௩ நாற்பத்து மூன்று லட்சம் +௪௪ நாற்பத்து நான்கு லட்சம் +௪௫ நாற்பத்து ஐந்து லட்சம் +௪௬ நாற்பத்து ஆறு லட்சம் +௪௭ நாற்பத்து ஏழு லட்சம் +௪௮ நாற்பத்து எட்டு லட்சம் +௪௯ நாற்பத்து ஒன்பது லட்சம் +௫௦ ஐம்பது லட்சம் +௫௧ ஐம்பத்து ஒன்று லட்சம் +௫௨ ஐம்பத்து இரண்டு லட்சம் +௫௩ ஐம்பத்து மூன்று லட்சம் +௫௪ ஐம்பத்து நான்கு லட்சம் +௫௫ ஐம்பத்து ஐந்து லட்சம் +௫௬ ஐம்பத்து ஆறு லட்சம் +௫௭ ஐம்பத்து ஏழு லட்சம் +௫௮ ஐம்பத்து எட்டு லட்சம் +௫௯ ஐம்பத்து ஒன்பது லட்சம் +௬௦ அறுபது லட்சம் +௬௧ அறுபத்து ஒன்று லட்சம் +௬௨ அறுபத்து இரண்டு லட்சம் +௬௩ அறுபத்து மூன்று லட்சம் +௬௪ அறுபத்து நான்கு லட்சம் +௬௫ அறுபத்து ஐந்து லட்சம் +௬௬ அறுபத்து ஆறு லட்சம் +௬௭ அறுபத்து ஏழு லட்சம் +௬௮ அறுபத்து எட்டு லட்சம் +௬௯ அறுபத்து ஒன்பது லட்சம் +௭௦ எழுபது லட்சம் +௭௧ எழுபத்து ஒன்று லட்சம் +௭௨ எழுபத்து இரண்டு லட்சம் +௭௩ எழுபத்து மூன்று லட்சம் +௭௪ எழுபத்து நான்கு லட்சம் +௭௫ எழுபத்து ஐந்து லட்சம் +௭௬ எழுபத்து ஆறு லட்சம் +௭௭ எழுபத்து ஏழு லட்சம் +௭௮ எழுபத்து எட்டு லட்சம் +௭௯ எழுபத்து ஒன்பது லட்சம் +௮௦ எண்பது லட்சம் +௮௧ எண்பத்து ஒன்று லட்சம் +௮௨ எண்பத்து இரண்டு லட்சம் +௮௩ எண்பத்து மூன்று லட்சம் +௮௪ எண்பத்து நான்கு லட்சம் +௮௫ எண்பத்து ஐந்து லட்சம் +௮௬ எண்பத்து ஆறு லட்சம் +௮௭ எண்பத்து ஏழு லட்சம் +௮௮ எண்பத்து எட்டு லட்சம் +௮௯ எண்பத்து ஒன்பது லட்சம் +௯௦ தொண்ணூறு லட்சம் +௯௧ தொண்ணூற்று ஒன்று லட்சம் +௯௧ தொண்ணூற்று ஒரு லட்சம் +௯௨ தொண்ணூற்று இரண்டு லட்சம் +௯௩ தொண்ணூற்று மூன்று லட்சம் +௯௪ தொண்ணூற்று நான்கு லட்சம் +௯௫ தொண்ணூற்று ஐந்து லட்சம் +௯௬ தொண்ணூற்று ஆறு லட்சம் +௯௭ தொண்ணூற்று ஏழு லட்சம் +௯௮ தொண்ணூற்று எட்டு லட்சம் +௯௯ தொண்ணூற்று ஒன்பது லட்சம் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99_join.tsv new file mode 100644 index 000000000..30d283f7e --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_10_99_join.tsv @@ -0,0 +1,182 @@ +௧௦ பத்து இலட்சத்து +௧௧ பதினொன்று இலட்சத்து +௧௨ பன்னிரண்டு இலட்சத்து +௧௩ பதின்மூன்று இலட்சத்து +௧௪ பதினான்கு இலட்சத்து +௧௫ பதினைந்து இலட்சத்து +௧௬ பதினாறு இலட்சத்து +௧௭ பதினேழு இலட்சத்து +௧௮ பதினெட்டு இலட்சத்து +௧௯ பத்தொன்பது இலட்சத்து +௨௦ இருபது இலட்சத்து +௨௧ இருபத்து ஒன்று இலட்சத்து +௨௨ இருபத்து இரண்டு இலட்சத்து +௨௩ இருபத்து மூன்று இலட்சத்து +௨௪ இருபத்து நான்கு இலட்சத்து +௨௫ இருபத்து ஐந்து இலட்சத்து +௨௬ இருபத்து ஆறு இலட்சத்து +௨௭ இருபத்து ஏழு இலட்சத்து +௨௮ இருபத்து எட்டு இலட்சத்து +௨௯ இருபத்து ஒன்பது இலட்சத்து +௩௦ முப்பது இலட்சத்து +௩௧ முப்பத்து ஒன்று இலட்சத்து +௩௨ முப்பத்து இரண்டு இலட்சத்து +௩௩ முப்பத்து மூன்று இலட்சத்து +௩௪ முப்பத்து நான்கு இலட்சத்து +௩௫ முப்பத்து ஐந்து இலட்சத்து +௩௬ முப்பத்து ஆறு இலட்சத்து +௩௭ முப்பத்து ஏழு இலட்சத்து +௩௮ முப்பத்து எட்டு இலட்சத்து +௩௯ முப்பத்து ஒன்பது இலட்சத்து +௪௦ நாற்பது இலட்சத்து +௪௧ நாற்பத்து ஒன்று இலட்சத்து +௪௨ நாற்பத்து இரண்டு இலட்சத்து +௪௩ நாற்பத்து மூன்று இலட்சத்து +௪௪ நாற்பத்து நான்கு இலட்சத்து +௪௫ நாற்பத்து ஐந்து இலட்சத்து +௪௬ நாற்பத்து ஆறு இலட்சத்து +௪௭ நாற்பத்து ஏழு இலட்சத்து +௪௮ நாற்பத்து எட்டு இலட்சத்து +௪௯ நாற்பத்து ஒன்பது இலட்சத்து +௫௦ ஐம்பது இலட்சத்து +௫௧ ஐம்பத்து ஒன்று இலட்சத்து +௫௨ ஐம்பத்து இரண்டு இலட்சத்து +௫௩ ஐம்பத்து மூன்று இலட்சத்து +௫௪ ஐம்பத்து நான்கு இலட்சத்து +௫௫ ஐம்பத்து ஐந்து இலட்சத்து +௫௬ ஐம்பத்து ஆறு இலட்சத்து +௫௭ ஐம்பத்து ஏழு இலட்சத்து +௫௮ ஐம்பத்து எட்டு இலட்சத்து +௫௯ ஐம்பத்து ஒன்பது இலட்சத்து +௬௦ அறுபது இலட்சத்து +௬௧ அறுபத்து ஒன்று இலட்சத்து +௬௨ அறுபத்து இரண்டு இலட்சத்து +௬௩ அறுபத்து மூன்று இலட்சத்து +௬௪ அறுபத்து நான்கு இலட்சத்து +௬௫ அறுபத்து ஐந்து இலட்சத்து +௬௬ அறுபத்து ஆறு இலட்சத்து +௬௭ அறுபத்து ஏழு இலட்சத்து +௬௮ அறுபத்து எட்டு இலட்சத்து +௬௯ அறுபத்து ஒன்பது இலட்சத்து +௭௦ எழுபது இலட்சத்து +௭௧ எழுபத்து ஒன்று இலட்சத்து +௭௨ எழுபத்து இரண்டு இலட்சத்து +௭௩ எழுபத்து மூன்று இலட்சத்து +௭௪ எழுபத்து நான்கு இலட்சத்து +௭௫ எழுபத்து ஐந்து இலட்சத்து +௭௬ எழுபத்து ஆறு இலட்சத்து +௭௭ எழுபத்து ஏழு இலட்சத்து +௭௮ எழுபத்து எட்டு இலட்சத்து +௭௯ எழுபத்து ஒன்பது இலட்சத்து +௮௦ எண்பது இலட்சத்து +௮௧ எண்பத்து ஒன்று இலட்சத்து +௮௨ எண்பத்து இரண்டு இலட்சத்து +௮௩ எண்பத்து மூன்று இலட்சத்து +௮௪ எண்பத்து நான்கு இலட்சத்து +௮௫ எண்பத்து ஐந்து இலட்சத்து +௮௬ எண்பத்து ஆறு இலட்சத்து +௮௭ எண்பத்து ஏழு இலட்சத்து +௮௮ எண்பத்து எட்டு இலட்சத்து +௮௯ எண்பத்து ஒன்பது இலட்சத்து +௯௦ தொண்ணூறு இலட்சத்து +௯௧ தொண்ணூற்று ஒன்று இலட்சத்து +௯௧ தொண்ணூற்று ஒரு இலட்சத்து +௯௨ தொண்ணூற்று இரண்டு இலட்சத்து +௯௩ தொண்ணூற்று மூன்று இலட்சத்து +௯௪ தொண்ணூற்று நான்கு இலட்சத்து +௯௫ தொண்ணூற்று ஐந்து இலட்சத்து +௯௬ தொண்ணூற்று ஆறு இலட்சத்து +௯௭ தொண்ணூற்று ஏழு இலட்சத்து +௯௮ தொண்ணூற்று எட்டு இலட்சத்து +௯௯ தொண்ணூற்று ஒன்பது இலட்சத்து +௧௦ பத்து லட்சத்து +௧௧ பதினொன்று லட்சத்து +௧௨ பன்னிரண்டு லட்சத்து +௧௩ பதின்மூன்று லட்சத்து +௧௪ பதினான்கு லட்சத்து +௧௫ பதினைந்து லட்சத்து +௧௬ பதினாறு லட்சத்து +௧௭ பதினேழு லட்சத்து +௧௮ பதினெட்டு லட்சத்து +௧௯ பத்தொன்பது லட்சத்து +௨௦ இருபது லட்சத்து +௨௧ இருபத்து ஒன்று லட்சத்து +௨௨ இருபத்து இரண்டு லட்சத்து +௨௩ இருபத்து மூன்று லட்சத்து +௨௪ இருபத்து நான்கு லட்சத்து +௨௫ இருபத்து ஐந்து லட்சத்து +௨௬ இருபத்து ஆறு லட்சத்து +௨௭ இருபத்து ஏழு லட்சத்து +௨௮ இருபத்து எட்டு லட்சத்து +௨௯ இருபத்து ஒன்பது லட்சத்து +௩௦ முப்பது லட்சத்து +௩௧ முப்பத்து ஒன்று லட்சத்து +௩௨ முப்பத்து இரண்டு லட்சத்து +௩௩ முப்பத்து மூன்று லட்சத்து +௩௪ முப்பத்து நான்கு லட்சத்து +௩௫ முப்பத்து ஐந்து லட்சத்து +௩௬ முப்பத்து ஆறு லட்சத்து +௩௭ முப்பத்து ஏழு லட்சத்து +௩௮ முப்பத்து எட்டு லட்சத்து +௩௯ முப்பத்து ஒன்பது லட்சத்து +௪௦ நாற்பது லட்சத்து +௪௧ நாற்பத்து ஒன்று லட்சத்து +௪௨ நாற்பத்து இரண்டு லட்சத்து +௪௩ நாற்பத்து மூன்று லட்சத்து +௪௪ நாற்பத்து நான்கு லட்சத்து +௪௫ நாற்பத்து ஐந்து லட்சத்து +௪௬ நாற்பத்து ஆறு லட்சத்து +௪௭ நாற்பத்து ஏழு லட்சத்து +௪௮ நாற்பத்து எட்டு லட்சத்து +௪௯ நாற்பத்து ஒன்பது லட்சத்து +௫௦ ஐம்பது லட்சத்து +௫௧ ஐம்பத்து ஒன்று லட்சத்து +௫௨ ஐம்பத்து இரண்டு லட்சத்து +௫௩ ஐம்பத்து மூன்று லட்சத்து +௫௪ ஐம்பத்து நான்கு லட்சத்து +௫௫ ஐம்பத்து ஐந்து லட்சத்து +௫௬ ஐம்பத்து ஆறு லட்சத்து +௫௭ ஐம்பத்து ஏழு லட்சத்து +௫௮ ஐம்பத்து எட்டு லட்சத்து +௫௯ ஐம்பத்து ஒன்பது லட்சத்து +௬௦ அறுபது லட்சத்து +௬௧ அறுபத்து ஒன்று லட்சத்து +௬௨ அறுபத்து இரண்டு லட்சத்து +௬௩ அறுபத்து மூன்று லட்சத்து +௬௪ அறுபத்து நான்கு லட்சத்து +௬௫ அறுபத்து ஐந்து லட்சத்து +௬௬ அறுபத்து ஆறு லட்சத்து +௬௭ அறுபத்து ஏழு லட்சத்து +௬௮ அறுபத்து எட்டு லட்சத்து +௬௯ அறுபத்து ஒன்பது லட்சத்து +௭௦ எழுபது லட்சத்து +௭௧ எழுபத்து ஒன்று லட்சத்து +௭௨ எழுபத்து இரண்டு லட்சத்து +௭௩ எழுபத்து மூன்று லட்சத்து +௭௪ எழுபத்து நான்கு லட்சத்து +௭௫ எழுபத்து ஐந்து லட்சத்து +௭௬ எழுபத்து ஆறு லட்சத்து +௭௭ எழுபத்து ஏழு லட்சத்து +௭௮ எழுபத்து எட்டு லட்சத்து +௭௯ எழுபத்து ஒன்பது லட்சத்து +௮௦ எண்பது லட்சத்து +௮௧ எண்பத்து ஒன்று லட்சத்து +௮௨ எண்பத்து இரண்டு லட்சத்து +௮௩ எண்பத்து மூன்று லட்சத்து +௮௪ எண்பத்து நான்கு லட்சத்து +௮௫ எண்பத்து ஐந்து லட்சத்து +௮௬ எண்பத்து ஆறு லட்சத்து +௮௭ எண்பத்து ஏழு லட்சத்து +௮௮ எண்பத்து எட்டு லட்சத்து +௮௯ எண்பத்து ஒன்பது லட்சத்து +௯௦ தொண்ணூறு லட்சத்து +௯௧ தொண்ணூற்று ஒன்று லட்சத்து +௯௧ தொண்ணூற்று ஒரு லட்சத்து +௯௨ தொண்ணூற்று இரண்டு லட்சத்து +௯௩ தொண்ணூற்று மூன்று லட்சத்து +௯௪ தொண்ணூற்று நான்கு லட்சத்து +௯௫ தொண்ணூற்று ஐந்து லட்சத்து +௯௬ தொண்ணூற்று ஆறு லட்சத்து +௯௭ தொண்ணூற்று ஏழு லட்சத்து +௯௮ தொண்ணூற்று எட்டு லட்சத்து +௯௯ தொண்ணூற்று ஒன்பது லட்சத்து \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_join.tsv new file mode 100644 index 000000000..509ede9b5 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/lakhs_join.tsv @@ -0,0 +1,18 @@ +௧ ஒரு இலட்சத்து +௨ இரண்டு இலட்சத்து +௩ மூன்று இலட்சத்து +௪ நான்கு இலட்சத்து +௫ ஐந்து இலட்சத்து +௬ ஆறு இலட்சத்து +௭ ஏழு இலட்சத்து +௮ எட்டு இலட்சத்து +௯ ஒன்பது இலட்சத்து +௧ ஒரு லட்சத்து +௨ இரண்டு லட்சத்து +௩ மூன்று லட்சத்து +௪ நான்கு லட்சத்து +௫ ஐந்து லட்சத்து +௬ ஆறு லட்சத்து +௭ ஏழு லட்சத்து +௮ எட்டு லட்சத்து +௯ ஒன்பது லட்சத்து \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/teens_and_ties.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/teens_and_ties.tsv new file mode 100644 index 000000000..62edb8275 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/teens_and_ties.tsv @@ -0,0 +1,177 @@ +௧௦ பத்து +௧௧ பதினொன்று +௧௨ பன்னிரண்டு +௧௩ பதின்மூன்று +௧௪ பதினான்கு +௧௫ பதினைந்து +௧௬ பதினாறு +௧௭ பதினேழு +௧௮ பதினெட்டு +௧௯ பத்தொன்பது +௨௦ இருபது +௨௧ இருபத்து ஒன்று +௨௨ இருபத்து இரண்டு +௨௩ இருபத்து மூன்று +௨௪ இருபத்து நான்கு +௨௫ இருபத்து ஐந்து +௨௬ இருபத்து ஆறு +௨௭ இருபத்து ஏழு +௨௮ இருபத்து எட்டு +௨௯ இருபத்து ஒன்பது +௩௦ முப்பது +௩௧ முப்பத்து ஒன்று +௩௨ முப்பத்து இரண்டு +௩௩ முப்பத்து மூன்று +௩௪ முப்பத்து நான்கு +௩௫ முப்பத்து ஐந்து +௩௬ முப்பத்து ஆறு +௩௭ முப்பத்து ஏழு +௩௮ முப்பத்து எட்டு +௩௯ முப்பத்து ஒன்பது +௪௦ நாற்பது +௪௧ நாற்பத்து ஒன்று +௪௨ நாற்பத்து இரண்டு +௪௩ நாற்பத்து மூன்று +௪௪ நாற்பத்து நான்கு +௪௪ நாற்பத்துநான்கு +௪௫ நாற்பத்து ஐந்து +௪௬ நாற்பத்து ஆறு +௪௭ நாற்பத்து ஏழு +௪௮ நாற்பத்து எட்டு +௪௯ நாற்பத்து ஒன்பது +௫௦ ஐம்பது +௫௧ ஐம்பத்து ஒன்று +௫௨ ஐம்பத்து இரண்டு +௫௩ ஐம்பத்து மூன்று +௫௪ ஐம்பத்து நான்கு +௫௫ ஐம்பத்து ஐந்து +௫௬ ஐம்பத்து ஆறு +௫௭ ஐம்பத்து ஏழு +௫௮ ஐம்பத்து எட்டு +௫௯ ஐம்பத்து ஒன்பது +௬௦ அறுபது +௬௧ அறுபத்து ஒன்று +௬௨ அறுபத்து இரண்டு +௬௩ அறுபத்து மூன்று +௬௪ அறுபத்து நான்கு +௬௫ அறுபத்து ஐந்து +௬௬ அறுபத்து ஆறு +௬௭ அறுபத்து ஏழு +௬௮ அறுபத்து எட்டு +௬௯ அறுபத்து ஒன்பது +௭௦ எழுபது +௭௧ எழுபத்து ஒன்று +௭௨ எழுபத்து இரண்டு +௭௩ எழுபத்து மூன்று +௭௪ எழுபத்து நான்கு +௭௫ எழுபத்து ஐந்து +௭௬ எழுபத்து ஆறு +௭௭ எழுபத்து ஏழு +௭௮ எழுபத்து எட்டு +௭௯ எழுபத்து ஒன்பது +௮௦ எண்பது +௮௧ எண்பத்து ஒன்று +௮௨ எண்பத்து இரண்டு +௮௩ எண்பத்து மூன்று +௮௪ எண்பத்து நான்கு +௮௫ எண்பத்து ஐந்து +௮௬ எண்பத்து ஆறு +௮௭ எண்பத்து ஏழு +௮௮ எண்பத்து எட்டு +௮௯ எண்பத்து ஒன்பது +௯௦ தொண்ணூறு +௯௧ தொண்ணூற்று ஒன்று +௯௨ தொண்ணூற்று இரண்டு +௯௩ தொண்ணூற்று மூன்று +௯௪ தொண்ணூற்று நான்கு +௯௫ தொண்ணூற்று ஐந்து +௯௬ தொண்ணூற்று ஆறு +௯௭ தொண்ணூற்று ஏழு +௯௮ தொண்ணூற்று எட்டு +௯௯ தொண்ணூற்று ஒன்பது +௨௫ இருபத்தைந்து +௩௫ முப்பத்தைந்து +௪௫ நாற்பத்தைந்து +௫௫ ஐம்பத்தைந்து +௬௫ அறுபத்தைந்து +௭௫ எழுபத்தைந்து +௮௫ எண்பத்தைந்து +௯௫ தொண்ணூற்றைந்து +௧௩ பதிமூன்று +௧௪ பதிநான்கு +௨௨ இருபத்திரண்டு +௨௩ இருபத்திமூன்று +௩௨ முப்பத்திரண்டு +௩௬ முப்பத்தாறு +௪௬ நாற்பத்தாறு +௬௬ அறுபத்தாறு +௨௧ இருபத்தொன்று +௩௧ முப்பத்தொன்று +௪௧ நாற்பத்தொன்று +௫௧ ஐம்பத்தொன்று +௬௧ அறுபத்தொன்று +௭௧ எழுபத்தொன்று +௮௧ எண்பத்தொன்று +௯௧ தொண்ணூற்றொன்று +௮௮ எண்பத்தெட்டு +௨௨ இருபத்திரண்டு +௩௨ முப்பத்திரண்டு +௪௨ நாற்பத்திரண்டு +௫௨ ஐம்பத்திரண்டு +௬௨ அறுபத்திரண்டு +௭௨ எழுபத்திரண்டு +௮௨ எண்பத்திரண்டு +௯௨ தொண்ணூற்றிரண்டு +௨௩ இருபத்திமூன்று +௩௩ முப்பத்திமூன்று +௪௩ நாற்பத்திமூன்று +௫௩ ஐம்பத்திமூன்று +௬௩ அறுபத்திமூன்று +௭௩ எழுபத்திமூன்று +௮௩ எண்பத்திமூன்று +௯௩ தொண்ணூற்றிமூன்று +௨௪ இருபத்திநான்கு +௩௪ முப்பத்திநான்கு +௪௪ நாற்பத்திநான்கு +௫௪ ஐம்பத்திநான்கு +௬௪ அறுபத்திநான்கு +௭௪ எழுபத்திநான்கு +௮௪ எண்பத்திநான்கு +௯௪ தொண்ணூற்றிநான்கு +௨௫ இருபத்தைந்து +௩௫ முப்பத்தைந்து +௪௫ நாற்பத்தைந்து +௫௫ ஐம்பத்தைந்து +௬௫ அறுபத்தைந்து +௭௫ எழுபத்தைந்து +௮௫ எண்பத்தைந்து +௯௫ தொண்ணூற்றைந்து +௨௬ இருபத்தாறு +௫௬ ஐம்பத்தாறு +௭௬ எழுபத்தாறு +௮௬ எண்பத்தாறு +௯௬ தொண்ணூற்றாறு +௨௭ இருபத்தேழு +௩௭ முப்பத்தேழு +௪௭ நாற்பத்தேழு +௫௭ ஐம்பத்தேழு +௬௭ அறுபத்தேழு +௭௭ எழுபத்தேழு +௮௭ எண்பத்தேழு +௯௭ தொண்ணூற்றேழு +௨௮ இருபத்தெட்டு +௩௮ முப்பத்தெட்டு +௪௮ நாற்பத்தெட்டு +௫௮ ஐம்பத்தெட்டு +௬௮ அறுபத்தெட்டு +௭௮ எழுபத்தெட்டு +௮௮ எண்பத்தெட்டு +௯௮ தொண்ணூற்றெட்டு +௨௯ இருபத்தொன்பது +௩௯ முப்பத்தொன்பது +௪௯ நாற்பத்தொன்பது +௫௯ ஐம்பத்தொன்பது +௬௯ அறுபத்தொன்பது +௭௯ எழுபத்தொன்பது +௮௯ எண்பத்தொன்பது +௯௯ தொண்ணூற்றொன்பது \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands.tsv new file mode 100644 index 000000000..59a580bd6 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands.tsv @@ -0,0 +1,10 @@ +௧ ஆயிரம் +௨ இரண்டாயிரம் +௩ மூன்றாயிரம் +௪ நான்காயிரம் +௫ ஐந்தாயிரம் +௫ ஐயாயிரம் +௬ ஆறாயிரம் +௭ ஏழாயிரம் +௮ எட்டாயிரம் +௯ ஒன்பதாயிரம் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99.tsv new file mode 100644 index 000000000..5b5972c8b --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99.tsv @@ -0,0 +1,114 @@ +௧௦ பத்தாயிரம் +௧௧ பதினொன்றாயிரம் +௧௨ பன்னிரண்டாயிரம் +௧௩ பதின்மூன்றாயிரம் +௧௪ பதினான்காயிரம் +௧௫ பதினைந்தாயிரம் +௧௬ பதினாறாயிரம் +௧௭ பதினேழாயிரம் +௧௮ பதினெட்டாயிரம் +௧௯ பத்தொன்பதாயிரம் +௨௦ இருபதாயிரம் +௨௧ இருபத்து ஒன்றாயிரம் +௨௨ இருபத்து இரண்டாயிரம் +௨௩ இருபத்து மூன்றாயிரம் +௨௪ இருபத்து நான்காயிரம் +௨௫ இருபத்து ஐந்தாயிரம் +௨௬ இருபத்தாறாயிரம் +௨௭ இருபத்து ஏழாயிரம் +௨௮ இருபத்து எட்டாயிரம் +௨௯ இருபத்து ஒன்பதாயிரம் +௩௦ முப்பதாயிரம் +௩௧ முப்பத்து ஒன்றாயிரம் +௩௨ முப்பத்து இரண்டாயிரம் +௩௩ முப்பத்து மூன்றாயிரம் +௩௪ முப்பத்து நான்காயிரம் +௩௫ முப்பத்து ஐந்தாயிரம் +௩௬ முப்பத்தாறாயிரம் +௩௭ முப்பத்து ஏழாயிரம் +௩௮ முப்பத்து எட்டாயிரம் +௩௯ முப்பத்து ஒன்பதாயிரம் +௪௦ நாற்பதாயிரம் +௪௧ நாற்பத்து ஒன்றாயிரம் +௪௨ நாற்பத்து இரண்டாயிரம் +௪௩ நாற்பத்து மூன்றாயிரம் +௪௪ நாற்பத்து நான்காயிரம் +௪௫ நாற்பத்து ஐந்தாயிரம் +௪௬ நாற்பத்தாறாயிரம் +௪௭ நாற்பத்து ஏழாயிரம் +௪௮ நாற்பத்து எட்டாயிரம் +௪௯ நாற்பத்து ஒன்பதாயிரம் +௫௦ ஐம்பதாயிரம் +௫௧ ஐம்பத்து ஒன்றாயிரம் +௫௨ ஐம்பத்து இரண்டாயிரம் +௫௩ ஐம்பத்து மூன்றாயிரம் +௫௪ ஐம்பத்து நான்காயிரம் +௫௫ ஐம்பத்து ஐந்தாயிரம் +௫௬ ஐம்பத்தாறாயிரம் +௫௭ ஐம்பத்து ஏழாயிரம் +௫௮ ஐம்பத்து எட்டாயிரம் +௫௯ ஐம்பத்து ஒன்பதாயிரம் +௬௦ அறுபதாயிரம் +௬௧ அறுபத்து ஒன்றாயிரம் +௬௨ அறுபத்து இரண்டாயிரம் +௬௩ அறுபத்து மூன்றாயிரம் +௬௪ அறுபத்து நான்காயிரம் +௬௫ அறுபத்து ஐந்தாயிரம் +௬௬ அறுபத்தாறாயிரம் +௬௭ அறுபத்து ஏழாயிரம் +௬௮ அறுபத்து எட்டாயிரம் +௬௯ அறுபத்து ஒன்பதாயிரம் +௭௦ எழுபதாயிரம் +௭௧ எழுபத்து ஒன்றாயிரம் +௭௨ எழுபத்து இரண்டாயிரம் +௭௩ எழுபத்து மூன்றாயிரம் +௭௪ எழுபத்து நான்காயிரம் +௭௫ எழுபத்து ஐந்தாயிரம் +௭௬ எழுபத்தாறாயிரம் +௭௭ எழுபத்து ஏழாயிரம் +௭௮ எழுபத்து எட்டாயிரம் +௭௯ எழுபத்து ஒன்பதாயிரம் +௮௦ எண்பதாயிரம் +௮௧ எண்பத்து ஒன்றாயிரம் +௮௨ எண்பத்து இரண்டாயிரம் +௮௩ எண்பத்து மூன்றாயிரம் +௮௪ எண்பத்து நான்காயிரம் +௮௫ எண்பத்து ஐந்தாயிரம் +௮௬ எண்பத்தாறாயிரம் +௮௭ எண்பத்து ஏழாயிரம் +௮௮ எண்பத்து எட்டாயிரம் +௮௯ எண்பத்து ஒன்பதாயிரம் +௯௦ தொண்ணூறாயிரம் +௯௧ தொண்ணூற்று ஒன்றாயிரம் +௯௨ தொண்ணூற்று இரண்டாயிரம் +௯௩ தொண்ணூற்று மூன்றாயிரம் +௯௪ தொண்ணூற்று நான்காயிரம் +௯௫ தொண்ணூற்று ஐந்தாயிரம் +௯௬ தொண்ணூற்றாறாயிரம் +௯௭ தொண்ணூற்று ஏழாயிரம் +௯௮ தொண்ணூற்று எட்டாயிரம் +௯௯ தொண்ணூற்று ஒன்பதாயிரம் +௨௧ இருபத்தொன்றாயிரம் +௩௧ முப்பத்தொன்றாயிரம் +௪௧ நாற்பத்தொன்றாயிரம் +௫௧ ஐம்பத்தொன்றாயிரம் +௬௧ அறுபத்தொன்றாயிரம் +௭௧ எழுபத்தொன்றாயிரம் +௮௧ எண்பத்தொன்றாயிரம் +௯௧ தொண்ணூற்றொன்றாயிரம் +௨௫ இருபத்தைந்தாயிரம் +௩௫ முப்பத்தைந்தாயிரம் +௪௫ நாற்பத்தைந்தாயிரம் +௫௫ ஐம்பத்தைந்தாயிரம் +௬௫ அறுபத்தைந்தாயிரம் +௭௫ எழுபத்தைந்தாயிரம் +௮௫ எண்பத்தைந்தாயிரம் +௯௫ தொண்ணூற்றைந்தாயிரம் +௨௬ இருபத்து ஆறாயிரம் +௩௬ முப்பத்து ஆறாயிரம் +௪௬ நாற்பத்து ஆறாயிரம் +௫௬ ஐம்பத்து ஆறாயிரம் +௬௬ அறுபத்து ஆறாயிரம் +௭௬ எழுபத்து ஆறாயிரம் +௮௬ எண்பத்து ஆறாயிரம் +௯௬ தொண்ணூற்று ஆறாயிரம் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99_join.tsv new file mode 100644 index 000000000..c99953f46 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_10_99_join.tsv @@ -0,0 +1,114 @@ +௧௦ பத்தாயிரத்து +௧௧ பதினொன்றாயிரத்து +௧௨ பன்னிரண்டாயிரத்து +௧௩ பதின்மூன்றாயிரத்து +௧௪ பதினான்காயிரத்து +௧௫ பதினைந்தாயிரத்து +௧௬ பதினாறாயிரத்து +௧௭ பதினேழாயிரத்து +௧௮ பதினெட்டாயிரத்து +௧௯ பத்தொன்பதாயிரத்து +௨௦ இருபதாயிரத்து +௨௧ இருபத்து ஒன்றாயிரத்து +௨௨ இருபத்து இரண்டாயிரத்து +௨௩ இருபத்து மூன்றாயிரத்து +௨௪ இருபத்து நான்காயிரத்து +௨௫ இருபத்து ஐந்தாயிரத்து +௨௬ இருபத்தாறாயிரத்து +௨௭ இருபத்து ஏழாயிரத்து +௨௮ இருபத்து எட்டாயிரத்து +௨௯ இருபத்து ஒன்பதாயிரத்து +௩௦ முப்பதாயிரத்து +௩௧ முப்பத்து ஒன்றாயிரத்து +௩௨ முப்பத்து இரண்டாயிரத்து +௩௩ முப்பத்து மூன்றாயிரத்து +௩௪ முப்பத்து நான்காயிரத்து +௩௫ முப்பத்து ஐந்தாயிரத்து +௩௬ முப்பத்தாறாயிரத்து +௩௭ முப்பத்து ஏழாயிரத்து +௩௮ முப்பத்து எட்டாயிரத்து +௩௯ முப்பத்து ஒன்பதாயிரத்து +௪௦ நாற்பதாயிரத்து +௪௧ நாற்பத்து ஒன்றாயிரத்து +௪௨ நாற்பத்து இரண்டாயிரத்து +௪௩ நாற்பத்து மூன்றாயிரத்து +௪௪ நாற்பத்து நான்காயிரத்து +௪௫ நாற்பத்து ஐந்தாயிரத்து +௪௬ நாற்பத்தாறாயிரத்து +௪௭ நாற்பத்து ஏழாயிரத்து +௪௮ நாற்பத்து எட்டாயிரத்து +௪௯ நாற்பத்து ஒன்பதாயிரத்து +௫௦ ஐம்பதாயிரத்து +௫௧ ஐம்பத்து ஒன்றாயிரத்து +௫௨ ஐம்பத்து இரண்டாயிரத்து +௫௩ ஐம்பத்து மூன்றாயிரத்து +௫௪ ஐம்பத்து நான்காயிரத்து +௫௫ ஐம்பத்து ஐந்தாயிரத்து +௫௬ ஐம்பத்தாறாயிரத்து +௫௭ ஐம்பத்து ஏழாயிரத்து +௫௮ ஐம்பத்து எட்டாயிரத்து +௫௯ ஐம்பத்து ஒன்பதாயிரத்து +௬௦ அறுபதாயிரத்து +௬௧ அறுபத்து ஒன்றாயிரத்து +௬௨ அறுபத்து இரண்டாயிரத்து +௬௩ அறுபத்து மூன்றாயிரத்து +௬௪ அறுபத்து நான்காயிரத்து +௬௫ அறுபத்து ஐந்தாயிரத்து +௬௬ அறுபத்தாறாயிரத்து +௬௭ அறுபத்து ஏழாயிரத்து +௬௮ அறுபத்து எட்டாயிரத்து +௬௯ அறுபத்து ஒன்பதாயிரத்து +௭௦ எழுபதாயிரத்து +௭௧ எழுபத்து ஒன்றாயிரத்து +௭௨ எழுபத்து இரண்டாயிரத்து +௭௩ எழுபத்து மூன்றாயிரத்து +௭௪ எழுபத்து நான்காயிரத்து +௭௫ எழுபத்து ஐந்தாயிரத்து +௭௬ எழுபத்தாறாயிரத்து +௭௭ எழுபத்து ஏழாயிரத்து +௭௮ எழுபத்து எட்டாயிரத்து +௭௯ எழுபத்து ஒன்பதாயிரத்து +௮௦ எண்பதாயிரத்து +௮௧ எண்பத்து ஒன்றாயிரத்து +௮௨ எண்பத்து இரண்டாயிரத்து +௮௩ எண்பத்து மூன்றாயிரத்து +௮௪ எண்பத்து நான்காயிரத்து +௮௫ எண்பத்து ஐந்தாயிரத்து +௮௬ எண்பத்தாறாயிரத்து +௮௭ எண்பத்து ஏழாயிரத்து +௮௮ எண்பத்து எட்டாயிரத்து +௮௯ எண்பத்து ஒன்பதாயிரத்து +௯௦ தொண்ணூறாயிரத்து +௯௧ தொண்ணூற்று ஒன்றாயிரத்து +௯௨ தொண்ணூற்று இரண்டாயிரத்து +௯௩ தொண்ணூற்று மூன்றாயிரத்து +௯௪ தொண்ணூற்று நான்காயிரத்து +௯௫ தொண்ணூற்று ஐந்தாயிரத்து +௯௬ தொண்ணூற்றாறாயிரத்து +௯௭ தொண்ணூற்று ஏழாயிரத்து +௯௮ தொண்ணூற்று எட்டாயிரத்து +௯௯ தொண்ணூற்று ஒன்பதாயிரத்து +௨௧ இருபத்தொன்றாயிரத்து +௩௧ முப்பத்தொன்றாயிரத்து +௪௧ நாற்பத்தொன்றாயிரத்து +௫௧ ஐம்பத்தொன்றாயிரத்து +௬௧ அறுபத்தொன்றாயிரத்து +௭௧ எழுபத்தொன்றாயிரத்து +௮௧ எண்பத்தொன்றாயிரத்து +௯௧ தொண்ணூற்றொன்றாயிரத்து +௨௫ இருபத்தைந்தாயிரத்து +௩௫ முப்பத்தைந்தாயிரத்து +௪௫ நாற்பத்தைந்தாயிரத்து +௫௫ ஐம்பத்தைந்தாயிரத்து +௬௫ அறுபத்தைந்தாயிரத்து +௭௫ எழுபத்தைந்தாயிரத்து +௮௫ எண்பத்தைந்தாயிரத்து +௯௫ தொண்ணூற்றைந்தாயிரத்து +௨௬ இருபத்து ஆறாயிரத்து +௩௬ முப்பத்து ஆறாயிரத்து +௪௬ நாற்பத்து ஆறாயிரத்து +௫௬ ஐம்பத்து ஆறாயிரத்து +௬௬ அறுபத்து ஆறாயிரத்து +௭௬ எழுபத்து ஆறாயிரத்து +௮௬ எண்பத்து ஆறாயிரத்து +௯௬ தொண்ணூற்று ஆறாயிரத்து \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_join.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_join.tsv new file mode 100644 index 000000000..5a9a174ab --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/thousands_join.tsv @@ -0,0 +1,10 @@ +௧ ஆயிரத்து +௨ இரண்டாயிரத்து +௩ மூன்றாயிரத்து +௪ நான்காயிரத்து +௫ ஐந்தாயிரத்து +௫ ஐயாயிரத்து +௬ ஆறாயிரத்து +௭ ஏழாயிரத்து +௮ எட்டாயிரத்து +௯ ஒன்பதாயிரத்து \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/data/numbers/zero.tsv b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/zero.tsv new file mode 100644 index 000000000..f2edd5dc9 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/data/numbers/zero.tsv @@ -0,0 +1,3 @@ +௦ பூஜ்யம் +௦ பூஜ்ஜியம் +௦ சுழியம் \ No newline at end of file diff --git a/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py b/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py new file mode 100644 index 000000000..d76d398f5 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py @@ -0,0 +1,204 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# Copyright 2024 and onwards Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +import string +from pathlib import Path +from typing import Dict + +import pynini +from pynini import Far +from pynini.examples import plurals +from pynini.export import export +from pynini.lib import byte, pynutil, utf8 + +from nemo_text_processing.inverse_text_normalization.ta.utils import get_abs_path, load_labels + +NEMO_CHAR = utf8.VALID_UTF8_CHAR + +graph_digit = pynini.string_file(get_abs_path("data/numbers/digit.tsv")) + +NEMO_TA_DIGIT = pynini.union("௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯").optimize() +TAMIL_DIGIT = ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯"] + +NEMO_HEX = pynini.union(*string.hexdigits).optimize() +NEMO_NON_BREAKING_SPACE = u"\u00a0" +NEMO_ZWNJ = u"\u200c" +NEMO_SPACE = " " +NEMO_WHITE_SPACE = pynini.union(" ", "\t", "\n", "\r", u"\u00a0").optimize() +NEMO_NOT_SPACE = pynini.difference(NEMO_CHAR, NEMO_WHITE_SPACE).optimize() +NEMO_NOT_QUOTE = pynini.difference(NEMO_CHAR, r'"').optimize() + +NEMO_PUNCT = pynini.union(*map(pynini.escape, string.punctuation)).optimize() +NEMO_GRAPH = pynini.union(NEMO_CHAR, NEMO_PUNCT).optimize() + +NEMO_SIGMA = pynini.closure(NEMO_CHAR) + +delete_space = pynutil.delete(pynini.closure(NEMO_WHITE_SPACE)) +delete_zero_or_one_space = pynutil.delete(pynini.closure(NEMO_WHITE_SPACE, 0, 1)) +insert_space = pynutil.insert(" ") +delete_extra_space = pynini.cross(pynini.closure(NEMO_WHITE_SPACE, 1), " ") +delete_preserve_order = pynini.closure( + pynutil.delete(" preserve_order: true") + | (pynutil.delete(" field_order: \"") + NEMO_NOT_QUOTE + pynutil.delete("\"")) +) + + +MIN_NEG_WEIGHT = -0.0001 +MIN_POS_WEIGHT = 0.0001 +INPUT_CASED = "cased" +INPUT_LOWER_CASED = "lower_cased" +MINUS = pynini.union("மைனஸ்", "எதிர்மறை").optimize() + + +def integer_to_tamil(n: int) -> str: + return ''.join(TAMIL_DIGIT[int(d)] for d in str(n)) + + +def generator_main(file_name: str, graphs: Dict[str, 'pynini.FstLike']): + """ + Exports graph as OpenFst finite state archive (FAR) file with given file name and rule name. + + Args: + file_name: exported file name + graphs: Mapping of a rule name and Pynini WFST graph to be exported + """ + exporter = export.Exporter(file_name) + for rule, graph in graphs.items(): + exporter[rule] = graph.optimize() + exporter.close() + logging.info(f'Created {file_name}') + + +def convert_space(fst) -> 'pynini.FstLike': + """ + Converts space to nonbreaking space. + Used only in tagger grammars for transducing token values within quotes, e.g. name: "hello kitty" + This is making transducer significantly slower, so only use when there could be potential spaces within quotes, otherwise leave it. + + Args: + fst: input fst + + Returns output fst where breaking spaces are converted to non breaking spaces + """ + return fst @ pynini.cdrewrite(pynini.cross(NEMO_SPACE, NEMO_NON_BREAKING_SPACE), "", "", NEMO_SIGMA) + + +def string_map_cased(input_file: str, input_case: str = INPUT_LOWER_CASED): + labels = load_labels(input_file) + + if input_case == INPUT_CASED: + additional_labels = [] + for written, spoken, *weight in labels: + written_capitalized = written[0].upper() + written[1:] + additional_labels.extend( + [ + [written_capitalized, spoken.capitalize()], # first letter capitalized + [ + written_capitalized, + spoken.upper().replace(" AND ", " and "), + ], # # add pairs with the all letters capitalized + ] + ) + + spoken_no_space = spoken.replace(" ", "") + # add abbreviations without spaces (both lower and upper case), i.e. "BMW" not "B M W" + if len(spoken) == (2 * len(spoken_no_space) - 1): + logging.debug(f"This is weight {weight}") + if len(weight) == 0: + additional_labels.extend( + [[written, spoken_no_space], [written_capitalized, spoken_no_space.upper()]] + ) + else: + additional_labels.extend( + [ + [written, spoken_no_space, weight[0]], + [written_capitalized, spoken_no_space.upper(), weight[0]], + ] + ) + labels += additional_labels + + whitelist = pynini.string_map(labels).invert().optimize() + return whitelist + + +class GraphFst: + """ + Base class for all grammar fsts. + + Args: + name: name of grammar class + kind: either 'classify' or 'verbalize' + deterministic: if True will provide a single transduction option, + for False multiple transduction are generated (used for audio-based normalization) + """ + + def __init__(self, name: str, kind: str, deterministic: bool = True): + self.name = name + self.kind = kind + self._fst = None + self.deterministic = deterministic + + self.far_path = Path(os.path.dirname(__file__) + '/grammars/' + kind + '/' + name + '.far') + if self.far_exist(): + self._fst = Far(self.far_path, mode="r", arc_type="standard", far_type="default").get_fst() + + def far_exist(self) -> bool: + """ + Returns true if FAR can be loaded + """ + return self.far_path.exists() + + @property + def fst(self) -> 'pynini.FstLike': + return self._fst + + @fst.setter + def fst(self, fst): + self._fst = fst + + def add_tokens(self, fst) -> 'pynini.FstLike': + """ + Wraps class name around to given fst + + Args: + fst: input fst + + Returns: + Fst: fst + """ + return pynutil.insert(f"{self.name} {{ ") + fst + pynutil.insert(" }") + + def delete_tokens(self, fst) -> 'pynini.FstLike': + """ + Deletes class name wrap around output of given fst + + Args: + fst: input fst + + Returns: + Fst: fst + """ + res = ( + pynutil.delete(f"{self.name}") + + delete_space + + pynutil.delete("{") + + delete_space + + fst + + delete_space + + pynutil.delete("}") + ) + return res @ pynini.cdrewrite(pynini.cross(u"\u00a0", " "), "", "", NEMO_SIGMA) diff --git a/nemo_text_processing/inverse_text_normalization/ta/taggers/__init__.py b/nemo_text_processing/inverse_text_normalization/ta/taggers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nemo_text_processing/inverse_text_normalization/ta/taggers/cardinal.py b/nemo_text_processing/inverse_text_normalization/ta/taggers/cardinal.py new file mode 100644 index 000000000..c5863d4d4 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/taggers/cardinal.py @@ -0,0 +1,495 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini +import pynini +from pynini.lib import pynutil + +import nemo_text_processing.inverse_text_normalization.ta.utils +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import GraphFst, delete_space + + +class CardinalFst(GraphFst): + + def __init__(self): + super().__init__(name="cardinal", kind="classify") + + graph_zero = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/zero.tsv") + ).invert() + + graph_digit = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/digit.tsv") + ).invert() + + graph_teens_and_ties = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/teens_and_ties.tsv") + ).invert() + + graph_hundreds = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/hundreds.tsv") + ).invert() + + graph_hundreds_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/hundreds_join.tsv") + ).invert() + + graph_thousands = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/thousands.tsv") + ).invert() + + graph_thousands_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/thousands_join.tsv") + ).invert() + + graph_thousands_10_99 = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/thousands_10_99.tsv") + ).invert() + + graph_thousands_10_99_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path( + "data/numbers/thousands_10_99_join.tsv" + ) + ).invert() + + graph_lakhs = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/lakhs.tsv") + ).invert() + + graph_lakhs_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/lakhs_join.tsv") + ).invert() + + graph_lakhs_10_99 = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/lakhs_10_99.tsv") + ).invert() + + graph_lakhs_10_99_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/lakhs_10_99_join.tsv") + ).invert() + + graph_crores = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/crores.tsv") + ).invert() + + graph_crores_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/crores_join.tsv") + ).invert() + + graph_crores_10_99 = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/crores_10_99.tsv") + ).invert() + + graph_crores_10_99_join = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/crores_10_99_join.tsv") + ).invert() + + case_graph = pynini.string_file( + nemo_text_processing.inverse_text_normalization.ta.utils.get_abs_path("data/numbers/case_suffix.tsv") + ) + + self.graph_single_digit = graph_digit + + graph_digit_with_zero = ( + pynini.cross("ஒன்று", "௦௧") + | pynini.cross("இரண்டு", "௦௨") + | pynini.cross("மூன்று", "௦௩") + | pynini.cross("நான்கு", "௦௪") + | pynini.cross("ஐந்து", "௦௫") + | pynini.cross("ஆறு", "௦௬") + | pynini.cross("ஏழு", "௦௭") + | pynini.cross("எட்டு", "௦௮") + | pynini.cross("ஒன்பது", "௦௯") + ) + + # 10-99 + self.graph_two_digit = graph_teens_and_ties + + # 100, 200, ... 900 + self.graph_exact_hundreds = graph_hundreds + pynutil.insert("௦௦") + + # 101-109 + graph_hundred_digit = graph_hundreds_join + delete_space + graph_digit_with_zero + + # 110-199, 120-199, ... + graph_hundred_two_digit = graph_hundreds_join + delete_space + graph_teens_and_ties + + self.graph_hundred_with_remainder = graph_hundred_digit | graph_hundred_two_digit + + # 1000, 2000 ... 9000 + self.graph_exact_thousands = graph_thousands + pynutil.insert("௦௦௦") + + graph_thousand_digit = graph_thousands_join + pynutil.insert("௦௦") + delete_space + self.graph_single_digit + + # 1010-1099 + graph_thousand_two_digit = graph_thousands_join + pynutil.insert("௦") + delete_space + self.graph_two_digit + + # 1100, 1200 ... 1900 + graph_thousand_hundred = graph_thousands_join + delete_space + self.graph_exact_hundreds + + # 1101-1999 ... 9901-9999 + graph_thousand_hundred_remainder = graph_thousands_join + delete_space + self.graph_hundred_with_remainder + + self.graph_thousand_with_remainder = ( + graph_thousand_digit | graph_thousand_two_digit | graph_thousand_hundred | graph_thousand_hundred_remainder + ) + + # 10000 - 99000 + # ========================= + graph_exact_large_thousands = graph_thousands_10_99 + pynutil.insert("௦௦௦") + + graph_large_thousand_digit = ( + graph_thousands_10_99_join + pynutil.insert("௦௦") + delete_space + self.graph_single_digit + ) + + graph_large_thousand_two_digit = ( + graph_thousands_10_99_join + pynutil.insert("௦") + delete_space + self.graph_two_digit + ) + + graph_large_thousand_hundred = graph_thousands_10_99_join + delete_space + self.graph_exact_hundreds + + graph_large_thousand_hundred_remainder = ( + graph_thousands_10_99_join + delete_space + self.graph_hundred_with_remainder + ) + + self.graph_large_thousands = ( + graph_exact_large_thousands + | graph_large_thousand_digit + | graph_large_thousand_two_digit + | graph_large_thousand_hundred + | graph_large_thousand_hundred_remainder + ) + + # 1,00,000 - 9,00,000 + graph_exact_lakhs = graph_lakhs + pynutil.insert("௦௦௦௦௦") + + # 10,00,000 - 99,00,000 + graph_exact_lakhs_10_99 = graph_lakhs_10_99 + pynutil.insert("௦௦௦௦௦") + + graph_lakh_digit = graph_lakhs_join + pynutil.insert("௦௦௦௦") + delete_space + self.graph_single_digit + graph_lakh_two_digit = graph_lakhs_join + pynutil.insert("௦௦௦") + delete_space + self.graph_two_digit + graph_lakh_hundred = graph_lakhs_join + pynutil.insert("௦௦") + delete_space + self.graph_exact_hundreds + graph_lakh_hundred_remainder = ( + graph_lakhs_join + pynutil.insert("௦௦") + delete_space + self.graph_hundred_with_remainder + ) + + graph_lakh_thousand_remainder = ( + graph_lakhs_join + pynutil.insert("௦") + delete_space + self.graph_thousand_with_remainder + ) + graph_lakh_large_thousand = graph_lakhs_join + delete_space + graph_exact_large_thousands + graph_lakh_large_thousand_remainder = graph_lakhs_join + delete_space + self.graph_large_thousands + + graph_lakh_thousand = graph_lakhs_join + pynutil.insert("௦") + delete_space + self.graph_exact_thousands + + graph_lakh_remainder = ( + graph_lakh_digit + | graph_lakh_two_digit + | graph_lakh_hundred + | graph_lakh_hundred_remainder + | graph_lakh_thousand + | graph_lakh_thousand_remainder + | graph_lakh_large_thousand + | graph_lakh_large_thousand_remainder + ) + + graph_lakh_10_99_digit = ( + graph_lakhs_10_99_join + pynutil.insert("௦௦௦௦") + delete_space + self.graph_single_digit + ) + + graph_lakh_10_99_two_digit = ( + graph_lakhs_10_99_join + pynutil.insert("௦௦௦") + delete_space + self.graph_two_digit + ) + + graph_lakh_10_99_hundred = ( + graph_lakhs_10_99_join + pynutil.insert("௦௦") + delete_space + self.graph_exact_hundreds + ) + + graph_lakh_10_99_hundred_remainder = ( + graph_lakhs_10_99_join + pynutil.insert("௦௦") + delete_space + self.graph_hundred_with_remainder + ) + + graph_lakh_10_99_thousand = ( + graph_lakhs_10_99_join + pynutil.insert("௦") + delete_space + self.graph_exact_thousands + ) + + graph_lakh_10_99_thousand_remainder = ( + graph_lakhs_10_99_join + pynutil.insert("௦") + delete_space + self.graph_thousand_with_remainder + ) + + graph_lakh_10_99_large_thousand = graph_lakhs_10_99_join + delete_space + graph_exact_large_thousands + + graph_lakh_10_99_large_thousand_remainder = graph_lakhs_10_99_join + delete_space + self.graph_large_thousands + + graph_lakh_10_99_remainder = ( + graph_lakh_10_99_digit + | graph_lakh_10_99_two_digit + | graph_lakh_10_99_hundred + | graph_lakh_10_99_hundred_remainder + | graph_lakh_10_99_thousand + | graph_lakh_10_99_thousand_remainder + | graph_lakh_10_99_large_thousand + | graph_lakh_10_99_large_thousand_remainder + ) + + self.graph_lakh_numbers = ( + graph_exact_lakhs | graph_lakh_remainder | graph_exact_lakhs_10_99 | graph_lakh_10_99_remainder + ) + + # ===================================================== + # CRORES (1-9) + + graph_exact_crores = graph_crores + pynutil.insert("௦௦௦௦௦௦௦") + + graph_crore_digit = graph_crores_join + pynutil.insert("௦௦௦௦௦௦") + delete_space + self.graph_single_digit + + graph_crore_two_digit = graph_crores_join + pynutil.insert("௦௦௦௦௦") + delete_space + self.graph_two_digit + + graph_crore_hundred = graph_crores_join + pynutil.insert("௦௦௦௦") + delete_space + self.graph_exact_hundreds + + graph_crore_hundred_remainder = ( + graph_crores_join + pynutil.insert("௦௦௦௦") + delete_space + self.graph_hundred_with_remainder + ) + + graph_crore_thousand = graph_crores_join + pynutil.insert("௦௦௦") + delete_space + self.graph_exact_thousands + + graph_crore_thousand_remainder = ( + graph_crores_join + pynutil.insert("௦௦௦") + delete_space + self.graph_thousand_with_remainder + ) + + graph_crore_large_thousand = ( + graph_crores_join + pynutil.insert("௦௦") + delete_space + graph_exact_large_thousands + ) + + graph_crore_large_thousand_remainder = ( + graph_crores_join + pynutil.insert("௦௦") + delete_space + self.graph_large_thousands + ) + + graph_crore_lakh_10_99 = graph_crores_join + delete_space + graph_exact_lakhs_10_99 + + graph_crore_lakh_10_99_remainder = graph_crores_join + delete_space + graph_lakh_10_99_remainder + + graph_crore_lakh = graph_crores_join + pynutil.insert("௦") + delete_space + graph_exact_lakhs + + graph_crore_lakh_remainder = graph_crores_join + pynutil.insert("௦") + delete_space + graph_lakh_remainder + + graph_crore_remainder = ( + graph_crore_digit + | graph_crore_two_digit + | graph_crore_hundred + | graph_crore_hundred_remainder + | graph_crore_thousand + | graph_crore_thousand_remainder + | graph_crore_large_thousand + | graph_crore_large_thousand_remainder + | graph_crore_lakh + | graph_crore_lakh_remainder + | graph_crore_lakh_10_99 + | graph_crore_lakh_10_99_remainder + ) + + # ===================================================== + # CRORES (10-99) + + graph_exact_crores_10_99 = graph_crores_10_99 + pynutil.insert("௦௦௦௦௦௦௦") + + graph_crore_10_99_remainder = ( + graph_crores_10_99_join + + delete_space + + ( + self.graph_single_digit + | self.graph_two_digit + | self.graph_exact_hundreds + | self.graph_hundred_with_remainder + | self.graph_exact_thousands + | self.graph_thousand_with_remainder + | graph_exact_large_thousands + | self.graph_large_thousands + | graph_exact_lakhs + | graph_lakh_remainder + | graph_exact_lakhs_10_99 + | graph_lakh_10_99_remainder + ) + ) + + self.graph_crore_numbers = ( + graph_exact_crores | graph_crore_remainder | graph_exact_crores_10_99 | graph_crore_10_99_remainder + ) + + # CRORE MULTIPLIERS (>99 CRORES) + # ===================================================== + + graph_crore_multiplier_base = ( + self.graph_exact_hundreds + | self.graph_hundred_with_remainder + | self.graph_exact_thousands + | self.graph_thousand_with_remainder + | graph_exact_large_thousands + | self.graph_large_thousands + | self.graph_lakh_numbers + ) + + graph_exact_crore_multiplier = ( + graph_crore_multiplier_base + delete_space + pynini.cross("கோடி", "") + pynutil.insert("௦௦௦௦௦௦௦") + ) + + graph_crore_multiplier_digit = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦௦௦௦௦௦") + + delete_space + + self.graph_single_digit + ) + + graph_crore_multiplier_two_digit = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦௦௦௦௦") + + delete_space + + self.graph_two_digit + ) + + graph_crore_multiplier_hundred = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦௦௦௦") + + delete_space + + self.graph_exact_hundreds + ) + + graph_crore_multiplier_hundred_remainder = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦௦௦௦") + + delete_space + + self.graph_hundred_with_remainder + ) + + graph_crore_multiplier_thousand = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦௦௦") + + delete_space + + self.graph_exact_thousands + ) + + graph_crore_multiplier_thousand_remainder = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦௦௦") + + delete_space + + self.graph_thousand_with_remainder + ) + + graph_crore_multiplier_large_thousand = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦") + + delete_space + + graph_exact_large_thousands + ) + + graph_crore_multiplier_large_thousand_remainder = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + pynutil.insert("௦") + + delete_space + + self.graph_large_thousands + ) + + graph_crore_multiplier_lakh = ( + graph_crore_multiplier_base + delete_space + pynini.cross("கோடியே", "") + delete_space + graph_exact_lakhs + ) + + graph_crore_multiplier_lakh_remainder = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + delete_space + + graph_lakh_remainder + ) + + graph_crore_multiplier_lakh_10_99 = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + delete_space + + graph_exact_lakhs_10_99 + ) + + graph_crore_multiplier_lakh_10_99_remainder = ( + graph_crore_multiplier_base + + delete_space + + pynini.cross("கோடியே", "") + + delete_space + + graph_lakh_10_99_remainder + ) + + graph_crore_multiplier_remainder = ( + graph_crore_multiplier_digit + | graph_crore_multiplier_two_digit + | graph_crore_multiplier_hundred + | graph_crore_multiplier_hundred_remainder + | graph_crore_multiplier_thousand + | graph_crore_multiplier_thousand_remainder + | graph_crore_multiplier_large_thousand + | graph_crore_multiplier_large_thousand_remainder + | graph_crore_multiplier_lakh + | graph_crore_multiplier_lakh_remainder + | graph_crore_multiplier_lakh_10_99 + | graph_crore_multiplier_lakh_10_99_remainder + ) + + self.graph_large_crore_numbers = graph_exact_crore_multiplier | graph_crore_multiplier_remainder + + graph = ( + graph_zero + | self.graph_single_digit + | self.graph_two_digit + | self.graph_exact_hundreds + | self.graph_hundred_with_remainder + | self.graph_exact_thousands + | self.graph_thousand_with_remainder + | self.graph_large_thousands + | self.graph_lakh_numbers + | self.graph_crore_numbers + | self.graph_large_crore_numbers + ) + + self.graph_no_exception = graph.optimize() + + suffix_graph = pynini.string_map( + [ + ("ஒன்பதின்", "௯ இன்"), + ("பத்தின்", "௧௦ இன்"), + ("பத்தில்", "௧௦ இல்"), + ("நூற்றில்", "௧௦௦ இல்"), + ("பத்தொன்பதில்", "௧௯ இல்"), + ] + ) + + suffix_graph = pynutil.insert('integer: "') + suffix_graph + pynutil.insert('"') + + number_graph = pynutil.insert('integer: "') + graph + pynutil.insert('"') + + final_graph = number_graph | suffix_graph + + final_graph = self.add_tokens(final_graph) + + self.fst = final_graph.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/ta/taggers/punctuation.py b/nemo_text_processing/inverse_text_normalization/ta/taggers/punctuation.py new file mode 100644 index 000000000..6c2c5277e --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/taggers/punctuation.py @@ -0,0 +1,31 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# Copyright 2024 and onwards Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import GraphFst + + +class PunctuationFst(GraphFst): + def __init__(self): + super().__init__(name="punctuation", kind="classify") + + s = "!#$%&\'()*+,-./:;<=>?@^_`{|}~" + punct = pynini.union(*s) + + graph = pynutil.insert('name: "') + punct + pynutil.insert('"') + + self.fst = graph.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/ta/taggers/tokenize_and_classify.py b/nemo_text_processing/inverse_text_normalization/ta/taggers/tokenize_and_classify.py new file mode 100644 index 000000000..d26df3f0f --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/taggers/tokenize_and_classify.py @@ -0,0 +1,86 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os + +import pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import ( + GraphFst, + delete_extra_space, + delete_space, + generator_main, +) + +from nemo_text_processing.inverse_text_normalization.ta.taggers.cardinal import CardinalFst +from nemo_text_processing.inverse_text_normalization.ta.taggers.punctuation import PunctuationFst +from nemo_text_processing.inverse_text_normalization.ta.taggers.word import WordFst + + +class ClassifyFst(GraphFst): + """ + Tamil ITN tokenizer/classifier. + Supports Cardinal, Ordinal, Decimal, Word, and Punctuation. + """ + + def __init__( + self, + cache_dir: str = None, + overwrite_cache: bool = False, + whitelist: str = None, + input_case: str = None, + ): + super().__init__(name="tokenize_and_classify", kind="classify") + + far_file = None + if cache_dir is not None and cache_dir != "None": + os.makedirs(cache_dir, exist_ok=True) + far_file = os.path.join(cache_dir, "ta_itn.far") + + if not overwrite_cache and far_file and os.path.exists(far_file): + self.fst = pynini.Far(far_file, mode="r")["tokenize_and_classify"] + logging.info(f"ClassifyFst.fst restored from {far_file}") + else: + logging.info("Creating Tamil ITN grammars") + + cardinal = CardinalFst() + + cardinal_graph = cardinal.fst + + punct_graph = PunctuationFst().fst + word_graph = WordFst().fst + + classify = pynutil.add_weight(cardinal_graph, 1.0) | pynutil.add_weight(word_graph, 100) + + punct = pynutil.insert("tokens { ") + pynutil.add_weight(punct_graph, weight=1.1) + pynutil.insert(" }") + + token = pynutil.insert("tokens { ") + classify + pynutil.insert(" }") + + token_plus_punct = ( + pynini.closure(punct + pynutil.insert(" ")) + token + pynini.closure(pynutil.insert(" ") + punct) + ) + + graph = token_plus_punct + pynini.closure(delete_extra_space + token_plus_punct) + + graph = delete_space + graph + delete_space + + self.fst = graph.optimize() + + if far_file: + generator_main( + far_file, + {"tokenize_and_classify": self.fst}, + ) diff --git a/nemo_text_processing/inverse_text_normalization/ta/taggers/word.py b/nemo_text_processing/inverse_text_normalization/ta/taggers/word.py new file mode 100644 index 000000000..9474ce8b0 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/taggers/word.py @@ -0,0 +1,31 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# Copyright 2024 and onwards Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import NEMO_NOT_SPACE, GraphFst + + +class WordFst(GraphFst): + """ + Finite state transducer for classifying plain tokens, that do not belong to any special class. This can be considered as the default class. + e.g. नींद -> tokens { name: "नींद" } + """ + + def __init__(self): + super().__init__(name="word", kind="classify") + word = pynutil.insert("name: \"") + pynini.closure(NEMO_NOT_SPACE, 1) + pynutil.insert("\"") + self.fst = word.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/ta/utils.py b/nemo_text_processing/inverse_text_normalization/ta/utils.py new file mode 100644 index 000000000..5830b50d0 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/utils.py @@ -0,0 +1,63 @@ +# Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import csv +import logging +import os +import pynini + + +def get_abs_path(rel_path): + """ + Get absolute path + + Args: + rel_path: relative path to this file + + Returns absolute path + """ + abs_path = os.path.dirname(os.path.abspath(__file__)) + os.sep + rel_path + + if not os.path.exists(abs_path): + logging.warning(f'{abs_path} does not exist') + return abs_path + + +def load_labels(abs_path): + """ + loads relative path file as dictionary + + Args: + abs_path: absolute path + + Returns dictionary of mappings + """ + label_tsv = open(abs_path, encoding="utf-8") + labels = list(csv.reader(label_tsv, delimiter="\t")) + return labels + + +from pynini.lib import pynutil + + +def apply_fst(text, fst): + """Given a string input, returns the output string + produced by traversing the path with lowest weight. + If no valid path accepts input string, returns an + error. + """ + try: + print(pynini.shortestpath(text @ fst).string()) + except pynini.FstOpError: + print(f"Error: No valid output with given input: '{text}'") diff --git a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/cardinal.py b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/cardinal.py new file mode 100644 index 000000000..a8259a2b7 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/cardinal.py @@ -0,0 +1,34 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini +import pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import GraphFst + + +class CardinalFst(GraphFst): + + def __init__(self): + super().__init__(name="cardinal", kind="verbalize") + + graph = ( + pynutil.delete('integer: "') + + pynini.closure( + pynini.union("௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯", " ", "இ", "ன்", "ல்"), + 1, + ) + + pynutil.delete('"') + ) + + self.fst = self.delete_tokens(graph).optimize() diff --git a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize.py b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize.py new file mode 100644 index 000000000..6d1b685c7 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize.py @@ -0,0 +1,26 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import GraphFst +from nemo_text_processing.inverse_text_normalization.ta.verbalizers.cardinal import CardinalFst +from nemo_text_processing.inverse_text_normalization.ta.verbalizers.word import WordFst + + +class VerbalizeFst(GraphFst): + def __init__(self): + super().__init__(name="verbalize", kind="verbalize") + + cardinal = CardinalFst() + word = WordFst() + + self.fst = (cardinal.fst | word.fst).optimize() diff --git a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize_final.py b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize_final.py new file mode 100644 index 000000000..bb413da96 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/verbalize_final.py @@ -0,0 +1,46 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# Copyright 2024 and onwards Google, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import GraphFst, delete_extra_space, delete_space +from nemo_text_processing.inverse_text_normalization.ta.verbalizers.verbalize import VerbalizeFst + + +class VerbalizeFinalFst(GraphFst): + """ + Tamil final verbalizer. + Currently supports only Cardinal. + """ + + def __init__(self): + super().__init__(name="verbalize_final", kind="verbalize") + + verbalize = VerbalizeFst().fst + + graph = ( + pynutil.delete("tokens") + + delete_space + + pynutil.delete("{") + + delete_space + + verbalize + + delete_space + + pynutil.delete("}") + ) + + graph = delete_space + pynini.closure(graph + delete_extra_space) + graph + delete_space + + self.fst = graph.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/word.py b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/word.py new file mode 100644 index 000000000..cd0a1e5b1 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/word.py @@ -0,0 +1,26 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini +import pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.ta.graph_utils import NEMO_NOT_QUOTE, GraphFst + + +class WordFst(GraphFst): + def __init__(self): + super().__init__(name="word", kind="verbalize") + + graph = pynutil.delete('name: "') + pynini.closure(NEMO_NOT_QUOTE, 1) + pynutil.delete('"') + + self.fst = graph.optimize() diff --git a/tests/nemo_text_processing/ta/__init__.py b/tests/nemo_text_processing/ta/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/nemo_text_processing/ta/data_inverse_text_normalization/test_cases_cardinal.txt b/tests/nemo_text_processing/ta/data_inverse_text_normalization/test_cases_cardinal.txt new file mode 100644 index 000000000..419b418b6 --- /dev/null +++ b/tests/nemo_text_processing/ta/data_inverse_text_normalization/test_cases_cardinal.txt @@ -0,0 +1,54 @@ +நான்கு ஃபோர்கள்~௪ ஃபோர்கள் +ஆறு வீரர்கள் அவுட்~௬ வீரர்கள் அவுட் +ஒன்பிளஸ் எட்டு ப்ரோ~ஒன்பிளஸ் ௮ ப்ரோ +ஐந்து சார்ஜர்கள்~௫ சார்ஜர்கள் +நான்கு ஓவரில் பதினேழு ரன்கள்~௪ ஓவரில் ௧௭ ரன்கள் +ஐந்து சாக்லெட்டுகள் ஒன்பது டாஃபிகள்~௫ சாக்லெட்டுகள் ௯ டாஃபிகள் +பத்தாயிரத்து தொண்ணூற்று ஒன்பது~௧௦௦௯௯ +ஒரு இலட்சத்து ஒன்று~௧௦௦௦௦௧ +நூறு~௧௦௦ +முன்னூற்று ஒன்பது~௩௦௯ +எழுநூற்று தொண்ணூற்று எட்டு~௭௯௮ +ஐந்தாயிரம்~௫௦௦௦ +எட்டாயிரத்து நான்கு~௮௦௦௪ +ஒன்பதாயிரத்து பதினாறு~௯௦௧௬ +ஆயிரத்து தொள்ளாயிரத்து பன்னிரண்டு~௧௯௧௨ +இரண்டாயிரத்து இருநூற்று இருபத்து இரண்டு~௨௨௨௨ +பதினான்காயிரம்~௧௪௦௦௦ +பதினெட்டாயிரத்து ஆறு~௧௮௦௦௬ +இருபத்தாறாயிரத்து இருபத்து ஒன்று~௨௬௦௨௧ +தொண்ணூற்றாறாயிரத்து எண்ணூற்று பதினொன்று~௯௬௮௧௧ +நான்கு இலட்சம்~௪௦௦௦௦௦ +இரண்டு இலட்சத்து இரண்டு~௨௦௦௦௦௨ +ஏழு இலட்சத்து இருபது~௭௦௦௦௨௦ +ஒன்பது இலட்சத்து முன்னூற்று இருபத்து ஒன்று~௯௦௦௩௨௧ +எட்டு இலட்சத்து ஐந்தாயிரத்து முன்னூற்று இருபத்து ஒன்று~௮௦௫௩௨௧ +இருபத்து மூன்று இலட்சம்~௨௩௦௦௦௦௦ +பதினைந்து இலட்சத்து ஒன்று~௧௫௦௦௦௦௧ +இருபத்து ஏழு இலட்சத்து எண்ணூற்று இருபது~௨௭௦௦௮௨௦ +தொண்ணூற்று ஒரு இலட்சத்து முப்பத்தொன்றாயிரத்து எண்ணூற்று இருபத்து ஒன்பது~௯௧௩௧௮௨௯ +மூன்று கோடி~௩௦௦௦௦௦௦௦ +ஒரு கோடியே ஒன்று~௧௦௦௦௦௦௦௧ +ஏழு கோடியே பதின்மூன்று~௭௦௦௦௦௦௧௩ +நான்கு கோடியே தொள்ளாயிரத்து பதினொன்று~௪௦௦௦௦௯௧௧ +ஆறு கோடியே ஐந்தாயிரத்து தொள்ளாயிரத்து பதினொன்று~௬௦௦௦௫௯௧௧ +ஆறு கோடியே இருபத்தைந்தாயிரத்து தொள்ளாயிரத்து பதினொன்று~௬௦௦௨௫௯௧௧ +மூன்று கோடியே ஒரு இலட்சத்து இருபத்தைந்தாயிரத்து தொள்ளாயிரத்து பதினொன்று~௩௦௧௨௫௯௧௧ +இரண்டு கோடியே பதினேழு இலட்சத்து இருபத்தைந்தாயிரத்து தொள்ளாயிரத்து பதினொன்று~௨௧௭௨௫௯௧௧ +முப்பது கோடி~௩௦௦௦௦௦௦௦௦ +தொண்ணூற்று எட்டு இலட்சத்து எழுபத்தாறாயிரத்து எழுநூற்று எண்பத்து ஒன்பது~௯௮௭௬௭௮௯ +இருபத்து மூன்று இலட்சத்து நாற்பத்தைந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு~௨௩௪௫௫௬௭ +ஒரு கோடியே இருபத்து மூன்று இலட்சத்து நாற்பத்தைந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு~௧௨௩௪௫௫௬௭ +ஒரு கோடியே இருபத்து ஒன்று இலட்சத்து இருபத்து ஒன்றாயிரத்து இருநூற்று பன்னிரண்டு~௧௨௧௨௧௨௧௨ +நூற்று பன்னிரண்டு கோடியே இருபத்து மூன்று இலட்சத்து நாற்பத்தைந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு~௧௧௨௨௩௪௫௫௬௭ +நூற்று இரண்டு கோடியே இருபத்து மூன்று இலட்சத்து நாற்பத்தைந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு~௧௦௨௨௩௪௫௫௬௭ +ஆயிரத்து நூற்று இரண்டு கோடியே இருபத்து மூன்று இலட்சத்து நாற்பத்தைந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு~௧௧௦௨௨௩௪௫௫௬௭ +ஐயாயிரத்து நூற்று இரண்டு கோடியே இருபத்து மூன்று இலட்சத்து நாற்பத்தைந்தாயிரத்து ஐநூற்று அறுபத்து ஏழு~௫௧௦௨௨௩௪௫௫௬௭ +எழுநூற்று இருபத்தைந்து~௭௨௫ +எழுநூற்று ஐம்பது~௭௫௦ +ஏழாயிரத்து ஐநூறு~௭௫௦௦ +ஏழாயிரத்து இருநூற்று ஐம்பது~௭௨௫௦ +நூற்று ஐம்பது~௧௫௦ +இருநூற்று ஐம்பது~௨௫௦ +ஆயிரத்து அறுநூற்று ஐம்பது~௧௬௫௦ +ஆயிரத்து அறுநூற்று இருபத்தைந்து~௧௬௨௫ \ No newline at end of file diff --git a/tests/nemo_text_processing/ta/run_blind_test.py b/tests/nemo_text_processing/ta/run_blind_test.py new file mode 100644 index 000000000..dbf35bbee --- /dev/null +++ b/tests/nemo_text_processing/ta/run_blind_test.py @@ -0,0 +1,82 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini +from nemo_text_processing.inverse_text_normalization.inverse_normalize import InverseNormalizer + +itn = InverseNormalizer(lang="ta", overwrite_cache=True) + +total = 0 +passed = 0 +failed = [] +skipped = [] + +with open( + "tests/nemo_text_processing/ta/data_inverse_text_normalization/blind_test_case.txt", + encoding="utf-8", +) as f: + + for line_num, line in enumerate(f, start=1): + line = line.strip() + + if not line: + continue + + parts = line.split("\t") + + if len(parts) != 3: + skipped.append((line_num, line)) + continue + + category, expected, spoken = parts + + try: + pred = itn.inverse_normalize(spoken, verbose=False) + except Exception as e: + pred = f"ERROR: {e}" + + total += 1 + + if pred == expected: + passed += 1 + else: + failed.append((category, spoken, expected, pred)) + +# Save failures +with open("failures.txt", "w", encoding="utf-8") as out: + for category, spoken, expected, pred in failed: + out.write(f"CATEGORY: {category}\n") + out.write(f"INPUT: {spoken}\n") + out.write(f"EXPECTED: {expected}\n") + out.write(f"PREDICTED: {pred}\n") + out.write("=" * 80 + "\n") + +print(f"\nPassed: {passed}/{total}") +print(f"Failed: {len(failed)}") +print(f"Skipped: {len(skipped)}") +print(f"Accuracy: {100 * passed / total:.2f}%") + +print("\nFirst 20 skipped lines:\n") + +for line_num, line in skipped[:20]: + print("=" * 80) + print("LINE :", line_num) + print("CONTENT:", repr(line)) + +print("\nFirst 20 failures:\n") + +for category, spoken, expected, pred in failed[:20]: + print("=" * 80) + print("CATEGORY :", category) + print("INPUT :", spoken) + print("EXPECTED :", expected) + print("PREDICTED:", pred) diff --git a/tests/nemo_text_processing/ta/test_cardinal.py b/tests/nemo_text_processing/ta/test_cardinal.py new file mode 100644 index 000000000..63ac11dba --- /dev/null +++ b/tests/nemo_text_processing/ta/test_cardinal.py @@ -0,0 +1,36 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini +import pytest +from parameterized import parameterized + +from nemo_text_processing.inverse_text_normalization.inverse_normalize import InverseNormalizer + +from ..utils import CACHE_DIR, parse_test_case_file + + +class TestCardinal: + inverse_normalizer = InverseNormalizer( + lang="ta", + cache_dir=CACHE_DIR, + overwrite_cache=False, + ) + + @parameterized.expand(parse_test_case_file("ta/data_inverse_text_normalization/test_cases_cardinal.txt")) + @pytest.mark.unit + def test_denorm(self, test_input, expected): + pred = self.inverse_normalizer.inverse_normalize( + test_input, + verbose=False, + ) + assert pred == expected diff --git a/tests/nemo_text_processing/ta/utils.py b/tests/nemo_text_processing/ta/utils.py new file mode 100644 index 000000000..e69de29bb From d722afd867f4dbf8ca016e6173f6a1faa9be67c7 Mon Sep 17 00:00:00 2001 From: retheckj-star Date: Tue, 7 Jul 2026 19:40:28 +0530 Subject: [PATCH 2/2] style: apply black formatting Signed-off-by: retheckj-star --- nemo_text_processing/__init__.py | 2 +- .../inverse_text_normalization/__init__.py | 2 -- .../inverse_text_normalization/ta/graph_utils.py | 2 +- .../ta/verbalizers/__init__.py | 13 +++++++++++++ tests/nemo_text_processing/ta/__init__.py | 13 +++++++++++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/nemo_text_processing/__init__.py b/nemo_text_processing/__init__.py index bc443be41..4fc25d0d3 100644 --- a/nemo_text_processing/__init__.py +++ b/nemo_text_processing/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/nemo_text_processing/inverse_text_normalization/__init__.py b/nemo_text_processing/inverse_text_normalization/__init__.py index 72d9c125c..bc443be41 100644 --- a/nemo_text_processing/inverse_text_normalization/__init__.py +++ b/nemo_text_processing/inverse_text_normalization/__init__.py @@ -11,5 +11,3 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -from nemo_text_processing.inverse_text_normalization.inverse_normalize import InverseNormalizer diff --git a/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py b/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py index d76d398f5..8278d34e9 100644 --- a/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py +++ b/nemo_text_processing/inverse_text_normalization/ta/graph_utils.py @@ -1,5 +1,5 @@ # Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. -# Copyright 2024 and onwards Google, Inc. +# Copyright 2013 and onwards Google, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py index e69de29bb..63a296dae 100644 --- a/nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py +++ b/nemo_text_processing/inverse_text_normalization/ta/verbalizers/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini diff --git a/tests/nemo_text_processing/ta/__init__.py b/tests/nemo_text_processing/ta/__init__.py index e69de29bb..63a296dae 100644 --- a/tests/nemo_text_processing/ta/__init__.py +++ b/tests/nemo_text_processing/ta/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.import pynini