diff --git a/Jenkinsfile b/Jenkinsfile index 6edad14a2..82d7f80ab 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -27,7 +27,7 @@ pipeline { HY_TN_CACHE='/home/jenkinsci/TestData/text_norm/ci/grammars/03-12-24-0' MR_TN_CACHE='/home/jenkinsci/TestData/text_norm/ci/grammars/03-12-24-1' JA_TN_CACHE='/home/jenkinsci/TestData/text_norm/ci/grammars/10-17-24-1' - HI_TN_CACHE='/home/jenkinsci/TestData/text_norm/ci/grammars/11-29-24-1' + HI_TN_CACHE='/home/jenkinsci/TestData/text_norm/ci/grammars/07-08-25-1' DEFAULT_TN_CACHE='/home/jenkinsci/TestData/text_norm/ci/grammars/06-08-23-0' } stages { diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/date/century.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/date/century.tsv new file mode 100644 index 000000000..d2bfb0759 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/date/century.tsv @@ -0,0 +1,5 @@ +ई.पू. ईसा पूर्व +ई. ईस्वी +ई. ईसवी +वर्ष पूर्व वर्ष पूर्व +शताब्दी शताब्दी diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/date/date_days.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/date/date_days.tsv index 41201ae18..b8cd4f893 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/data/date/date_days.tsv +++ b/nemo_text_processing/inverse_text_normalization/hi/data/date/date_days.tsv @@ -2,6 +2,7 @@ २ दो ३ तीन ४ चार +५ पांच ५ पाँच ६ छः ६ छ: @@ -16,19 +17,39 @@ १३ तेरह १४ चौदह १५ पन्द्रह +१५ पंद्रह १६ सोलह १७ सत्रह +१७ सतरह १८ अठारह +१८ अट्ठारह १९ उन्नीस +१९ उनीस २० बीस २१ इक्कीस +२१ इकीस +२१ ईकीस २२ बाईस +२२ बाइस २३ तेईस +२३ तेइस २४ चौबीस २५ पच्चीस +२५ पचीस २६ छब्बीस +२६ छबीस २७ सत्ताईस +२७ सत्ताइस +२७ सताईस +२७ सताइस २८ अट्ठाईस +२८ अट्ठाइस +२८ अठाईस +२८ अठाइस २९ उनतीस +२९ उन्तीस ३० तीस ३१ इकतीस +३१ इकतिस +३१ इकत्तीस +३१ इकत्तिस diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/measure/measurements.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/measure/measurements.tsv index a1ab32da0..d472e15df 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/data/measure/measurements.tsv +++ b/nemo_text_processing/inverse_text_normalization/hi/data/measure/measurements.tsv @@ -263,6 +263,7 @@ yr सालों yr वर्ष yr वर्षों hp हॉर्स पावर +hp हॉर्सपॉवर hp हॉर्सपावर hp अश्वशक्ति hp अश्वशक्त @@ -284,4 +285,11 @@ mi/s मील प्रति सेकेंड mi/h मील प्रति घंटा mi/h मील प्रति घंटे mi/m मील प्रति मिनट -₹/ac रुपए प्रति एकड़ \ No newline at end of file +₹/ac रुपए प्रति एकड़ +w हफ़्ते +w हफ़्ता +w सप्ताह +सदियां सदियां +सदियाँ सदियाँ +सदियों सदियों +सदी सदी diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/money/currency.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/money/currency.tsv index 0ca503bb1..3ee478688 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/data/money/currency.tsv +++ b/nemo_text_processing/inverse_text_normalization/hi/data/money/currency.tsv @@ -22,7 +22,6 @@ km बोस्निया और हर्जेगोविना का म p बोत्सवाना पुला r$ ब्राजीलियाई रियाल £ ब्रिटिश पाउंड -£ पाउंड b$ ब्रुनेई डॉलर лв बुल्गारियाई लेव fbu बुरुंडी फ्रैंक @@ -179,4 +178,4 @@ bs. वेनेजुएलन बोलिवार ₺ लीरा ₦ नाइरा ¢ सेंट्स -¢ सेंट \ No newline at end of file +¢ सेंट diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/numbers/paune.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/numbers/paune.tsv new file mode 100644 index 000000000..f56b256e6 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/numbers/paune.tsv @@ -0,0 +1,231 @@ +१ दो +२ तीन +३ चार +४ पाँच +४ पांच +५ छः +५ छह +५ छे +६ सात +७ आठ +८ नौ +९ दस +१० ग्यारह +११ बारह +१२ तेरह +१३ चौदह +१४ पन्द्रह +१४ पंद्रह +१५ सोलह +१६ सत्रह +१६ सतरह +१७ अठारह +१७ अट्ठारह +१८ उन्नीस +१८ उनीस +१९ बीस +२० इक्कीस +२० इकीस +२० ईकीस +२१ बाईस +२१ बाइस +२२ तेईस +२२ तेइस +२३ चौबीस +२४ पच्चीस +२४ पचीस +२५ छब्बीस +२५ छबीस +२६ सत्ताईस +२६ सत्ताइस +२६ सताईस +२६ सताइस +२७ अट्ठाईस +२७ अट्ठाइस +२७ अठाईस +२७ अठाइस +२८ उनतीस +२८ उन्तीस +२९ तीस +३० इकतीस +३० इकतिस +३० इकत्तीस +३० इकत्तिस +३१ बत्तीस +३१ बत्तिस +३१ बतीस +३१ बतिस +३२ तैंतीस +३२ तैंतिस +३२ तैंत्तीस +३२ तैंत्तिस +३२ तेतीस +३२ तेंतीस +३३ चौंतीस +३३ चौंतिस +३३ चौंत्तीस +३३ चौंत्तिस +३४ पैंतीस +३४ पैंतिस +३४ पैंत्तीस +३४ पैंत्तिस +३५ छत्तीस +३५ छत्तिस +३५ छतीस +३५ छतिस +३६ सैंतीस +३६ सैंतिस +३६ सैंत्तीस +३६ सैंत्तिस +३७ अड़तीस +३७ अड़तिस +३७ अड़त्तीस +३७ अड़त्तिस +३८ उनतालीस +३८ उनतालिस +३८ उनत्तालीस +३८ उनत्तालिस +३८ उन्तालीस +३८ उन्तालिस +३९ चालीस +४० इकतालीस +४० इकतालिस +४० इक्तालीस +४१ बयालीस +४१ बयालिस +४१ ब्यालीस +४२ तैंतालीस +४२ तैंतालिस +४३ चौवालीस +४३ चौवालिस +४३ चवालीस +४३ चवालिस +४३ चौंतालीस +४४ पैंतालीस +४४ पैंतालिस +४५ छियालीस +४५ छियालिस +४५ छयालीस +४६ सैंतालीस +४६ सैंतालिस +४६ सैतालिस +४७ अड़तालीस +४७ अड़तालिस +४८ उनचास +४९ पचास +५० इक्यावन +५० इकयावन +५१ बावन +५२ तिरपन +५२ तिरेपन +५३ चौवन +५४ पचपन +५५ छप्पन +५५ छपन +५६ सत्तावन +५६ सतावन +५७ अट्ठावन +५७ अठावन +५८ उनसठ +५८ उनसठ +५९ साठ +६० इकसठ +६१ बासठ +६१ बासट +६२ तिरसठ +६२ तिरेसठ +६३ चौंसठ +६४ पैंसठ +६५ छियासठ +६५ छयासठ +६६ सड़सठ +६७ अड़सठ +६८ उनहत्तर +६८ उनहतर +६९ सत्तर +६९ सतर +७० इकहत्तर +७० इकहतर +७० इक्हत्तर +७० इकत्तर +७१ बहत्तर +७१ बहतर +७२ तिहत्तर +७२ तिहतर +७३ चौहत्तर +७३ चौहतर +७४ पचहत्तर +७४ पचहतर +७४ पिछत्तर +७४ पिछतर +७५ छिहत्तर +७५ छिहतर +७५ छियत्तर +७६ सतहत्तर +७६ सतहतर +७६ सतत्तर +७७ अठहत्तर +७७ अठहतर +७८ उन्यासी +७८ उन्यासि +७८ उनासी +७८ उनासि +७९ अस्सी +७९ अस्सि +८० इक्यासी +८० इक्यासि +८१ बयासी +८१ बयासि +८१ ब्यासी +८१ ब्यासि +८१ बिरासी +८२ तिरासी +८२ तिरासि +८२ तेरासी +८३ चौरासी +८३ चौरासि +८४ पचासी +८४ पचासि +८४ पिचयासी +८४ पिचयासि +८४ पिचासी +८५ छियासी +८५ छियासि +८६ सत्तासी +८६ सत्तासि +८६ सतासी +८६ सतासि +८७ अट्ठासी +८७ अट्ठासि +८७ अठासी +८७ अठासि +८८ नवासी +८८ नवासि +८९ नब्बे +९० इक्यानबे +९० इक्यानवे +९१ बानबे +९१ बानवे +९२ तिरानबे +९२ तिरानवे +९३ चौरानबे +९३ चौरानवे +९४ पंचानबे +९४ पंचानवे +९४ पचानवे +९४ पिचयानवे +९४ पिचयानबे +९४ पिच्यानवे +९४ पिच्यानबे +९५ छियानबे +९५ छियानवे +९६ सत्तानबे +९६ सत्तानवे +९७ अट्ठानबे +९७ अट्ठानवे +९७ अठानवे +९७ अठानबे +९८ निन्यान्बे +९८ निन्यानबे +९८ निन्यानवे +९८ निन्यान्वे diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/numbers/teens_and_ties.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/numbers/teens_and_ties.tsv index 91f656cfd..3968a1320 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/data/numbers/teens_and_ties.tsv +++ b/nemo_text_processing/inverse_text_normalization/hi/data/numbers/teens_and_ties.tsv @@ -9,6 +9,7 @@ १७ सत्रह १७ सतरह १८ अठारह +१८ अठाहर १८ अट्ठारह १९ उन्नीस १९ उनीस @@ -216,4 +217,4 @@ ९९ निन्यान्बे ९९ निन्यानबे ९९ निन्यानवे -९९ निन्यान्वे \ No newline at end of file +९९ निन्यान्वे diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/telephone/STD_codes_eng.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/STD_codes_eng.tsv new file mode 100644 index 000000000..10eb025ad --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/STD_codes_eng.tsv @@ -0,0 +1,596 @@ +११ one one +११९१ one one nine one +१२१ one two one +१२२ one two two +१२३२ one two three two +१२३४ one two three four +१२४ one two four +१२६२ one two six two +१२६४ one two six four +१२७४ one two seven four +१२९ one two nine +१३२ one three two +१३३२ one three three two +१३३६ one three three six +१३४२ one three four two +१३५ one three five +१३६४ one three six four +१३७४ one three seven four +१४१ one four one +१४४ one four four +१४५ one four five +१४६२ one four six two +१५१ one five one +१५४ one five four +१५६२ one five six two +१५७२ one five seven two +१५८२ one five eight two +१५९२ one five nine two +१६१ one six one +१६२४ one six two four +१६२७ one six two seven +१६२८ one six two eight +१६३२ one six three two +१६३४ one six three four +१६३५ one six three five +१६३६ one six three six +१६३८ one six three eight +१६३९ one six three nine +१६४ one six four +१६६२ one six six two +१६६४ one six six four +१६६६ one six six six +१६६९६ one six six nine six +१६७२७२ one six seven two seven two +१६७५ one six seven five +१६७६ one six seven six +१६७९ one six seven nine +१६८२ one six eight two +१६८४ one six eight four +१६८९११ one six eight nine one one +१७१ one seven one +१७२ one seven two +१७३२ one seven three two +१७३३ one seven three three +१७४२ one seven four two +१७४४ one seven four four +१७५ one seven five +१७६२ one seven six two +१७६३ one seven six three +१७६४ one seven six four +१७६५ one seven six five +१७७ one seven seven +१८१ one eight one +१८३ one eight three +१८४ one eight four +१८५३ one eight five three +१८६ one eight six +१८७४ one eight seven four +१८८२ one eight eight two +१९०५ one nine zero five +१९१ one nine one +१९२२ one nine two two +१९३२ one nne three two +१९४ one nine four +१९५२ one nine five two +१९५३ one nine five three +१९७२ one nine seven two +१९७८ one nine seven eight +१९९२ one nine nine two +२० two zero +२११२ two one one two +२१४८ two one four eight +२१६२ two one six two +२१६४ two one six four +२१६६ two one six six +२१६८ two one six eight +२१७ two one seven +२१८४ two one eight four +२१९२ two one nine two +२२ two two +२३० two three zero +२३१ two three one +२३३ two three three +२३५२ two three five two +२३५५ two three five five +२३६२ two three six two +२३८२ two three eight two +२३८५ two three eight five +२४० two four zero +२४१ two four one +२४२२ two four two two +२४३१ two four three one +२४५२ two four five two +२४६२ two four six two +२४७२ two four seven two +२४७८ two four seven eight +२४८२ two four eight two +२४८७ two four eight seven +२५१ two five one +२५२२ two five two two +२५२६ two five two six +२५३ two five three +२५६२ two five six two +२५७ two five seven +२५८० two five eight zero +२५८२ two five eight two +२५९१ two five nine one +२६० two six zero +२६१ two six one +२६२२ two six two two +२६२६ two six two six +२६३१ two six three one +२६३२ two six three two +२६३४ two six three four +२६३७ two six three seven +२६३९ two six three nine +२६४२ two six four two +२६४३ two six four three +२६४६ two six four six +२६५ two six five +२६६२ two six six two +२६६३ two six six three +२६७२ two six seven two +२६७६ two six seven six +२६७७ two six seven seven +२६८ two six eight +२६९१ two six nine one +२६९२ two six nine two +२६९७ two six nine seven +२६९९८१ two six nine nine eight one +२७१२ two seven one two +२७१३ two seven one three +२७१४ two seven one four +२७१५ two seven one five +२७३३४४९ two seven three three four four nine +२७४२ two seven four two +२७४४ two seven four four +२७५२ two seven five two +२७६२ two seven six two +२७६४ two seven six four +२७६५ two seven six five +२७६६ two seven six six +२७६७ two seven six seven +२७७० two seven seven zero +२७७२ two seven seven two +२७७४ two seven seven four +२७८ two seven eight +२७९२ two seven nine two +२७९५ two seven nine five +२८१ two eight one +२८२२ two eight two two +२८२४ two eight two four +२८२६ two eight two six +२८३२ two eight three two +२८३३ two eight three three +२८३४ two eight three four +२८३६ two eight three six +२८४४ two eight four four +२८४५ two eight four five +२८५ two eight five +२८६ two eight six +२८७६ two eight seven six +२८७६८३३ two eight seven six eight three three +२८९२ two eight nine two +२९१ two nine one +२९३२ two nine three two +२९४ two nine four +२९९२ two nine nine two +३१७४ three one seven four +३१९२ three one nine two +३२२२ three two two two +३२२४ three two two four +३२४२ three two four two +३२६ three two six +३३ three three +३४१ three four one +३४२ three four two +३४३ three four three +३४६१ three four six one +३४६२ three four six two +३४६३ three four six three +३४७२ three four seven two +३४८२ three four eight two +३५१२ three five one two +३५२२ three five two two +३५३ three five three +३५४ three five four +३५५२ three five five two +३५५४ three five five four +३५६१ three five six one +३५६१५५ three five six one five five +३५८२ three five eight two +३५९२ three five nine two +३६० three six zero +३६१ three six one +३६४ three six four +३६५२ three six five two +३६५८ three six five eight +३६६२ three six six two +३६६४ three six six four +३६६५ three six six five +३६७३ three six seven three +३६८ three six eight +३७० three seven zero +३७३ three seven three +३७४ three seven four +३७६ three seven six +३७७२ three seven seven two +३८४२ three eight four two +३८५ three eight five +३८६२ three eight six two +३८९ three eight nine +४० four zero +४११२ four one one two +४११४ four one one four +४११६ four one one six +४११८ four one one eight +४११९ four one one nine +४१३ four one three +४१४२ four one four two +४१४४ four one four four +४१४६ four one four six +४१४७ four one four seven +४१४८ four one four eight +४१६ four one six +४१७२ four one seven two +४१७३ four one seven three +४१७४ four one seven four +४१७५ four one seven five +४१७७ four one seven seven +४२१ four two one +४२२ four two two +४२२८८ four two two eight eight +४२२८९ four two two eight nine +४२३ four two three +४२४ four two four +४२५२ four two five two +४२५३८ four two five three eight +४२५५ four two five five +४२५६ four two five six +४२५७ four two five seven +४२५८ four two five eight +४२५९ four two five nine +४२७ four two seven +४२८२ four two eight two +४२८३ four two eight three +४२८५ four two eight five +४२८६ four two eight six +४२८८ four two eight eight +४२९४ four two nine four +४२९५ four two nine five +४२९६ four two nine six +४३१ four three one +४३१८२ four three one eight two +४३१८३ four three one eight three +४३२३ four three two three +४३२४ four three two four +४३२६ four three two six +४३३२ four three three two +४३३९ four three three nine +४३४१ four three four one +४३४२ four three four two +४३४४ four three four four +४३५ four three five +४३६२ four three six two +४३६३ four three six three +४३६४ four three six four +४३६५ four three six five +४३६६ four three six six +४३६८ four three six eight +४३७४ four three seven four +४४ four four +४५१ four five one +४५२ four five two +४५४२ four five four two +४५४५ four five four five +४५४६ four five four six +४५४९ four five four nine +४५६१ four five six one +४५६२ four five six two +४५६३ four five six three +४५६४ four five six four +४५६५ four five six five +४५६६ four five six six +४५६७ four five six seven +४५७३ four five seven three +४६१ four six one +४६२ four six two +४६३३ four six three three +४६३४ four six three four +४६३५ four six three five +४६३६ four six three six +४६३७ four six three seven +४६४६ four six four six +४६५२ four six five two +४७१ four seven one +४७२ four seven two +४७३ four seven three +४७४ four seven four +४७५ four seven five +४७७ four seven seven +४७८ four seven eight +४७९ four seven nine +४८१ four eight one +४८२ four eight two +४८२१ four eight two one +४८२९ four eight two nine +४८४ four eight four +४८४६२ four eight four six two +४८५ four eight five +४८६२ four eight six two +४८६५ four eight six five +४८७ four eight seven +४८८ four eight eight +४८९२ four eight nine two +४८९६ four eight nine six +४९० four nine zero +४९१ four nine one +४९२ four nine two +४९३ four nine three +४९४ four nine four +४९५ four nine five +४९६ four nine six +४९७ four nine seven +४९८ four nine eight +४९९ four nine nine +५१२ five one two +५१७६ five one seven six +५१८० five one eight zero +५१८३ five one eight three +५१९२ five one nine two +५२२ five two two +५२७८ five two seven eight +५२८२ five two eight two +५३२ five three two +५३५ five three five +५३६२ five three six two +५४१२ five four one two +५४१४ five four one four +५४२ five four two +५४४२ five four four two +५४४४ five four four four +५४५२ five four five two +५४९६ five four nine six +५५१ five five one +५५४२ five five four two +५६२ five six two +५६४२ five six four two +५६४४ five six four four +५६५ five six five +५६६२ five six six two +५६७२ five six seven two +५६७६ five six seven six +५६८८ five six eight eight +५७१ five seven one +५७२२ five seven two two +५७३२ five seven three two +५७३६ five seven three six +५७४२ five seven four two +५७४४ five seven four four +५८१ five eight one +५८४२ five eight four two +५८६२ five eight six two +५८८२ five eight eight two +५९४२ five nine four two +५९६२ five nine six two +५९६४ five nine six four +६११२ six one one two +६११५ six one one five +६१२ six one two +६१८२ six one eight two +६१८४ six one eight four +६२१ six two one +६२२४ six two two four +६२४३ six two four three +६२५२ six two five two +६२५४ six two five four +६२७२ six two seven two +६२७४ six two seven four +६३१ six three one +६३२४ six three two four +६४१ six four one +६४३२ six four three two +६४५२ six four five two +६४५४ six four five four +६४५५ six four five five +६५१ six five one +६५३२ six five three two +६५३४ six five three four +६५४० six five four zero +६५४२ six five four two +६५४६ six five four six +६५६२ six five six two +६५७ six five seven +६५८२ six five eight two +६६१ six six one +६६२२ six six two +६६३ six six three +६६४५ six six four five +६६४६ six six four six +६६५२ six six five two +६७१ six seven one +६७१७९२ six seven one seven nine two +६७२२ six seven two two +६७२७ six seven two seven +६७४ six seven four +६७५४ six seven five four +६७६२ six seven six two +६७६४ six seven six four +६७६६ six seven six six +६७६७ six seven six seven +६७६८ six seven six eight +६७८२ six seven eight two +६७८४ six seven eight four +६७९२ six seven nine two +६८० six eight zero +६८११ six eight one one +६८४२ six eight four two +६८५२ six eight five two +६८५३ six eight five three +६८५४ six eight five four +७११४ seven one one four +७१२ seven one two +७१३२ seven one three two +७१५२ seven one five two +७१६२ seven one six two +७१७२ seven one seven two +७१८३ seven one eight three +७१८४ seven one eight four +७१८५ seven one eight five +७२४ eight two four +७२६२ seven two six two +७२६३ seven two six three +७२७२ seven two seven two +७२९२ seven two nine two +७३१ seven three one +७३२४ seven three two four +७३२५ seven three two five +७३३ seven three three +७३४ seven three four +७४१२ seven four one two +७४१४ seven four one four +७४२२ seven four two two +७४३२ seven four three two +७४७ seven four seven +७५१ seven five one +७५२२ seven five two two +७५३२ seven five three two +७५३४ seven five three four +७५५ seven five five +७५६२ seven five six two +७५७२ seven five two +७५७४ seven five seven four +७५८२ seven five eight two +७५९२ seven five nine two +७६१ seven six one +७६६२ seven six six two +७६७२ seven six seven two +७६९२ seven six nine two +७७१ seven seven one +७७२२ seven seven two two +७७६२ seven seven six two +७७७४ seven seven seven four +७७८२ seven seven eight two +७८५३ seven eight five three +७८८ seven eight eight +७९ seven nine +७९८४ seven nine eight four +८० eight zero +८०४५ eight zero four five +८११३ eight one one three +८११७ eight one one seven +८११९ eight one one nine +८१५२ eight one five two +८१५३ eight one five three +८१५५ eight one five five +८१५६ eight one five six +८१६ eight one six +८१७२ eight one seven two +८१८२ eight one eight two +८१९२ eight one nine two +८१९३ eight one nine three +८१९४ eight one nine four +८२१ eight two one +८२२१ eight two two one +८२२३ eight two two three +८२३२ eight two three two +८२३६ eight two three six +८२४ eight two four +८२४७ eight two four seven +८२५१ eight two five one +८२५२ eight two five two +८२५५ eight two five five +८२६२ eight two six two +८२७२ eight two seven two +८२७४ eight two seven four +८३१ eight three one +८३२ eight three two +८३३८ eight three three eight +८३४७६० eight three four seven six zero +८३५४ eight three five four +८३५५ eight three five five +८३६ eight three six +८३७२ eight three seven two +८३७३ eight three seven three +८३७५ eight three seven five +८३८२ eight three eight two +८३८४ eight three eight four +८३८५ eight three eight five +८3९३ eight three nine three +८३९४ eight three nine four +८४१३ eight four one three +८४१४ eight four one four +८४४३ eight four four three +८४५३ eight four five three +८४५५ eight four five five +८४५७ eight four five seven +८४६२ eight four six two +८४६३ eight four six three +८४७२ eight four seven two +८४७४ eight four seven four +८४८२ eight four eight two +८५१२ eight five one two +८५१३ eight five one three +८५१८ eight five one eight +८५२५ eight five two five +८५३२ eight five three two +८५३९ eight five three nine +८५४० eight five four zero +८५४३ eight five four three +८५४४ eight five four four +८५४६ eight five four six +८५४८ eight five four eight +८५५२ eight five five two +८५५४ eight five five four +८५५६ eight five five six +८५५८ eight five five eight +८५६२ eight five six two +८५७४ eight five seven four +८५७७ eight five seven seven +८५७८ eight five seven eight +८५९२ eight five nine two +८५९३ eight five nine three +८६१ eight six one +८६२४ eight six two four +८६२६ eight six two six +८६३ eight six three +८६४१ eight six four one +८६४४ eight six four four +८६४६ eight six four six +८६४७ eight six four seven +८६४८ eight six four eight +८६६ eight six six +८६७२ eight six seven two +८६७४ eight six seven four +८६७८ eight six seven eight +८६८२ eight six eight two +८६८३ eight six eight three +८७१२ eight seven one two +८७२२ eight seven two two +८७२८ eight seven two eight +८७३२ eight seven three two +८७३८ eight seven three eight +८७४२ eight seven four two +८७४३ eight seven four three +८७४४ eight seven four four +८८१२ eight eight one two +८८१४ eight eight one four +८८१६ eight eight one six +८८१७ eight eight one seven +८८१८ eight eight one eight +८८१९ eight eight one nine +८८३ eight eight three +८८३७ eight eight three seven +८८४ eight eight four +८८५२ eight eight five two +८८५५ eight eight five five +८८५६ eight eight five six +८८५७ eight eight five seven +८९१ eight nine one +८९२४ eight nine two four +८९४२ eight nine four two +८९४४ eight nine four four +९५२० nine five two zero +९५२११४ nine five zero two one one four +९५२५१ nine five two five one diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/telephone/STD_codes_hin.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/STD_codes_hin.tsv new file mode 100644 index 000000000..beee81eee --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/STD_codes_hin.tsv @@ -0,0 +1,2750 @@ +११ एक एक +११९१ एक एक नौ एक +१२१ एक दो एक +१२२ एक दो दो +१२३२ एक दो तीन दो +१२३४ एक दो तीन चार +१२४ एक दो चार +१२६२ एक दो छ: दो +१२६२ एक दो छः दो +१२६२ एक दो छह दो +१२६२ एक दो छे दो +१२६४ एक दो छ: चार +१२६४ एक दो छः चार +१२६४ एक दो छह चार +१२६४ एक दो छे चार +१२७४ एक दो सात चार +१२९ एक दो नौ +१३२ एक तीन दो +१३३२ एक तीन तीन दो +१३३६ एक तीन तीन छ: +१३३६ एक तीन तीन छः +१३३६ एक तीन तीन छह +१३३६ एक तीन तीन छे +१३४२ एक तीन चार दो +१३५ एक तीन पाँच +१३५ एक तीन पांच +१३६४ एक तीन छ: चार +१३६४ एक तीन छः चार +१३६४ एक तीन छह चार +१३६४ एक तीन छे चार +१३७४ एक तीन सात चार +१४१ एक चार एक +१४४ एक चार चार +१४५ एक चार पाँच +१४५ एक चार पांच +१४६२ एक चार छ: दो +१४६२ एक चार छः दो +१४६२ एक चार छह दो +१४६२ एक चार छे दो +१५१ एक पाँच एक +१५१ एक पांच एक +१५४ एक पाँच चार +१५४ एक पांच चार +१५६२ एक पाँच छ: दो +१५६२ एक पाँच छः दो +१५६२ एक पाँच छह दो +१५६२ एक पाँच छे दो +१५६२ एक पांच छ: दो +१५६२ एक पांच छः दो +१५६२ एक पांच छह दो +१५६२ एक पांच छे दो +१५७२ एक पाँच सात दो +१५७२ एक पांच सात दो +१५८२ एक पाँच आठ दो +१५८२ एक पांच आठ दो +१५९२ एक पाँच नौ दो +१५९२ एक पांच नौ दो +१६१ एक छ: एक +१६१ एक छः एक +१६१ एक छह एक +१६१ एक छे एक +१६२४ एक छ: दो चार +१६२४ एक छः दो चार +१६२४ एक छह दो चार +१६२४ एक छे दो चार +१६२७ एक छ: दो सात +१६२७ एक छः दो सात +१६२७ एक छह दो सात +१६२७ एक छे दो सात +१६२८ एक छ: दो आठ +१६२८ एक छः दो आठ +१६२८ एक छह दो आठ +१६२८ एक छे दो आठ +१६३२ एक छ: तीन दो +१६३२ एक छः तीन दो +१६३२ एक छह तीन दो +१६३२ एक छे तीन दो +१६३४ एक छ: तीन चार +१६३४ एक छः तीन चार +१६३४ एक छह तीन चार +१६३४ एक छे तीन चार +१६३५ एक छ: तीन पाँच +१६३५ एक छ: तीन पांच +१६३५ एक छः तीन पाँच +१६३५ एक छः तीन पांच +१६३५ एक छह तीन पाँच +१६३५ एक छह तीन पांच +१६३५ एक छे तीन पाँच +१६३५ एक छे तीन पांच +१६३६ एक छ: तीन छ: +१६३६ एक छ: तीन छः +१६३६ एक छ: तीन छह +१६३६ एक छ: तीन छे +१६३६ एक छः तीन छ: +१६३६ एक छः तीन छः +१६३६ एक छः तीन छह +१६३६ एक छः तीन छे +१६३६ एक छह तीन छ: +१६३६ एक छह तीन छः +१६३६ एक छह तीन छह +१६३६ एक छह तीन छे +१६३६ एक छे तीन छ: +१६३६ एक छे तीन छः +१६३६ एक छे तीन छह +१६३६ एक छे तीन छे +१६३८ एक छ: तीन आठ +१६३८ एक छः तीन आठ +१६३८ एक छह तीन आठ +१६३८ एक छे तीन आठ +१६३९ एक छ: तीन नौ +१६३९ एक छः तीन नौ +१६३९ एक छह तीन नौ +१६३९ एक छे तीन नौ +१६४ एक छ: चार +१६४ एक छः चार +१६४ एक छह चार +१६४ एक छे चार +१६६२ एक छ: छ: दो +१६६२ एक छ: छः दो +१६६२ एक छ: छह दो +१६६२ एक छ: छे दो +१६६२ एक छः छ: दो +१६६२ एक छः छः दो +१६६२ एक छः छह दो +१६६२ एक छः छे दो +१६६२ एक छह छ: दो +१६६२ एक छह छः दो +१६६२ एक छह छह दो +१६६२ एक छह छे दो +१६६२ एक छे छ: दो +१६६२ एक छे छः दो +१६६२ एक छे छह दो +१६६२ एक छे छे दो +१६६४ एक छ: छ: चार +१६६४ एक छ: छः चार +१६६४ एक छ: छह चार +१६६४ एक छ: छे चार +१६६४ एक छः छ: चार +१६६४ एक छः छः चार +१६६४ एक छः छह चार +१६६४ एक छः छे चार +१६६४ एक छह छ: चार +१६६४ एक छह छः चार +१६६४ एक छह छह चार +१६६४ एक छह छे चार +१६६४ एक छे छ: चार +१६६४ एक छे छः चार +१६६४ एक छे छह चार +१६६४ एक छे छे चार +१६६६ एक छ: छ: छ: +१६६६ एक छ: छ: छः +१६६६ एक छ: छ: छह +१६६६ एक छ: छ: छे +१६६६ एक छ: छः छ: +१६६६ एक छ: छः छः +१६६६ एक छ: छः छह +१६६६ एक छ: छः छे +१६६६ एक छ: छह छ: +१६६६ एक छ: छह छः +१६६६ एक छ: छह छह +१६६६ एक छ: छह छे +१६६६ एक छ: छे छ: +१६६६ एक छ: छे छः +१६६६ एक छ: छे छह +१६६६ एक छ: छे छे +१६६६ एक छः छ: छ: +१६६६ एक छः छ: छः +१६६६ एक छः छ: छह +१६६६ एक छः छ: छे +१६६६ एक छः छः छ: +१६६६ एक छः छः छः +१६६६ एक छः छः छह +१६६६ एक छः छः छे +१६६६ एक छः छह छ: +१६६६ एक छः छह छः +१६६६ एक छः छह छह +१६६६ एक छः छह छे +१६६६ एक छः छे छ: +१६६६ एक छः छे छः +१६६६ एक छः छे छह +१६६६ एक छः छे छे +१६६६ एक छह छ: छ: +१६६६ एक छह छ: छः +१६६६ एक छह छ: छह +१६६६ एक छह छ: छे +१६६६ एक छह छः छ: +१६६६ एक छह छः छः +१६६६ एक छह छः छह +१६६६ एक छह छः छे +१६६६ एक छह छह छ: +१६६६ एक छह छह छः +१६६६ एक छह छह छह +१६६६ एक छह छह छे +१६६६ एक छह छे छ: +१६६६ एक छह छे छः +१६६६ एक छह छे छह +१६६६ एक छह छे छे +१६६६ एक छे छ: छ: +१६६६ एक छे छ: छः +१६६६ एक छे छ: छह +१६६६ एक छे छ: छे +१६६६ एक छे छः छ: +१६६६ एक छे छः छः +१६६६ एक छे छः छह +१६६६ एक छे छः छे +१६६६ एक छे छह छ: +१६६६ एक छे छह छः +१६६६ एक छे छह छह +१६६६ एक छे छह छे +१६६६ एक छे छे छ: +१६६६ एक छे छे छः +१६६६ एक छे छे छह +१६६६ एक छे छे छे +१६६९६ एक छ: छ: नौ छ: +१६६९६ एक छ: छ: नौ छः +१६६९६ एक छ: छ: नौ छह +१६६९६ एक छ: छ: नौ छे +१६६९६ एक छ: छः नौ छ: +१६६९६ एक छ: छः नौ छः +१६६९६ एक छ: छः नौ छह +१६६९६ एक छ: छः नौ छे +१६६९६ एक छ: छह नौ छ: +१६६९६ एक छ: छह नौ छः +१६६९६ एक छ: छह नौ छह +१६६९६ एक छ: छह नौ छे +१६६९६ एक छ: छे नौ छ: +१६६९६ एक छ: छे नौ छः +१६६९६ एक छ: छे नौ छह +१६६९६ एक छ: छे नौ छे +१६६९६ एक छः छ: नौ छ: +१६६९६ एक छः छ: नौ छः +१६६९६ एक छः छ: नौ छह +१६६९६ एक छः छ: नौ छे +१६६९६ एक छः छः नौ छ: +१६६९६ एक छः छः नौ छः +१६६९६ एक छः छः नौ छह +१६६९६ एक छः छः नौ छे +१६६९६ एक छः छह नौ छ: +१६६९६ एक छः छह नौ छः +१६६९६ एक छः छह नौ छह +१६६९६ एक छः छह नौ छे +१६६९६ एक छः छे नौ छ: +१६६९६ एक छः छे नौ छः +१६६९६ एक छः छे नौ छह +१६६९६ एक छः छे नौ छे +१६६९६ एक छह छ: नौ छ: +१६६९६ एक छह छ: नौ छः +१६६९६ एक छह छ: नौ छह +१६६९६ एक छह छ: नौ छे +१६६९६ एक छह छः नौ छ: +१६६९६ एक छह छः नौ छः +१६६९६ एक छह छः नौ छह +१६६९६ एक छह छः नौ छे +१६६९६ एक छह छह नौ छ: +१६६९६ एक छह छह नौ छः +१६६९६ एक छह छह नौ छह +१६६९६ एक छह छह नौ छे +१६६९६ एक छह छे नौ छ: +१६६९६ एक छह छे नौ छः +१६६९६ एक छह छे नौ छह +१६६९६ एक छह छे नौ छे +१६६९६ एक छे छ: नौ छ: +१६६९६ एक छे छ: नौ छः +१६६९६ एक छे छ: नौ छह +१६६९६ एक छे छ: नौ छे +१६६९६ एक छे छः नौ छ: +१६६९६ एक छे छः नौ छः +१६६९६ एक छे छः नौ छह +१६६९६ एक छे छः नौ छे +१६६९६ एक छे छह नौ छ: +१६६९६ एक छे छह नौ छः +१६६९६ एक छे छह नौ छह +१६६९६ एक छे छह नौ छे +१६६९६ एक छे छे नौ छ: +१६६९६ एक छे छे नौ छः +१६६९६ एक छे छे नौ छह +१६६९६ एक छे छे नौ छे +१६७२७२ एक छ: सात दो सात दो +१६७२७२ एक छः सात दो सात दो +१६७२७२ एक छह सात दो सात दो +१६७२७२ एक छे सात दो सात दो +१६७५ एक छ: सात पाँच +१६७५ एक छ: सात पांच +१६७५ एक छः सात पाँच +१६७५ एक छः सात पांच +१६७५ एक छह सात पाँच +१६७५ एक छह सात पांच +१६७५ एक छे सात पाँच +१६७५ एक छे सात पांच +१६७६ एक छ: सात छ: +१६७६ एक छ: सात छः +१६७६ एक छ: सात छह +१६७६ एक छ: सात छे +१६७६ एक छः सात छ: +१६७६ एक छः सात छः +१६७६ एक छः सात छह +१६७६ एक छः सात छे +१६७६ एक छह सात छ: +१६७६ एक छह सात छः +१६७६ एक छह सात छह +१६७६ एक छह सात छे +१६७६ एक छे सात छ: +१६७६ एक छे सात छः +१६७६ एक छे सात छह +१६७६ एक छे सात छे +१६७९ एक छ: सात नौ +१६७९ एक छः सात नौ +१६७९ एक छह सात नौ +१६७९ एक छे सात नौ +१६८२ एक छ: आठ दो +१६८२ एक छः आठ दो +१६८२ एक छह आठ दो +१६८२ एक छे आठ दो +१६८४ एक छ: आठ चार +१६८४ एक छः आठ चार +१६८४ एक छह आठ चार +१६८४ एक छे आठ चार +१६८९११ एक छ: आठ नौ एक एक +१६८९११ एक छः आठ नौ एक एक +१६८९११ एक छह आठ नौ एक एक +१६८९११ एक छे आठ नौ एक एक +१७१ एक सात एक +१७२ एक सात दो +१७३२ एक सात तीन दो +१७३३ एक सात तीन तीन +१७४२ एक सात चार दो +१७४४ एक सात चार चार +१७५ एक सात पाँच +१७५ एक सात पांच +१७६२ एक सात छ: दो +१७६२ एक सात छः दो +१७६२ एक सात छह दो +१७६२ एक सात छे दो +१७६३ एक सात छ: तीन +१७६३ एक सात छः तीन +१७६३ एक सात छह तीन +१७६३ एक सात छे तीन +१७६४ एक सात छ: चार +१७६४ एक सात छः चार +१७६४ एक सात छह चार +१७६४ एक सात छे चार +१७६५ एक सात छ: पाँच +१७६५ एक सात छ: पांच +१७६५ एक सात छः पाँच +१७६५ एक सात छः पांच +१७६५ एक सात छह पाँच +१७६५ एक सात छह पांच +१७६५ एक सात छे पाँच +१७६५ एक सात छे पांच +१७६५ एक सात छ: पाँच +१७६५ एक सात छ: पांच +१७६५ एक सात छः पाँच +१७६५ एक सात छः पांच +१७६५ एक सात छह पाँच +१७६५ एक सात छह पांच +१७६५ एक सात छे पाँच +१७६५ एक सात छे पांच +१७७ एक सात सात +१८१ एक आठ एक +१८३ एक आठ तीन +१८४ एक आठ चार +१८५३ एक आठ पाँच तीन +१८५३ एक आठ पांच तीन +१८६ एक आठ छ: +१८६ एक आठ छः +१८६ एक आठ छह +१८६ एक आठ छे +१८७४ एक आठ सात चार +१८८२ एक आठ आठ दो +१९०५ एक नौ शून्य पाँच +१९०५ एक नौ शून्य पांच +१९१ एक नौ एक +१९२२ एक नौ दो दो +१९३२ एक नौ तीन दो +१९४ एक नौ चार +१९५२ एक नौ पाँच दो +१९५२ एक नौ पांच दो +१९५३ एक नौ पाँच तीन +१९५३ एक नौ पांच तीन +१९७२ एक नौ सात दो +१९७८ एक नौ सात आठ +१९९२ एक नौ नौ दो +२० दो शून्य +२११२ दो एक एक दो +२१४८ दो एक चार आठ +२१६२ दो एक छ: दो +२१६२ दो एक छः दो +२१६२ दो एक छह दो +२१६२ दो एक छे दो +२१६४ दो एक छ: चार +२१६४ दो एक छः चार +२१६४ दो एक छह चार +२१६४ दो एक छे चार +२१६६ दो एक छ: छ: +२१६६ दो एक छ: छः +२१६६ दो एक छ: छह +२१६६ दो एक छ: छे +२१६६ दो एक छः छ: +२१६६ दो एक छः छः +२१६६ दो एक छः छह +२१६६ दो एक छः छे +२१६६ दो एक छह छ: +२१६६ दो एक छह छः +२१६६ दो एक छह छह +२१६६ दो एक छह छे +२१६६ दो एक छे छ: +२१६६ दो एक छे छः +२१६६ दो एक छे छह +२१६६ दो एक छे छे +२१६८ दो एक छ: आठ +२१६८ दो एक छः आठ +२१६८ दो एक छह आठ +२१६८ दो एक छे आठ +२१७ दो एक सात +२१८४ दो एक आठ चार +२१९२ दो एक नौ दो +२२ दो दो +२३० दो तीन शून्य +२३१ दो तीन एक +२३३ दो तीन तीन +२३५२ दो तीन पाँच दो +२३५२ दो तीन पांच दो +२३५५ दो तीन पाँच पाँच +२३५५ दो तीन पाँच पांच +२३५५ दो तीन पांच पाँच +२३५५ दो तीन पांच पांच +२३६२ दो तीन छ: दो +२३६२ दो तीन छः दो +२३६२ दो तीन छह दो +२३६२ दो तीन छे दो +२३८२ दो तीन आठ दो +२३८५ दो तीन आठ पाँच +२३८५ दो तीन आठ पांच +२४० दो चार शून्य +२४१ दो चार एक +२४२२ दो चार दो दो +२४३१ दो चार तीन एक +२४५२ दो चार पाँच दो +२४५२ दो चार पांच दो +२४६२ दो चार छ: दो +२४६२ दो चार छः दो +२४६२ दो चार छह दो +२४६२ दो चार छे दो +२४७२ दो चार सात दो +२४७८ दो चार सात आठ +२४८२ दो चार आठ दो +२४८७ दो चार आठ सात +२५१ दो पाँच एक +२५१ दो पांच एक +२५२२ दो पाँच दो दो +२५२२ दो पांच दो दो +२५२६ दो पाँच दो छ: +२५२६ दो पाँच दो छः +२५२६ दो पाँच दो छह +२५२६ दो पाँच दो छे +२५२६ दो पांच दो छ: +२५२६ दो पांच दो छः +२५२६ दो पांच दो छह +२५२६ दो पांच दो छे +२५३ दो पाँच तीन +२५३ दो पांच तीन +२५६२ दो पाँच छ: दो +२५६२ दो पाँच छः दो +२५६२ दो पाँच छह दो +२५६२ दो पाँच छे दो +२५६२ दो पांच छ: दो +२५६२ दो पांच छः दो +२५६२ दो पांच छह दो +२५६२ दो पांच छे दो +२५७ दो पाँच सात +२५७ दो पांच सात +२५८० दो पाँच आठ शून्य +२५८० दो पांच आठ शून्य +२५८२ दो पाँच आठ दो +२५८२ दो पांच आठ दो +२५९१ दो पाँच नौ एक +२५९१ दो पांच नौ एक +२६० दो छ: शून्य +२६० दो छः शून्य +२६० दो छह शून्य +२६० दो छे शून्य +२६१ दो छ: एक +२६१ दो छः एक +२६१ दो छह एक +२६१ दो छे एक +२६२२ दो छ: दो दो +२६२२ दो छः दो दो +२६२२ दो छह दो दो +२६२२ दो छे दो दो +२६२६ दो छ: दो छ: +२६२६ दो छ: दो छः +२६२६ दो छ: दो छह +२६२६ दो छ: दो छे +२६२६ दो छः दो छ: +२६२६ दो छः दो छः +२६२६ दो छः दो छह +२६२६ दो छः दो छे +२६२६ दो छह दो छ: +२६२६ दो छह दो छः +२६२६ दो छह दो छह +२६२६ दो छह दो छे +२६२६ दो छे दो छ: +२६२६ दो छे दो छः +२६२६ दो छे दो छह +२६२६ दो छे दो छे +२६३१ दो छ: तीन एक +२६३१ दो छः तीन एक +२६३१ दो छह तीन एक +२६३१ दो छे तीन एक +२६३२ दो छ: तीन दो +२६३२ दो छः तीन दो +२६३२ दो छह तीन दो +२६३२ दो छे तीन दो +२६३४ दो छ: तीन चार +२६३४ दो छः तीन चार +२६३४ दो छह तीन चार +२६३४ दो छे तीन चार +२६३७ दो छ: तीन सात +२६३७ दो छः तीन सात +२६३७ दो छह तीन सात +२६३७ दो छे तीन सात +२६३९ दो छ: तीन नौ +२६३९ दो छः तीन नौ +२६३९ दो छह तीन नौ +२६३९ दो छे तीन नौ +२६४२ दो छ: चार दो +२६४२ दो छः चार दो +२६४२ दो छह चार दो +२६४२ दो छे चार दो +२६४३ दो छ: चार तीन +२६४३ दो छः चार तीन +२६४३ दो छह चार तीन +२६४३ दो छे चार तीन +२६४६ दो छ: चार छ: +२६४६ दो छ: चार छः +२६४६ दो छ: चार छह +२६४६ दो छ: चार छे +२६४६ दो छः चार छ: +२६४६ दो छः चार छः +२६४६ दो छः चार छह +२६४६ दो छः चार छे +२६४६ दो छह चार छ: +२६४६ दो छह चार छः +२६४६ दो छह चार छह +२६४६ दो छह चार छे +२६४६ दो छे चार छ: +२६४६ दो छे चार छः +२६४६ दो छे चार छह +२६४६ दो छे चार छे +२६५ दो छ: पाँच +२६५ दो छ: पांच +२६५ दो छः पाँच +२६५ दो छः पांच +२६५ दो छह पाँच +२६५ दो छह पांच +२६५ दो छे पाँच +२६५ दो छे पांच +२६६२ दो छ: छ: दो +२६६२ दो छ: छः दो +२६६२ दो छ: छह दो +२६६२ दो छ: छे दो +२६६२ दो छः छ: दो +२६६२ दो छः छः दो +२६६२ दो छः छह दो +२६६२ दो छः छे दो +२६६२ दो छह छ: दो +२६६२ दो छह छः दो +२६६२ दो छह छह दो +२६६२ दो छह छे दो +२६६२ दो छे छ: दो +२६६२ दो छे छः दो +२६६२ दो छे छह दो +२६६२ दो छे छे दो +२६६३ दो छ: छ: तीन +२६६३ दो छ: छः तीन +२६६३ दो छ: छह तीन +२६६३ दो छ: छे तीन +२६६३ दो छः छ: तीन +२६६३ दो छः छः तीन +२६६३ दो छः छह तीन +२६६३ दो छः छे तीन +२६६३ दो छह छ: तीन +२६६३ दो छह छः तीन +२६६३ दो छह छह तीन +२६६३ दो छह छे तीन +२६६३ दो छे छ: तीन +२६६३ दो छे छः तीन +२६६३ दो छे छह तीन +२६६३ दो छे छे तीन +२६७२ दो छ: सात दो +२६७२ दो छः सात दो +२६७२ दो छह सात दो +२६७२ दो छे सात दो +२६७६ दो छ: सात छ: +२६७६ दो छ: सात छः +२६७६ दो छ: सात छह +२६७६ दो छ: सात छे +२६७६ दो छः सात छ: +२६७६ दो छः सात छः +२६७६ दो छः सात छह +२६७६ दो छः सात छे +२६७६ दो छह सात छ: +२६७६ दो छह सात छः +२६७६ दो छह सात छह +२६७६ दो छह सात छे +२६७६ दो छे सात छ: +२६७६ दो छे सात छः +२६७६ दो छे सात छह +२६७६ दो छे सात छे +२६७७ दो छ: सात सात +२६७७ दो छः सात सात +२६७७ दो छह सात सात +२६७७ दो छे सात सात +२६८ दो छ: आठ +२६८ दो छः आठ +२६८ दो छह आठ +२६८ दो छे आठ +२६९१ दो छ: नौ एक +२६९१ दो छः नौ एक +२६९१ दो छह नौ एक +२६९१ दो छे नौ एक +२६९२ दो छ: नौ दो +२६९२ दो छः नौ दो +२६९२ दो छह नौ दो +२६९२ दो छे नौ दो +२६९७ दो छ: नौ सात +२६९७ दो छः नौ सात +२६९७ दो छह नौ सात +२६९७ दो छे नौ सात +२६९९८१ दो छ: नौ नौ आठ एक +२६९९८१ दो छः नौ नौ आठ एक +२६९९८१ दो छह नौ नौ आठ एक +२६९९८१ दो छे नौ नौ आठ एक +२७१२ दो सात एक दो +२७१३ दो सात एक तीन +२७१४ दो सात एक चार +२७१५ दो सात एक पाँच +२७१५ दो सात एक पांच +२७३३४४९ दो सात तीन तीन चार चार नौ +२७४२ दो सात चार दो +२७४४ दो सात चार चार +२७५२ दो सात पाँच दो +२७५२ दो सात पांच दो +२७६२ दो सात छ: दो +२७६२ दो सात छः दो +२७६२ दो सात छह दो +२७६२ दो सात छे दो +२७६४ दो सात छ: चार +२७६४ दो सात छः चार +२७६४ दो सात छह चार +२७६४ दो सात छे चार +२७६५ दो सात छ: पाँच +२७६५ दो सात छ: पांच +२७६५ दो सात छः पाँच +२७६५ दो सात छः पांच +२७६५ दो सात छह पाँच +२७६५ दो सात छह पांच +२७६५ दो सात छे पाँच +२७६५ दो सात छे पांच +२७६६ दो सात छ: छ: +२७६६ दो सात छ: छः +२७६६ दो सात छ: छह +२७६६ दो सात छ: छे +२७६६ दो सात छः छ: +२७६६ दो सात छः छः +२७६६ दो सात छः छह +२७६६ दो सात छः छे +२७६६ दो सात छह छ: +२७६६ दो सात छह छः +२७६६ दो सात छह छह +२७६६ दो सात छह छे +२७६६ दो सात छे छ: +२७६६ दो सात छे छः +२७६६ दो सात छे छह +२७६६ दो सात छे छे +२७६७ दो सात छ: सात +२७६७ दो सात छः सात +२७६७ दो सात छह सात +२७६७ दो सात छे सात +२७७० दो सात सात शून्य +२७७२ दो सात सात दो +२७७४ दो सात सात चार +२७८ दो सात आठ +२७९२ दो सात नौ दो +२७९५ दो सात नौ पाँच +२७९५ दो सात नौ पांच +२८१ दो आठ एक +२८२२ दो आठ दो दो +२८२४ दो आठ दो चार +२८२६ दो आठ दो छ: +२८२६ दो आठ दो छः +२८२६ दो आठ दो छह +२८२६ दो आठ दो छे +२८३२ दो आठ तीन दो +२८३३ दो आठ तीन तीन +२८३४ दो आठ तीन चार +२८३६ दो आठ तीन छ: +२८३६ दो आठ तीन छः +२८३६ दो आठ तीन छह +२८३६ दो आठ तीन छे +२८४४ दो आठ चार चार +२८४५ दो आठ चार पाँच +२८४५ दो आठ चार पांच +२८५ दो आठ पाँच +२८५ दो आठ पांच +२८६ दो आठ छ: +२८६ दो आठ छः +२८६ दो आठ छह +२८६ दो आठ छे +२८७६ दो आठ सात छ: +२८७६ दो आठ सात छः +२८७६ दो आठ सात छह +२८७६ दो आठ सात छे +२८७६८३३ दो आठ सात छ: आठ तीन तीन +२८७६८३३ दो आठ सात छः आठ तीन तीन +२८७६८३३ दो आठ सात छह आठ तीन तीन +२८७६८३३ दो आठ सात छे आठ तीन तीन +२८९२ दो आठ नौ दो +२९१ दो नौ एक +२९३२ दो नौ तीन दो +२९४ दो नौ चार +२९९२ दो नौ नौ दो +३१७४ तीन एक सात चार +३१९२ तीन एक नौ दो +३२२२ तीन दो दो दो +३२२४ तीन दो दो चार +३२४२ तीन दो चार दो +३२६ तीन दो छ: +३२६ तीन दो छः +३२६ तीन दो छह +३२६ तीन दो छे +३३ तीन तीन +३४१ तीन चार एक +३४२ तीन चार दो +३४३ तीन चार तीन +३४६१ तीन चार छ: एक +३४६१ तीन चार छः एक +३४६१ तीन चार छह एक +३४६१ तीन चार छे एक +३४६२ तीन चार छ: दो +३४६२ तीन चार छः दो +३४६२ तीन चार छह दो +३४६२ तीन चार छे दो +३४६३ तीन चार छ: तीन +३४६३ तीन चार छः तीन +३४६३ तीन चार छह तीन +३४६३ तीन चार छे तीन +३४७२ तीन चार सात दो +३४८२ तीन चार आठ दो +३५१२ तीन पाँच एक दो +३५१२ तीन पांच एक दो +३५२२ तीन पाँच दो दो +३५२२ तीन पांच दो दो +३५३ तीन पाँच तीन +३५३ तीन पांच तीन +३५४ तीन पाँच चार +३५४ तीन पांच चार +३५५२ तीन पाँच पाँच दो +३५५२ तीन पाँच पांच दो +३५५२ तीन पांच पाँच दो +३५५२ तीन पांच पांच दो +३५५४ तीन पाँच पाँच चार +३५५४ तीन पाँच पांच चार +३५५४ तीन पांच पाँच चार +३५५४ तीन पांच पांच चार +३५६१ तीन पाँच छ: एक +३५६१ तीन पाँच छः एक +३५६१ तीन पाँच छह एक +३५६१ तीन पाँच छे एक +३५६१ तीन पांच छ: एक +३५६१ तीन पांच छः एक +३५६१ तीन पांच छह एक +३५६१ तीन पांच छे एक +३५६१५५ तीन पाँच छ: एक पाँच पाँच +३५६१५५ तीन पाँच छ: एक पाँच पांच +३५६१५५ तीन पाँच छ: एक पांच पाँच +३५६१५५ तीन पाँच छ: एक पांच पांच +३५६१५५ तीन पाँच छः एक पाँच पाँच +३५६१५५ तीन पाँच छः एक पाँच पांच +३५६१५५ तीन पाँच छः एक पांच पाँच +३५६१५५ तीन पाँच छः एक पांच पांच +३५६१५५ तीन पाँच छह एक पाँच पाँच +३५६१५५ तीन पाँच छह एक पाँच पांच +३५६१५५ तीन पाँच छह एक पांच पाँच +३५६१५५ तीन पाँच छह एक पांच पांच +३५६१५५ तीन पाँच छे एक पाँच पाँच +३५६१५५ तीन पाँच छे एक पाँच पांच +३५६१५५ तीन पाँच छे एक पांच पाँच +३५६१५५ तीन पाँच छे एक पांच पांच +३५६१५५ तीन पांच छ: एक पाँच पाँच +३५६१५५ तीन पांच छ: एक पाँच पांच +३५६१५५ तीन पांच छ: एक पांच पाँच +३५६१५५ तीन पांच छ: एक पांच पांच +३५६१५५ तीन पांच छः एक पाँच पाँच +३५६१५५ तीन पांच छः एक पाँच पांच +३५६१५५ तीन पांच छः एक पांच पाँच +३५६१५५ तीन पांच छः एक पांच पांच +३५६१५५ तीन पांच छह एक पाँच पाँच +३५६१५५ तीन पांच छह एक पाँच पांच +३५६१५५ तीन पांच छह एक पांच पाँच +३५६१५५ तीन पांच छह एक पांच पांच +३५६१५५ तीन पांच छे एक पाँच पाँच +३५६१५५ तीन पांच छे एक पाँच पांच +३५६१५५ तीन पांच छे एक पांच पाँच +३५६१५५ तीन पांच छे एक पांच पांच +३५६१५५ तीन पाँच छ: एक पाँच पाँच +३५६१५५ तीन पाँच छ: एक पाँच पांच +३५६१५५ तीन पाँच छ: एक पांच पाँच +३५६१५५ तीन पाँच छ: एक पांच पांच +३५६१५५ तीन पाँच छः एक पाँच पाँच +३५६१५५ तीन पाँच छः एक पाँच पांच +३५६१५५ तीन पाँच छः एक पांच पाँच +३५६१५५ तीन पाँच छः एक पांच पांच +३५६१५५ तीन पाँच छह एक पाँच पाँच +३५६१५५ तीन पाँच छह एक पाँच पांच +३५६१५५ तीन पाँच छह एक पांच पाँच +३५६१५५ तीन पाँच छह एक पांच पांच +३५६१५५ तीन पाँच छे एक पाँच पाँच +३५६१५५ तीन पाँच छे एक पाँच पांच +३५६१५५ तीन पाँच छे एक पांच पाँच +३५६१५५ तीन पाँच छे एक पांच पांच +३५६१५५ तीन पांच छ: एक पाँच पाँच +३५६१५५ तीन पांच छ: एक पाँच पांच +३५६१५५ तीन पांच छ: एक पांच पाँच +३५६१५५ तीन पांच छ: एक पांच पांच +३५६१५५ तीन पांच छः एक पाँच पाँच +३५६१५५ तीन पांच छः एक पाँच पांच +३५६१५५ तीन पांच छः एक पांच पाँच +३५६१५५ तीन पांच छः एक पांच पांच +३५६१५५ तीन पांच छह एक पाँच पाँच +३५६१५५ तीन पांच छह एक पाँच पांच +३५६१५५ तीन पांच छह एक पांच पाँच +३५६१५५ तीन पांच छह एक पांच पांच +३५६१५५ तीन पांच छे एक पाँच पाँच +३५६१५५ तीन पांच छे एक पाँच पांच +३५६१५५ तीन पांच छे एक पांच पाँच +३५६१५५ तीन पांच छे एक पांच पांच +३५६१५५ तीन पाँच छ: एक पाँच पाँच +३५६१५५ तीन पाँच छ: एक पाँच पांच +३५६१५५ तीन पाँच छ: एक पांच पाँच +३५६१५५ तीन पाँच छ: एक पांच पांच +३५६१५५ तीन पाँच छः एक पाँच पाँच +३५६१५५ तीन पाँच छः एक पाँच पांच +३५६१५५ तीन पाँच छः एक पांच पाँच +३५६१५५ तीन पाँच छः एक पांच पांच +३५६१५५ तीन पाँच छह एक पाँच पाँच +३५६१५५ तीन पाँच छह एक पाँच पांच +३५६१५५ तीन पाँच छह एक पांच पाँच +३५६१५५ तीन पाँच छह एक पांच पांच +३५६१५५ तीन पाँच छे एक पाँच पाँच +३५६१५५ तीन पाँच छे एक पाँच पांच +३५६१५५ तीन पाँच छे एक पांच पाँच +३५६१५५ तीन पाँच छे एक पांच पांच +३५६१५५ तीन पांच छ: एक पाँच पाँच +३५६१५५ तीन पांच छ: एक पाँच पांच +३५६१५५ तीन पांच छ: एक पांच पाँच +३५६१५५ तीन पांच छ: एक पांच पांच +३५६१५५ तीन पांच छः एक पाँच पाँच +३५६१५५ तीन पांच छः एक पाँच पांच +३५६१५५ तीन पांच छः एक पांच पाँच +३५६१५५ तीन पांच छः एक पांच पांच +३५६१५५ तीन पांच छह एक पाँच पाँच +३५६१५५ तीन पांच छह एक पाँच पांच +३५६१५५ तीन पांच छह एक पांच पाँच +३५६१५५ तीन पांच छह एक पांच पांच +३५६१५५ तीन पांच छे एक पाँच पाँच +३५६१५५ तीन पांच छे एक पाँच पांच +३५६१५५ तीन पांच छे एक पांच पाँच +३५६१५५ तीन पांच छे एक पांच पांच +३५६१५५ तीन पाँच छ: एक पाँच पाँच +३५६१५५ तीन पाँच छ: एक पाँच पांच +३५६१५५ तीन पाँच छ: एक पांच पाँच +३५६१५५ तीन पाँच छ: एक पांच पांच +३५६१५५ तीन पाँच छः एक पाँच पाँच +३५६१५५ तीन पाँच छः एक पाँच पांच +३५६१५५ तीन पाँच छः एक पांच पाँच +३५६१५५ तीन पाँच छः एक पांच पांच +३५६१५५ तीन पाँच छह एक पाँच पाँच +३५६१५५ तीन पाँच छह एक पाँच पांच +३५६१५५ तीन पाँच छह एक पांच पाँच +३५६१५५ तीन पाँच छह एक पांच पांच +३५६१५५ तीन पाँच छे एक पाँच पाँच +३५६१५५ तीन पाँच छे एक पाँच पांच +३५६१५५ तीन पाँच छे एक पांच पाँच +३५६१५५ तीन पाँच छे एक पांच पांच +३५६१५५ तीन पांच छ: एक पाँच पाँच +३५६१५५ तीन पांच छ: एक पाँच पांच +३५६१५५ तीन पांच छ: एक पांच पाँच +३५६१५५ तीन पांच छ: एक पांच पांच +३५६१५५ तीन पांच छः एक पाँच पाँच +३५६१५५ तीन पांच छः एक पाँच पांच +३५६१५५ तीन पांच छः एक पांच पाँच +३५६१५५ तीन पांच छः एक पांच पांच +३५६१५५ तीन पांच छह एक पाँच पाँच +३५६१५५ तीन पांच छह एक पाँच पांच +३५६१५५ तीन पांच छह एक पांच पाँच +३५६१५५ तीन पांच छह एक पांच पांच +३५६१५५ तीन पांच छे एक पाँच पाँच +३५६१५५ तीन पांच छे एक पाँच पांच +३५६१५५ तीन पांच छे एक पांच पाँच +३५६१५५ तीन पांच छे एक पांच पांच +३५६१५५ तीन पाँच छ: एक पाँच पाँच +३५६१५५ तीन पाँच छ: एक पाँच पांच +३५६१५५ तीन पाँच छ: एक पांच पाँच +३५६१५५ तीन पाँच छ: एक पांच पांच +३५६१५५ तीन पाँच छः एक पाँच पाँच +३५६१५५ तीन पाँच छः एक पाँच पांच +३५६१५५ तीन पाँच छः एक पांच पाँच +३५६१५५ तीन पाँच छः एक पांच पांच +३५६१५५ तीन पाँच छह एक पाँच पाँच +३५६१५५ तीन पाँच छह एक पाँच पांच +३५६१५५ तीन पाँच छह एक पांच पाँच +३५६१५५ तीन पाँच छह एक पांच पांच +३५६१५५ तीन पाँच छे एक पाँच पाँच +३५६१५५ तीन पाँच छे एक पाँच पांच +३५६१५५ तीन पाँच छे एक पांच पाँच +३५६१५५ तीन पाँच छे एक पांच पांच +३५६१५५ तीन पांच छ: एक पाँच पाँच +३५६१५५ तीन पांच छ: एक पाँच पांच +३५६१५५ तीन पांच छ: एक पांच पाँच +३५६१५५ तीन पांच छ: एक पांच पांच +३५६१५५ तीन पांच छः एक पाँच पाँच +३५६१५५ तीन पांच छः एक पाँच पांच +३५६१५५ तीन पांच छः एक पांच पाँच +३५६१५५ तीन पांच छः एक पांच पांच +३५६१५५ तीन पांच छह एक पाँच पाँच +३५६१५५ तीन पांच छह एक पाँच पांच +३५६१५५ तीन पांच छह एक पांच पाँच +३५६१५५ तीन पांच छह एक पांच पांच +३५६१५५ तीन पांच छे एक पाँच पाँच +३५६१५५ तीन पांच छे एक पाँच पांच +३५६१५५ तीन पांच छे एक पांच पाँच +३५६१५५ तीन पांच छे एक पांच पांच +३५८२ तीन पाँच आठ दो +३५८२ तीन पांच आठ दो +३५८२ तीन पाँच आठ दो +३५८२ तीन पांच आठ दो +३५९२ तीन पाँच नौ दो +३५९२ तीन पांच नौ दो +३६० तीन छ: शून्य +३६० तीन छः शून्य +३६० तीन छह शून्य +३६० तीन छे शून्य +३६१ तीन छ: एक +३६१ तीन छः एक +३६१ तीन छह एक +३६१ तीन छे एक +३६४ तीन छ: चार +३६४ तीन छः चार +३६४ तीन छह चार +३६४ तीन छे चार +३६५२ तीन छ: पाँच दो +३६५२ तीन छ: पांच दो +३६५२ तीन छः पाँच दो +३६५२ तीन छः पांच दो +३६५२ तीन छह पाँच दो +३६५२ तीन छह पांच दो +३६५२ तीन छे पाँच दो +३६५२ तीन छे पांच दो +३६५८ तीन छ: पाँच आठ +३६५८ तीन छ: पांच आठ +३६५८ तीन छः पाँच आठ +३६५८ तीन छः पांच आठ +३६५८ तीन छह पाँच आठ +३६५८ तीन छह पांच आठ +३६५८ तीन छे पाँच आठ +३६५८ तीन छे पांच आठ +३६६२ तीन छ: छ: दो +३६६२ तीन छ: छः दो +३६६२ तीन छ: छह दो +३६६२ तीन छ: छे दो +३६६२ तीन छः छ: दो +३६६२ तीन छः छः दो +३६६२ तीन छः छह दो +३६६२ तीन छः छे दो +३६६२ तीन छह छ: दो +३६६२ तीन छह छः दो +३६६२ तीन छह छह दो +३६६२ तीन छह छे दो +३६६२ तीन छे छ: दो +३६६२ तीन छे छः दो +३६६२ तीन छे छह दो +३६६२ तीन छे छे दो +३६६४ तीन छ: छ: चार +३६६४ तीन छ: छः चार +३६६४ तीन छ: छह चार +३६६४ तीन छ: छे चार +३६६४ तीन छः छ: चार +३६६४ तीन छः छः चार +३६६४ तीन छः छह चार +३६६४ तीन छः छे चार +३६६४ तीन छह छ: चार +३६६४ तीन छह छः चार +३६६४ तीन छह छह चार +३६६४ तीन छह छे चार +३६६४ तीन छे छ: चार +३६६४ तीन छे छः चार +३६६४ तीन छे छह चार +३६६४ तीन छे छे चार +३६६५ तीन छ: छ: पाँच +३६६५ तीन छ: छ: पांच +३६६५ तीन छ: छः पाँच +३६६५ तीन छ: छः पांच +३६६५ तीन छ: छह पाँच +३६६५ तीन छ: छह पांच +३६६५ तीन छ: छे पाँच +३६६५ तीन छ: छे पांच +३६६५ तीन छः छ: पाँच +३६६५ तीन छः छ: पांच +३६६५ तीन छः छः पाँच +३६६५ तीन छः छः पांच +३६६५ तीन छः छह पाँच +३६६५ तीन छः छह पांच +३६६५ तीन छः छे पाँच +३६६५ तीन छः छे पांच +३६६५ तीन छह छ: पाँच +३६६५ तीन छह छ: पांच +३६६५ तीन छह छः पाँच +३६६५ तीन छह छः पांच +३६६५ तीन छह छह पाँच +३६६५ तीन छह छह पांच +३६६५ तीन छह छे पाँच +३६६५ तीन छह छे पांच +३६६५ तीन छे छ: पाँच +३६६५ तीन छे छ: पांच +३६६५ तीन छे छः पाँच +३६६५ तीन छे छः पांच +३६६५ तीन छे छह पाँच +३६६५ तीन छे छह पांच +३६६५ तीन छे छे पाँच +३६६५ तीन छे छे पांच +३६७३ तीन छ: सात तीन +३६७३ तीन छः सात तीन +३६७३ तीन छह सात तीन +३६७३ तीन छे सात तीन +३६८ तीन छ: आठ +३६८ तीन छः आठ +३६८ तीन छह आठ +३६८ तीन छे आठ +३७० तीन सात शून्य +३७३ तीन सात तीन +३७४ तीन सात चार +३७६ तीन सात छ: +३७६ तीन सात छः +३७६ तीन सात छह +३७६ तीन सात छे +३७७२ तीन सात सात दो +३८४२ तीन आठ चार दो +३८५ तीन आठ पाँच +३८५ तीन आठ पांच +३८६२ तीन आठ छ: दो +३८६२ तीन आठ छः दो +३८६२ तीन आठ छह दो +३८६२ तीन आठ छे दो +३८९ तीन आठ नौ +४० चार शून्य +४११२ चार एक एक दो +४११४ चार एक एक चार +४११६ चार एक एक छ: +४११६ चार एक एक छः +४११६ चार एक एक छह +४११६ चार एक एक छे +४११८ चार एक एक आठ +४११९ चार एक एक नौ +४१३ चार एक तीन +४१४२ चार एक चार दो +४१४४ चार एक चार चार +४१४६ चार एक चार छ: +४१४६ चार एक चार छः +४१४६ चार एक चार छह +४१४६ चार एक चार छे +४१४७ चार एक चार सात +४१४८ चार एक चार आठ +४१६ चार एक छ: +४१६ चार एक छः +४१६ चार एक छह +४१६ चार एक छे +४१७२ चार एक सात दो +४१७३ चार एक सात तीन +४१७४ चार एक सात चार +४१७५ चार एक सात पाँच +४१७५ चार एक सात पांच +४१७७ चार एक सात सात +४२१ चार दो एक +४२२ चार दो दो +४२२८८ चार दो दो आठ आठ +४२२८९ चार दो दो आठ नौ +४२३ चार दो तीन +४२४ चार दो चार +४२५२ चार दो पाँच दो +४२५२ चार दो पांच दो +४२५३८ चार दो पाँच तीन आठ +४२५३८ चार दो पांच तीन आठ +४२५५ चार दो पाँच पाँच +४२५५ चार दो पाँच पांच +४२५५ चार दो पांच पाँच +४२५५ चार दो पांच पांच +४२५६ चार दो पाँच छ: +४२५६ चार दो पाँच छः +४२५६ चार दो पाँच छह +४२५६ चार दो पाँच छे +४२५६ चार दो पांच छ: +४२५६ चार दो पांच छः +४२५६ चार दो पांच छह +४२५६ चार दो पांच छे +४२५७ चार दो पाँच सात +४२५७ चार दो पांच सात +४२५७ चार दो पाँच सात +४२५७ चार दो पांच सात +४२५८ चार दो पाँच आठ +४२५८ चार दो पांच आठ +४२५९ चार दो पाँच नौ +४२५९ चार दो पांच नौ +४२७ चार दो सात +४२८२ चार दो आठ दो +४२८३ चार दो आठ तीन +४२८५ चार दो आठ पाँच +४२८५ चार दो आठ पांच +४२८६ चार दो आठ छ: +४२८६ चार दो आठ छः +४२८६ चार दो आठ छह +४२८६ चार दो आठ छे +४२८८ चार दो आठ आठ +४२९४ चार दो नौ चार +४२९५ चार दो नौ पाँच +४२९५ चार दो नौ पांच +४२९६ चार दो नौ छ: +४२९६ चार दो नौ छः +४२९६ चार दो नौ छह +४२९६ चार दो नौ छे +४३१ चार तीन एक +४३१८२ चार तीन एक आठ दो +४३१८३ चार तीन एक आठ तीन +४३२३ चार तीन दो तीन +४३२४ चार तीन दो चार +४३२६ चार तीन दो छ: +४३२६ चार तीन दो छः +४३२६ चार तीन दो छह +४३२६ चार तीन दो छे +४३३२ चार तीन तीन दो +४३३९ चार तीन तीन नौ +४३४१ चार तीन चार एक +४३४२ चार तीन चार दो +४३४४ चार तीन चार चार +४३५ चार तीन पाँच +४३५ चार तीन पांच +४३५ चार तीन पाँच +४३५ चार तीन पांच +४३६२ चार तीन छ: दो +४३६२ चार तीन छः दो +४३६२ चार तीन छह दो +४३६२ चार तीन छे दो +४३६३ चार तीन छ: तीन +४३६३ चार तीन छः तीन +४३६३ चार तीन छह तीन +४३६३ चार तीन छे तीन +४३६४ चार तीन छ: चार +४३६४ चार तीन छः चार +४३६४ चार तीन छह चार +४३६४ चार तीन छे चार +४३६५ चार तीन छ: पाँच +४३६५ चार तीन छ: पांच +४३६५ चार तीन छः पाँच +४३६५ चार तीन छः पांच +४३६५ चार तीन छह पाँच +४३६५ चार तीन छह पांच +४३६५ चार तीन छे पाँच +४३६५ चार तीन छे पांच +४३६६ चार तीन छ: छ: +४३६६ चार तीन छ: छः +४३६६ चार तीन छ: छह +४३६६ चार तीन छ: छे +४३६६ चार तीन छः छ: +४३६६ चार तीन छः छः +४३६६ चार तीन छः छह +४३६६ चार तीन छः छे +४३६६ चार तीन छह छ: +४३६६ चार तीन छह छः +४३६६ चार तीन छह छह +४३६६ चार तीन छह छे +४३६६ चार तीन छे छ: +४३६६ चार तीन छे छः +४३६६ चार तीन छे छह +४३६६ चार तीन छे छे +४३६८ चार तीन छ: आठ +४३६८ चार तीन छः आठ +४३६८ चार तीन छह आठ +४३६८ चार तीन छे आठ +४३७४ चार तीन सात चार +४४ चार चार +४५१ चार पाँच एक +४५१ चार पांच एक +४५१ चार पाँच एक +४५१ चार पांच एक +४५२ चार पाँच दो +४५२ चार पांच दो +४५४२ चार पाँच चार दो +४५४२ चार पांच चार दो +४५४५ चार पाँच चार पाँच +४५४५ चार पाँच चार पांच +४५४५ चार पांच चार पाँच +४५४५ चार पांच चार पांच +४५४६ चार पाँच चार छ: +४५४६ चार पाँच चार छः +४५४६ चार पाँच चार छह +४५४६ चार पाँच चार छे +४५४६ चार पांच चार छ: +४५४६ चार पांच चार छः +४५४६ चार पांच चार छह +४५४६ चार पांच चार छे +४५४६ चार पाँच चार छ: +४५४६ चार पाँच चार छः +४५४६ चार पाँच चार छह +४५४६ चार पाँच चार छे +४५४६ चार पांच चार छ: +४५४६ चार पांच चार छः +४५४६ चार पांच चार छह +४५४६ चार पांच चार छे +४५४९ चार पाँच चार नौ +४५४९ चार पांच चार नौ +४५६१ चार पाँच छ: एक +४५६१ चार पाँच छः एक +४५६१ चार पाँच छह एक +४५६१ चार पाँच छे एक +४५६१ चार पांच छ: एक +४५६१ चार पांच छः एक +४५६१ चार पांच छह एक +४५६१ चार पांच छे एक +४५६२ चार पाँच छ: दो +४५६२ चार पाँच छः दो +४५६२ चार पाँच छह दो +४५६२ चार पाँच छे दो +४५६२ चार पांच छ: दो +४५६२ चार पांच छः दो +४५६२ चार पांच छह दो +४५६२ चार पांच छे दो +४५६२ चार पाँच छ: दो +४५६२ चार पाँच छः दो +४५६२ चार पाँच छह दो +४५६२ चार पाँच छे दो +४५६२ चार पांच छ: दो +४५६२ चार पांच छः दो +४५६२ चार पांच छह दो +४५६२ चार पांच छे दो +४५६३ चार पाँच छ: तीन +४५६३ चार पाँच छः तीन +४५६३ चार पाँच छह तीन +४५६३ चार पाँच छे तीन +४५६३ चार पांच छ: तीन +४५६३ चार पांच छः तीन +४५६३ चार पांच छह तीन +४५६३ चार पांच छे तीन +४५६४ चार पाँच छ: चार +४५६४ चार पाँच छः चार +४५६४ चार पाँच छह चार +४५६४ चार पाँच छे चार +४५६४ चार पांच छ: चार +४५६४ चार पांच छः चार +४५६४ चार पांच छह चार +४५६४ चार पांच छे चार +४५६५ चार पाँच छ: पाँच +४५६५ चार पाँच छ: पांच +४५६५ चार पाँच छः पाँच +४५६५ चार पाँच छः पांच +४५६५ चार पाँच छह पाँच +४५६५ चार पाँच छह पांच +४५६५ चार पाँच छे पाँच +४५६५ चार पाँच छे पांच +४५६५ चार पांच छ: पाँच +४५६५ चार पांच छ: पांच +४५६५ चार पांच छः पाँच +४५६५ चार पांच छः पांच +४५६५ चार पांच छह पाँच +४५६५ चार पांच छह पांच +४५६५ चार पांच छे पाँच +४५६५ चार पांच छे पांच +४५६६ चार पाँच छ: छ: +४५६६ चार पाँच छ: छः +४५६६ चार पाँच छ: छह +४५६६ चार पाँच छ: छे +४५६६ चार पाँच छः छ: +४५६६ चार पाँच छः छः +४५६६ चार पाँच छः छह +४५६६ चार पाँच छः छे +४५६६ चार पाँच छह छ: +४५६६ चार पाँच छह छः +४५६६ चार पाँच छह छह +४५६६ चार पाँच छह छे +४५६६ चार पाँच छे छ: +४५६६ चार पाँच छे छः +४५६६ चार पाँच छे छह +४५६६ चार पाँच छे छे +४५६६ चार पांच छ: छ: +४५६६ चार पांच छ: छः +४५६६ चार पांच छ: छह +४५६६ चार पांच छ: छे +४५६६ चार पांच छः छ: +४५६६ चार पांच छः छः +४५६६ चार पांच छः छह +४५६६ चार पांच छः छे +४५६६ चार पांच छह छ: +४५६६ चार पांच छह छः +४५६६ चार पांच छह छह +४५६६ चार पांच छह छे +४५६६ चार पांच छे छ: +४५६६ चार पांच छे छः +४५६६ चार पांच छे छह +४५६६ चार पांच छे छे +४५६७ चार पाँच छ: सात +४५६७ चार पाँच छः सात +४५६७ चार पाँच छह सात +४५६७ चार पाँच छे सात +४५६७ चार पांच छ: सात +४५६७ चार पांच छः सात +४५६७ चार पांच छह सात +४५६७ चार पांच छे सात +४५७३ चार पाँच सात तीन +४५७३ चार पांच सात तीन +४६१ चार छ: एक +४६१ चार छः एक +४६१ चार छह एक +४६१ चार छे एक +४६२ चार छ: दो +४६२ चार छः दो +४६२ चार छह दो +४६२ चार छे दो +४६३३ चार छ: तीन तीन +४६३३ चार छः तीन तीन +४६३३ चार छह तीन तीन +४६३३ चार छे तीन तीन +४६३४ चार छ: तीन चार +४६३४ चार छः तीन चार +४६३४ चार छह तीन चार +४६३४ चार छे तीन चार +४६३५ चार छ: तीन पाँच +४६३५ चार छ: तीन पांच +४६३५ चार छः तीन पाँच +४६३५ चार छः तीन पांच +४६३५ चार छह तीन पाँच +४६३५ चार छह तीन पांच +४६३५ चार छे तीन पाँच +४६३५ चार छे तीन पांच +४६३६ चार छ: तीन छ: +४६३६ चार छ: तीन छः +४६३६ चार छ: तीन छह +४६३६ चार छ: तीन छे +४६३६ चार छः तीन छ: +४६३६ चार छः तीन छः +४६३६ चार छः तीन छह +४६३६ चार छः तीन छे +४६३६ चार छह तीन छ: +४६३६ चार छह तीन छः +४६३६ चार छह तीन छह +४६३६ चार छह तीन छे +४६३६ चार छे तीन छ: +४६३६ चार छे तीन छः +४६३६ चार छे तीन छह +४६३६ चार छे तीन छे +४६३७ चार छ: तीन सात +४६३७ चार छः तीन सात +४६३७ चार छह तीन सात +४६३७ चार छे तीन सात +४६४६ चार छ: चार छ: +४६४६ चार छ: चार छः +४६४६ चार छ: चार छह +४६४६ चार छ: चार छे +४६४६ चार छः चार छ: +४६४६ चार छः चार छः +४६४६ चार छः चार छह +४६४६ चार छः चार छे +४६४६ चार छह चार छ: +४६४६ चार छह चार छः +४६४६ चार छह चार छह +४६४६ चार छह चार छे +४६४६ चार छे चार छ: +४६४६ चार छे चार छः +४६४६ चार छे चार छह +४६४६ चार छे चार छे +४६५२ चार छ: पाँच दो +४६५२ चार छ: पांच दो +४६५२ चार छः पाँच दो +४६५२ चार छः पांच दो +४६५२ चार छह पाँच दो +४६५२ चार छह पांच दो +४६५२ चार छे पाँच दो +४६५२ चार छे पांच दो +४७१ चार सात एक +४७२ चार सात दो +४७३ चार सात तीन +४७४ चार सात चार +४७५ चार सात पाँच +४७५ चार सात पांच +४७७ चार सात सात +४७८ चार सात आठ +४७९ चार सात नौ +४८१ चार आठ एक +४८२ चार आठ दो +४८२१ चार आठ दो एक +४८२९ चार आठ दो नौ +४८४ चार आठ चार +४८४६२ चार आठ चार छ: दो +४८४६२ चार आठ चार छः दो +४८४६२ चार आठ चार छह दो +४८४६२ चार आठ चार छे दो +४८५ चार आठ पाँच +४८५ चार आठ पांच +४८५ चार आठ पाँच +४८५ चार आठ पांच +४८६२ चार आठ छ: दो +४८६२ चार आठ छः दो +४८६२ चार आठ छह दो +४८६२ चार आठ छे दो +४८६५ चार आठ छ: पाँच +४८६५ चार आठ छ: पांच +४८६५ चार आठ छः पाँच +४८६५ चार आठ छः पांच +४८६५ चार आठ छह पाँच +४८६५ चार आठ छह पांच +४८६५ चार आठ छे पाँच +४८६५ चार आठ छे पांच +४८७ चार आठ सात +४८८ चार आठ आठ +४८९२ चार आठ नौ दो +४८९६ चार आठ नौ छ: +४८९६ चार आठ नौ छः +४८९६ चार आठ नौ छह +४८९६ चार आठ नौ छे +४९० चार नौ शून्य +४९१ चार नौ एक +४९२ चार नौ दो +४९३ चार नौ तीन +४९४ चार नौ चार +४९५ चार नौ पाँच +४९५ चार नौ पांच +४९६ चार नौ छ: +४९६ चार नौ छः +४९६ चार नौ छह +४९६ चार नौ छे +४९७ चार नौ सात +४९८ चार नौ आठ +४९९ चार नौ नौ +५१२ पाँच एक दो +५१२ पांच एक दो +५१७६ पाँच एक सात छ: +५१७६ पाँच एक सात छः +५१७६ पाँच एक सात छह +५१७६ पाँच एक सात छे +५१७६ पांच एक सात छ: +५१७६ पांच एक सात छः +५१७६ पांच एक सात छह +५१७६ पांच एक सात छे +५१८० पाँच एक आठ शून्य +५१८० पांच एक आठ शून्य +५१८३ पाँच एक आठ तीन +५१८३ पांच एक आठ तीन +५१९२ पाँच एक नौ दो +५१९२ पांच एक नौ दो +५२२ पाँच दो दो +५२२ पांच दो दो +५२७८ पाँच दो सात आठ +५२७८ पांच दो सात आठ +५२८२ पाँच दो आठ दो +५२८२ पांच दो आठ दो +५३२ पाँच तीन दो +५३२ पांच तीन दो +५३५ पाँच तीन पाँच +५३५ पाँच तीन पांच +५३५ पांच तीन पाँच +५३५ पांच तीन पांच +५३६२ पाँच तीन छ: दो +५३६२ पाँच तीन छः दो +५३६२ पाँच तीन छह दो +५३६२ पाँच तीन छे दो +५३६२ पांच तीन छ: दो +५३६२ पांच तीन छः दो +५३६२ पांच तीन छह दो +५३६२ पांच तीन छे दो +५४१२ पाँच चार एक दो +५४१२ पांच चार एक दो +५४१४ पाँच चार एक चार +५४१४ पांच चार एक चार +५४२ पाँच चार दो +५४२ पांच चार दो +५४४२ पाँच चार चार दो +५४४२ पांच चार चार दो +५४४४ पाँच चार चार चार +५४४४ पांच चार चार चार +५४५२ पाँच चार पाँच दो +५४५२ पाँच चार पांच दो +५४५२ पांच चार पाँच दो +५४५२ पांच चार पांच दो +५४९६ पाँच चार नौ छ: +५४९६ पाँच चार नौ छः +५४९६ पाँच चार नौ छह +५४९६ पाँच चार नौ छे +५४९६ पांच चार नौ छ: +५४९६ पांच चार नौ छः +५४९६ पांच चार नौ छह +५४९६ पांच चार नौ छे +५५१ पाँच पाँच एक +५५१ पाँच पांच एक +५५१ पांच पाँच एक +५५१ पांच पांच एक +५५४२ पाँच पाँच चार दो +५५४२ पाँच पांच चार दो +५५४२ पांच पाँच चार दो +५५४२ पांच पांच चार दो +५६२ पाँच छ: दो +५६२ पाँच छः दो +५६२ पाँच छह दो +५६२ पाँच छे दो +५६२ पांच छ: दो +५६२ पांच छः दो +५६२ पांच छह दो +५६२ पांच छे दो +५६४२ पाँच छ: चार दो +५६४२ पाँच छः चार दो +५६४२ पाँच छह चार दो +५६४२ पाँच छे चार दो +५६४२ पांच छ: चार दो +५६४२ पांच छः चार दो +५६४२ पांच छह चार दो +५६४२ पांच छे चार दो +५६४४ पाँच छ: चार चार +५६४४ पाँच छः चार चार +५६४४ पाँच छह चार चार +५६४४ पाँच छे चार चार +५६४४ पांच छ: चार चार +५६४४ पांच छः चार चार +५६४४ पांच छह चार चार +५६४४ पांच छे चार चार +५६५ पाँच छ: पाँच +५६५ पाँच छ: पांच +५६५ पाँच छः पाँच +५६५ पाँच छः पांच +५६५ पाँच छह पाँच +५६५ पाँच छह पांच +५६५ पाँच छे पाँच +५६५ पाँच छे पांच +५६५ पांच छ: पाँच +५६५ पांच छ: पांच +५६५ पांच छः पाँच +५६५ पांच छः पांच +५६५ पांच छह पाँच +५६५ पांच छह पांच +५६५ पांच छे पाँच +५६५ पांच छे पांच +५६६२ पाँच छ: छ: दो +५६६२ पाँच छ: छः दो +५६६२ पाँच छ: छह दो +५६६२ पाँच छ: छे दो +५६६२ पाँच छः छ: दो +५६६२ पाँच छः छः दो +५६६२ पाँच छः छह दो +५६६२ पाँच छः छे दो +५६६२ पाँच छह छ: दो +५६६२ पाँच छह छः दो +५६६२ पाँच छह छह दो +५६६२ पाँच छह छे दो +५६६२ पाँच छे छ: दो +५६६२ पाँच छे छः दो +५६६२ पाँच छे छह दो +५६६२ पाँच छे छे दो +५६६२ पांच छ: छ: दो +५६६२ पांच छ: छः दो +५६६२ पांच छ: छह दो +५६६२ पांच छ: छे दो +५६६२ पांच छः छ: दो +५६६२ पांच छः छः दो +५६६२ पांच छः छह दो +५६६२ पांच छः छे दो +५६६२ पांच छह छ: दो +५६६२ पांच छह छः दो +५६६२ पांच छह छह दो +५६६२ पांच छह छे दो +५६६२ पांच छे छ: दो +५६६२ पांच छे छः दो +५६६२ पांच छे छह दो +५६६२ पांच छे छे दो +५६७२ पाँच छ: सात दो +५६७२ पाँच छः सात दो +५६७२ पाँच छह सात दो +५६७२ पाँच छे सात दो +५६७२ पांच छ: सात दो +५६७२ पांच छः सात दो +५६७२ पांच छह सात दो +५६७२ पांच छे सात दो +५६७६ पाँच छ: सात छ: +५६७६ पाँच छ: सात छः +५६७६ पाँच छ: सात छह +५६७६ पाँच छ: सात छे +५६७६ पाँच छः सात छ: +५६७६ पाँच छः सात छः +५६७६ पाँच छः सात छह +५६७६ पाँच छः सात छे +५६७६ पाँच छह सात छ: +५६७६ पाँच छह सात छः +५६७६ पाँच छह सात छह +५६७६ पाँच छह सात छे +५६७६ पाँच छे सात छ: +५६७६ पाँच छे सात छः +५६७६ पाँच छे सात छह +५६७६ पाँच छे सात छे +५६७६ पांच छ: सात छ: +५६७६ पांच छ: सात छः +५६७६ पांच छ: सात छह +५६७६ पांच छ: सात छे +५६७६ पांच छः सात छ: +५६७६ पांच छः सात छः +५६७६ पांच छः सात छह +५६७६ पांच छः सात छे +५६७६ पांच छह सात छ: +५६७६ पांच छह सात छः +५६७६ पांच छह सात छह +५६७६ पांच छह सात छे +५६७६ पांच छे सात छ: +५६७६ पांच छे सात छः +५६७६ पांच छे सात छह +५६७६ पांच छे सात छे +५६८८ पाँच छ: आठ आठ +५६८८ पाँच छः आठ आठ +५६८८ पाँच छह आठ आठ +५६८८ पाँच छे आठ आठ +५६८८ पांच छ: आठ आठ +५६८८ पांच छः आठ आठ +५६८८ पांच छह आठ आठ +५६८८ पांच छे आठ आठ +५७१ पाँच सात एक +५७१ पांच सात एक +५७२२ पाँच सात दो दो +५७२२ पांच सात दो दो +५७३२ पाँच सात तीन दो +५७३२ पांच सात तीन दो +५७३६ पाँच सात तीन छ: +५७३६ पाँच सात तीन छः +५७३६ पाँच सात तीन छह +५७३६ पाँच सात तीन छे +५७३६ पांच सात तीन छ: +५७३६ पांच सात तीन छः +५७३६ पांच सात तीन छह +५७३६ पांच सात तीन छे +५७३६ पाँच सात चार दो +५७३६ पांच सात चार दो +५७४२ पाँच सात चार दो +५७४२ पांच सात चार दो +५७४२ पाँच सात चार दो +५७४२ पांच सात चार दो +५७४४ पाँच सात चार चार +५७४४ पांच सात चार चार +५७४४ पाँच सात चार चार +५७४४ पांच सात चार चार +५८१ पाँच आठ एक +५८१ पांच आठ एक +५८१ पाँच आठ एक +५८१ पांच आठ एक +५८४२ पाँच आठ चार दो +५८४२ पांच आठ चार दो +५८४२ पाँच आठ चार दो +५८४२ पांच आठ चार दो +५८६२ पाँच आठ छ: दो +५८६२ पाँच आठ छः दो +५८६२ पाँच आठ छह दो +५८६२ पाँच आठ छे दो +५८६२ पांच आठ छ: दो +५८६२ पांच आठ छः दो +५८६२ पांच आठ छह दो +५८६२ पांच आठ छे दो +५८६२ पाँच आठ छ: दो +५८६२ पाँच आठ छः दो +५८६२ पाँच आठ छह दो +५८६२ पाँच आठ छे दो +५८६२ पांच आठ छ: दो +५८६२ पांच आठ छः दो +५८६२ पांच आठ छह दो +५८६२ पांच आठ छे दो +५८८२ पाँच आठ आठ दो +५८८२ पांच आठ आठ दो +५९४२ पाँच नौ चार दो +५९४२ पांच नौ चार दो +५९६२ पाँच नौ छ: दो +५९६२ पाँच नौ छः दो +५९६२ पाँच नौ छह दो +५९६२ पाँच नौ छे दो +५९६२ पांच नौ छ: दो +५९६२ पांच नौ छः दो +५९६२ पांच नौ छह दो +५९६२ पांच नौ छे दो +५९६४ पाँच नौ छ: चार +५९६४ पाँच नौ छः चार +५९६४ पाँच नौ छह चार +५९६४ पाँच नौ छे चार +५९६४ पांच नौ छ: चार +५९६४ पांच नौ छः चार +५९६४ पांच नौ छह चार +५९६४ पांच नौ छे चार +६११२ छ: एक एक दो +६११२ छः एक एक दो +६११२ छह एक एक दो +६११२ छे एक एक दो +६११५ छ: एक एक पाँच +६११५ छ: एक एक पांच +६११५ छः एक एक पाँच +६११५ छः एक एक पांच +६११५ छह एक एक पाँच +६११५ छह एक एक पांच +६११५ छे एक एक पाँच +६११५ छे एक एक पांच +६१२ छ: एक दो +६१२ छः एक दो +६१२ छह एक दो +६१२ छे एक दो +६१८२ छ: एक आठ दो +६१८२ छः एक आठ दो +६१८२ छह एक आठ दो +६१८२ छे एक आठ दो +६१८४ छ: एक आठ चार +६१८४ छः एक आठ चार +६१८४ छह एक आठ चार +६१८४ छे एक आठ चार +६२१ छ: दो एक +६२१ छः दो एक +६२१ छह दो एक +६२१ छे दो एक +६२२४ छ: दो दो चार +६२२४ छः दो दो चार +६२२४ छह दो दो चार +६२२४ छे दो दो चार +६२४३ छ: दो चार तीन +६२४३ छः दो चार तीन +६२४३ छह दो चार तीन +६२४३ छे दो चार तीन +६२५२ छ: दो पाँच दो +६२५२ छ: दो पांच दो +६२५२ छः दो पाँच दो +६२५२ छः दो पांच दो +६२५२ छह दो पाँच दो +६२५२ छह दो पांच दो +६२५२ छे दो पाँच दो +६२५२ छे दो पांच दो +६२५४ छ: दो पाँच चार +६२५४ छ: दो पांच चार +६२५४ छः दो पाँच चार +६२५४ छः दो पांच चार +६२५४ छह दो पाँच चार +६२५४ छह दो पांच चार +६२५४ छे दो पाँच चार +६२५४ छे दो पांच चार +६२७२ छ: दो सात दो +६२७२ छः दो सात दो +६२७२ छह दो सात दो +६२७२ छे दो सात दो +६२७४ छ: दो सात चार +६२७४ छः दो सात चार +६२७४ छह दो सात चार +६२७४ छे दो सात चार +६३१ छ: तीन एक +६३१ छः तीन एक +६३१ छह तीन एक +६३१ छे तीन एक +६३२४ छ: तीन दो चार +६३२४ छः तीन दो चार +६३२४ छह तीन दो चार +६३२४ छे तीन दो चार +६४१ छ: चार एक +६४१ छः चार एक +६४१ छह चार एक +६४१ छे चार एक +६४३२ छ: चार तीन दो +६४३२ छः चार तीन दो +६४३२ छह चार तीन दो +६४३२ छे चार तीन दो +६४५२ छ: चार पाँच दो +६४५२ छ: चार पांच दो +६४५२ छः चार पाँच दो +६४५२ छः चार पांच दो +६४५२ छह चार पाँच दो +६४५२ छह चार पांच दो +६४५२ छे चार पाँच दो +६४५२ छे चार पांच दो +६४५४ छ: चार पाँच चार +६४५४ छ: चार पांच चार +६४५४ छः चार पाँच चार +६४५४ छः चार पांच चार +६४५४ छह चार पाँच चार +६४५४ छह चार पांच चार +६४५४ छे चार पाँच चार +६४५४ छे चार पांच चार +६४५५ छ: चार पाँच पाँच +६४५५ छ: चार पाँच पांच +६४५५ छ: चार पांच पाँच +६४५५ छ: चार पांच पांच +६४५५ छः चार पाँच पाँच +६४५५ छः चार पाँच पांच +६४५५ छः चार पांच पाँच +६४५५ छः चार पांच पांच +६४५५ छह चार पाँच पाँच +६४५५ छह चार पाँच पांच +६४५५ छह चार पांच पाँच +६४५५ छह चार पांच पांच +६४५५ छे चार पाँच पाँच +६४५५ छे चार पाँच पांच +६४५५ छे चार पांच पाँच +६४५५ छे चार पांच पांच +६५१ छ: पाँच एक +६५१ छ: पांच एक +६५१ छः पाँच एक +६५१ छः पांच एक +६५१ छह पाँच एक +६५१ छह पांच एक +६५१ छे पाँच एक +६५१ छे पांच एक +६५१ छ: पाँच एक +६५१ छ: पांच एक +६५१ छः पाँच एक +६५१ छः पांच एक +६५१ छह पाँच एक +६५१ छह पांच एक +६५१ छे पाँच एक +६५१ छे पांच एक +६५३२ छ: पाँच तीन दो +६५३२ छ: पांच तीन दो +६५३२ छः पाँच तीन दो +६५३२ छः पांच तीन दो +६५३२ छह पाँच तीन दो +६५३२ छह पांच तीन दो +६५३२ छे पाँच तीन दो +६५३२ छे पांच तीन दो +६५३४ छ: पाँच तीन चार +६५३४ छ: पांच तीन चार +६५३४ छः पाँच तीन चार +६५३४ छः पांच तीन चार +६५३४ छह पाँच तीन चार +६५३४ छह पांच तीन चार +६५३४ छे पाँच तीन चार +६५३४ छे पांच तीन चार +६५४० छ: पाँच चार शून्य +६५४० छ: पांच चार शून्य +६५४० छः पाँच चार शून्य +६५४० छः पांच चार शून्य +६५४० छह पाँच चार शून्य +६५४० छह पांच चार शून्य +६५४० छे पाँच चार शून्य +६५४० छे पांच चार शून्य +६५४२ छ: पाँच चार दो +६५४२ छ: पांच चार दो +६५४२ छः पाँच चार दो +६५४२ छः पांच चार दो +६५४२ छह पाँच चार दो +६५४२ छह पांच चार दो +६५४२ छे पाँच चार दो +६५४२ छे पांच चार दो +६५४६ छ: पाँच चार छ: +६५४६ छ: पाँच चार छः +६५४६ छ: पाँच चार छह +६५४६ छ: पाँच चार छे +६५४६ छ: पांच चार छ: +६५४६ छ: पांच चार छः +६५४६ छ: पांच चार छह +६५४६ छ: पांच चार छे +६५४६ छः पाँच चार छ: +६५४६ छः पाँच चार छः +६५४६ छः पाँच चार छह +६५४६ छः पाँच चार छे +६५४६ छः पांच चार छ: +६५४६ छः पांच चार छः +६५४६ छः पांच चार छह +६५४६ छः पांच चार छे +६५४६ छह पाँच चार छ: +६५४६ छह पाँच चार छः +६५४६ छह पाँच चार छह +६५४६ छह पाँच चार छे +६५४६ छह पांच चार छ: +६५४६ छह पांच चार छः +६५४६ छह पांच चार छह +६५४६ छह पांच चार छे +६५४६ छे पाँच चार छ: +६५४६ छे पाँच चार छः +६५४६ छे पाँच चार छह +६५४६ छे पाँच चार छे +६५४६ छे पांच चार छ: +६५४६ छे पांच चार छः +६५४६ छे पांच चार छह +६५४६ छे पांच चार छे +६५६२ छ: पाँच छ: दो +६५६२ छ: पाँच छः दो +६५६२ छ: पाँच छह दो +६५६२ छ: पाँच छे दो +६५६२ छ: पांच छ: दो +६५६२ छ: पांच छः दो +६५६२ छ: पांच छह दो +६५६२ छ: पांच छे दो +६५६२ छः पाँच छ: दो +६५६२ छः पाँच छः दो +६५६२ छः पाँच छह दो +६५६२ छः पाँच छे दो +६५६२ छः पांच छ: दो +६५६२ छः पांच छः दो +६५६२ छः पांच छह दो +६५६२ छः पांच छे दो +६५६२ छह पाँच छ: दो +६५६२ छह पाँच छः दो +६५६२ छह पाँच छह दो +६५६२ छह पाँच छे दो +६५६२ छह पांच छ: दो +६५६२ छह पांच छः दो +६५६२ छह पांच छह दो +६५६२ छह पांच छे दो +६५६२ छे पाँच छ: दो +६५६२ छे पाँच छः दो +६५६२ छे पाँच छह दो +६५६२ छे पाँच छे दो +६५६२ छे पांच छ: दो +६५६२ छे पांच छः दो +६५६२ छे पांच छह दो +६५६२ छे पांच छे दो +६५७ छ: पाँच सात +६५७ छ: पांच सात +६५७ छः पाँच सात +६५७ छः पांच सात +६५७ छह पाँच सात +६५७ छह पांच सात +६५७ छे पाँच सात +६५७ छे पांच सात +६५८२ छ: पाँच आठ दो +६५८२ छ: पांच आठ दो +६५८२ छः पाँच आठ दो +६५८२ छः पांच आठ दो +६५८२ छह पाँच आठ दो +६५८२ छह पांच आठ दो +६५८२ छे पाँच आठ दो +६५८२ छे पांच आठ दो +६६१ छ: छ: एक +६६१ छ: छः एक +६६१ छ: छह एक +६६१ छ: छे एक +६६१ छः छ: एक +६६१ छः छः एक +६६१ छः छह एक +६६१ छः छे एक +६६१ छह छ: एक +६६१ छह छः एक +६६१ छह छह एक +६६१ छह छे एक +६६१ छे छ: एक +६६१ छे छः एक +६६१ छे छह एक +६६१ छे छे एक +६६२२ छ: छ: दो +६६२२ छ: छः दो +६६२२ छ: छह दो +६६२२ छ: छे दो +६६२२ छः छ: दो +६६२२ छः छः दो +६६२२ छः छह दो +६६२२ छः छे दो +६६२२ छह छ: दो +६६२२ छह छः दो +६६२२ छह छह दो +६६२२ छह छे दो +६६२२ छे छ: दो +६६२२ छे छः दो +६६२२ छे छह दो +६६२२ छे छे दो +६६३ छ: छ: तीन +६६३ छ: छः तीन +६६३ छ: छह तीन +६६३ छ: छे तीन +६६३ छः छ: तीन +६६३ छः छः तीन +६६३ छः छह तीन +६६३ छः छे तीन +६६३ छह छ: तीन +६६३ छह छः तीन +६६३ छह छह तीन +६६३ छह छे तीन +६६३ छे छ: तीन +६६३ छे छः तीन +६६३ छे छह तीन +६६३ छे छे तीन +६६४५ छ: छ: चार पाँच +६६४५ छ: छ: चार पांच +६६४५ छ: छः चार पाँच +६६४५ छ: छः चार पांच +६६४५ छ: छह चार पाँच +६६४५ छ: छह चार पांच +६६४५ छ: छे चार पाँच +६६४५ छ: छे चार पांच +६६४५ छः छ: चार पाँच +६६४५ छः छ: चार पांच +६६४५ छः छः चार पाँच +६६४५ छः छः चार पांच +६६४५ छः छह चार पाँच +६६४५ छः छह चार पांच +६६४५ छः छे चार पाँच +६६४५ छः छे चार पांच +६६४५ छह छ: चार पाँच +६६४५ छह छ: चार पांच +६६४५ छह छः चार पाँच +६६४५ छह छः चार पांच +६६४५ छह छह चार पाँच +६६४५ छह छह चार पांच +६६४५ छह छे चार पाँच +६६४५ छह छे चार पांच +६६४५ छे छ: चार पाँच +६६४५ छे छ: चार पांच +६६४५ छे छः चार पाँच +६६४५ छे छः चार पांच +६६४५ छे छह चार पाँच +६६४५ छे छह चार पांच +६६४५ छे छे चार पाँच +६६४५ छे छे चार पांच +६६४६ छ: छ: चार छ: +६६४६ छ: छ: चार छः +६६४६ छ: छ: चार छह +६६४६ छ: छ: चार छे +६६४६ छ: छः चार छ: +६६४६ छ: छः चार छः +६६४६ छ: छः चार छह +६६४६ छ: छः चार छे +६६४६ छ: छह चार छ: +६६४६ छ: छह चार छः +६६४६ छ: छह चार छह +६६४६ छ: छह चार छे +६६४६ छ: छे चार छ: +६६४६ छ: छे चार छः +६६४६ छ: छे चार छह +६६४६ छ: छे चार छे +६६४६ छः छ: चार छ: +६६४६ छः छ: चार छः +६६४६ छः छ: चार छह +६६४६ छः छ: चार छे +६६४६ छः छः चार छ: +६६४६ छः छः चार छः +६६४६ छः छः चार छह +६६४६ छः छः चार छे +६६४६ छः छह चार छ: +६६४६ छः छह चार छः +६६४६ छः छह चार छह +६६४६ छः छह चार छे +६६४६ छः छे चार छ: +६६४६ छः छे चार छः +६६४६ छः छे चार छह +६६४६ छः छे चार छे +६६४६ छह छ: चार छ: +६६४६ छह छ: चार छः +६६४६ छह छ: चार छह +६६४६ छह छ: चार छे +६६४६ छह छः चार छ: +६६४६ छह छः चार छः +६६४६ छह छः चार छह +६६४६ छह छः चार छे +६६४६ छह छह चार छ: +६६४६ छह छह चार छः +६६४६ छह छह चार छह +६६४६ छह छह चार छे +६६४६ छह छे चार छ: +६६४६ छह छे चार छः +६६४६ छह छे चार छह +६६४६ छह छे चार छे +६६४६ छे छ: चार छ: +६६४६ छे छ: चार छः +६६४६ छे छ: चार छह +६६४६ छे छ: चार छे +६६४६ छे छः चार छ: +६६४६ छे छः चार छः +६६४६ छे छः चार छह +६६४६ छे छः चार छे +६६४६ छे छह चार छ: +६६४६ छे छह चार छः +६६४६ छे छह चार छह +६६४६ छे छह चार छे +६६४६ छे छे चार छ: +६६४६ छे छे चार छः +६६४६ छे छे चार छह +६६४६ छे छे चार छे +६६५२ छ: छ: पाँच दो +६६५२ छ: छ: पांच दो +६६५२ छ: छः पाँच दो +६६५२ छ: छः पांच दो +६६५२ छ: छह पाँच दो +६६५२ छ: छह पांच दो +६६५२ छ: छे पाँच दो +६६५२ छ: छे पांच दो +६६५२ छः छ: पाँच दो +६६५२ छः छ: पांच दो +६६५२ छः छः पाँच दो +६६५२ छः छः पांच दो +६६५२ छः छह पाँच दो +६६५२ छः छह पांच दो +६६५२ छः छे पाँच दो +६६५२ छः छे पांच दो +६६५२ छह छ: पाँच दो +६६५२ छह छ: पांच दो +६६५२ छह छः पाँच दो +६६५२ छह छः पांच दो +६६५२ छह छह पाँच दो +६६५२ छह छह पांच दो +६६५२ छह छे पाँच दो +६६५२ छह छे पांच दो +६६५२ छे छ: पाँच दो +६६५२ छे छ: पांच दो +६६५२ छे छः पाँच दो +६६५२ छे छः पांच दो +६६५२ छे छह पाँच दो +६६५२ छे छह पांच दो +६६५२ छे छे पाँच दो +६६५२ छे छे पांच दो +६७१ छ: सात एक +६७१ छः सात एक +६७१ छह सात एक +६७१ छे सात एक +६७१ शून्य छ: सात एक +६७१ शून्य छः सात एक +६७१ शून्य छह सात एक +६७१ शून्य छे सात एक +६७१७९२ छ: सात एक सात नौ दो +६७१७९२ छः सात एक सात नौ दो +६७१७९२ छह सात एक सात नौ दो +६७१७९२ छे सात एक सात नौ दो +६७२२ छ: सात दो दो +६७२२ छः सात दो दो +६७२२ छह सात दो दो +६७२२ छे सात दो दो +६७२७ छ: सात दो सात +६७२७ छः सात दो सात +६७२७ छह सात दो सात +६७२७ छे सात दो सात +६७४ छ: सात चार +६७४ छः सात चार +६७४ छह सात चार +६७४ छे सात चार +६७५४ छ: सात पाँच चार +६७५४ छ: सात पांच चार +६७५४ छः सात पाँच चार +६७५४ छः सात पांच चार +६७५४ छह सात पाँच चार +६७५४ छह सात पांच चार +६७५४ छे सात पाँच चार +६७५४ छे सात पांच चार +६७६२ छ: सात छ: दो +६७६२ छ: सात छः दो +६७६२ छ: सात छह दो +६७६२ छ: सात छे दो +६७६२ छः सात छ: दो +६७६२ छः सात छः दो +६७६२ छः सात छह दो +६७६२ छः सात छे दो +६७६२ छह सात छ: दो +६७६२ छह सात छः दो +६७६२ छह सात छह दो +६७६२ छह सात छे दो +६७६२ छे सात छ: दो +६७६२ छे सात छः दो +६७६२ छे सात छह दो +६७६२ छे सात छे दो +६७६४ छ: सात छ: चार +६७६४ छ: सात छः चार +६७६४ छ: सात छह चार +६७६४ छ: सात छे चार +६७६४ छः सात छ: चार +६७६४ छः सात छः चार +६७६४ छः सात छह चार +६७६४ छः सात छे चार +६७६४ छह सात छ: चार +६७६४ छह सात छः चार +६७६४ छह सात छह चार +६७६४ छह सात छे चार +६७६४ छे सात छ: चार +६७६४ छे सात छः चार +६७६४ छे सात छह चार +६७६४ छे सात छे चार +६७६६ छ: सात छ: छ: +६७६६ छ: सात छ: छः +६७६६ छ: सात छ: छह +६७६६ छ: सात छ: छे +६७६६ छ: सात छः छ: +६७६६ छ: सात छः छः +६७६६ छ: सात छः छह +६७६६ छ: सात छः छे +६७६६ छ: सात छह छ: +६७६६ छ: सात छह छः +६७६६ छ: सात छह छह +६७६६ छ: सात छह छे +६७६६ छ: सात छे छ: +६७६६ छ: सात छे छः +६७६६ छ: सात छे छह +६७६६ छ: सात छे छे +६७६६ छः सात छ: छ: +६७६६ छः सात छ: छः +६७६६ छः सात छ: छह +६७६६ छः सात छ: छे +६७६६ छः सात छः छ: +६७६६ छः सात छः छः +६७६६ छः सात छः छह +६७६६ छः सात छः छे +६७६६ छः सात छह छ: +६७६६ छः सात छह छः +६७६६ छः सात छह छह +६७६६ छः सात छह छे +६७६६ छः सात छे छ: +६७६६ छः सात छे छः +६७६६ छः सात छे छह +६७६६ छः सात छे छे +६७६६ छह सात छ: छ: +६७६६ छह सात छ: छः +६७६६ छह सात छ: छह +६७६६ छह सात छ: छे +६७६६ छह सात छः छ: +६७६६ छह सात छः छः +६७६६ छह सात छः छह +६७६६ छह सात छः छे +६७६६ छह सात छह छ: +६७६६ छह सात छह छः +६७६६ छह सात छह छह +६७६६ छह सात छह छे +६७६६ छह सात छे छ: +६७६६ छह सात छे छः +६७६६ छह सात छे छह +६७६६ छह सात छे छे +६७६६ छे सात छ: छ: +६७६६ छे सात छ: छः +६७६६ छे सात छ: छह +६७६६ छे सात छ: छे +६७६६ छे सात छः छ: +६७६६ छे सात छः छः +६७६६ छे सात छः छह +६७६६ छे सात छः छे +६७६६ छे सात छह छ: +६७६६ छे सात छह छः +६७६६ छे सात छह छह +६७६६ छे सात छह छे +६७६६ छे सात छे छ: +६७६६ छे सात छे छः +६७६६ छे सात छे छह +६७६६ छे सात छे छे +६७६७ छ: सात छ: सात +६७६७ छ: सात छः सात +६७६७ छ: सात छह सात +६७६७ छ: सात छे सात +६७६७ छः सात छ: सात +६७६७ छः सात छः सात +६७६७ छः सात छह सात +६७६७ छः सात छे सात +६७६७ छह सात छ: सात +६७६७ छह सात छः सात +६७६७ छह सात छह सात +६७६७ छह सात छे सात +६७६७ छे सात छ: सात +६७६७ छे सात छः सात +६७६७ छे सात छह सात +६७६७ छे सात छे सात +६७६८ छ: सात छ: आठ +६७६८ छ: सात छः आठ +६७६८ छ: सात छह आठ +६७६८ छ: सात छे आठ +६७६८ छः सात छ: आठ +६७६८ छः सात छः आठ +६७६८ छः सात छह आठ +६७६८ छः सात छे आठ +६७६८ छह सात छ: आठ +६७६८ छह सात छः आठ +६७६८ छह सात छह आठ +६७६८ छह सात छे आठ +६७६८ छे सात छ: आठ +६७६८ छे सात छः आठ +६७६८ छे सात छह आठ +६७६८ छे सात छे आठ +६७८२ छ: सात आठ दो +६७८२ छः सात आठ दो +६७८२ छह सात आठ दो +६७८२ छे सात आठ दो +६७८४ छ: सात आठ चार +६७८४ छः सात आठ चार +६७८४ छह सात आठ चार +६७८४ छे सात आठ चार +६७९२ छ: सात नौ दो +६७९२ छः सात नौ दो +६७९२ छह सात नौ दो +६७९२ छे सात नौ दो +६८० छ: आठ शून्य +६८० छः आठ शून्य +६८० छह आठ शून्य +६८० छे आठ शून्य +६८११ छ: आठ एक एक +६८११ छः आठ एक एक +६८११ छह आठ एक एक +६८११ छे आठ एक एक +६८४२ छ: आठ चार दो +६८४२ छः आठ चार दो +६८४२ छह आठ चार दो +६८४२ छे आठ चार दो +६८५२ छ: आठ पाँच दो +६८५२ छ: आठ पांच दो +६८५२ छः आठ पाँच दो +६८५२ छः आठ पांच दो +६८५२ छह आठ पाँच दो +६८५२ छह आठ पांच दो +६८५२ छे आठ पाँच दो +६८५२ छे आठ पांच दो +६८५३ छ: आठ पाँच तीन +६८५३ छ: आठ पांच तीन +६८५३ छः आठ पाँच तीन +६८५३ छः आठ पांच तीन +६८५३ छह आठ पाँच तीन +६८५३ छह आठ पांच तीन +६८५३ छे आठ पाँच तीन +६८५३ छे आठ पांच तीन +६८५४ छ: आठ पाँच चार +६८५४ छ: आठ पांच चार +६८५४ छः आठ पाँच चार +६८५४ छः आठ पांच चार +६८५४ छह आठ पाँच चार +६८५४ छह आठ पांच चार +६८५४ छे आठ पाँच चार +६८५४ छे आठ पांच चार +७११४ सात एक एक चार +७१२ सात एक दो +७१३२ सात एक तीन दो +७१५२ सात एक पाँच दो +७१५२ सात एक पांच दो +७१६२ सात एक छ: दो +७१६२ सात एक छः दो +७१६२ सात एक छह दो +७१६२ सात एक छे दो +७१७२ सात एक सात दो +७१८३ सात एक आठ तीन +७१८४ सात एक आठ चार +७१८५ सात एक आठ पाँच +७१८५ सात एक आठ पांच +७२४ आठ दो चार +७२६२ सात दो छ: दो +७२६२ सात दो छः दो +७२६२ सात दो छह दो +७२६२ सात दो छे दो +७२६३ सात दो छ: तीन +७२६३ सात दो छः तीन +७२६३ सात दो छह तीन +७२६३ सात दो छे तीन +७२७२ सात दो सात दो +७२९२ सात दो नौ दो +७३१ सात तीन एक +७३२४ सात तीन दो चार +७३२५ सात तीन दो पाँच +७३२५ सात तीन दो पांच +७३३ सात तीन तीन +७३४ सात तीन चार +७४१२ सात चार एक दो +७४१४ शून्य सात चार एक चार +७४२२ सात चार दो दो +७४३२ शून्य सात चार तीन दो +७४७ सात चार सात +७५१ सात पाँच एक +७५१ सात पांच एक +७५२२ सात पाँच दो दो +७५२२ सात पांच दो दो +७५३२ सात पाँच तीन दो +७५३२ सात पांच तीन दो +७५३४ सात पाँच तीन चार +७५३४ सात पांच तीन चार +७५५ सात पाँच पाँच +७५५ सात पाँच पांच +७५५ सात पांच पाँच +७५५ सात पांच पांच +७५६२ सात पाँच छ: दो +७५६२ सात पाँच छः दो +७५६२ सात पाँच छह दो +७५६२ सात पाँच छे दो +७५६२ सात पांच छ: दो +७५६२ सात पांच छः दो +७५६२ सात पांच छह दो +७५६२ सात पांच छे दो +७५७२ सात पाँच दो +७५७२ सात पांच दो +७५७४ सात पाँच सात चार +७५७४ सात पांच सात चार +७५८२ सात पाँच आठ दो +७५८२ सात पांच आठ दो +७५९२ सात पाँच नौ दो +७५९२ सात पांच नौ दो +७६१ सात छ: एक +७६१ सात छः एक +७६१ सात छह एक +७६१ सात छे एक +७६६२ सात छ: छ: दो +७६६२ सात छ: छः दो +७६६२ सात छ: छह दो +७६६२ सात छ: छे दो +७६६२ सात छः छ: दो +७६६२ सात छः छः दो +७६६२ सात छः छह दो +७६६२ सात छः छे दो +७६६२ सात छह छ: दो +७६६२ सात छह छः दो +७६६२ सात छह छह दो +७६६२ सात छह छे दो +७६६२ सात छे छ: दो +७६६२ सात छे छः दो +७६६२ सात छे छह दो +७६६२ सात छे छे दो +७६७२ सात छ: सात दो +७६७२ सात छः सात दो +७६७२ सात छह सात दो +७६७२ सात छे सात दो +७६९२ सात छ: नौ दो +७६९२ सात छः नौ दो +७६९२ सात छह नौ दो +७६९२ सात छे नौ दो +७७१ सात सात एक +७७२२ सात सात दो दो +७७६२ सात सात छ: दो +७७६२ सात सात छः दो +७७६२ सात सात छह दो +७७६२ सात सात छे दो +७७७४ सात सात सात चार +७७८२ सात सात आठ दो +७८५३ सात आठ पाँच तीन +७८५३ सात आठ पांच तीन +७८८ सात आठ आठ +७९ सात नौ +७९८४ सात नौ आठ चार +८० आठ शून्य +८०४५ आठ शून्य चार पाँच +८०४५ आठ शून्य चार पांच +८११३ आठ एक एक तीन +८११७ आठ एक एक सात +८११९ आठ एक एक नौ +८१५२ आठ एक पाँच दो +८१५२ आठ एक पांच दो +८१५२ आठ एक पाँच दो +८१५२ आठ एक पांच दो +८१५३ आठ एक पाँच तीन +८१५३ आठ एक पांच तीन +८१५५ आठ एक पाँच पाँच +८१५५ आठ एक पाँच पांच +८१५५ आठ एक पांच पाँच +८१५५ आठ एक पांच पांच +८१५६ आठ एक पाँच छ: +८१५६ आठ एक पाँच छः +८१५६ आठ एक पाँच छह +८१५६ आठ एक पाँच छे +८१५६ आठ एक पांच छ: +८१५६ आठ एक पांच छः +८१५६ आठ एक पांच छह +८१५६ आठ एक पांच छे +८१६ आठ एक छ: +८१६ आठ एक छः +८१६ आठ एक छह +८१६ आठ एक छे +८१७२ आठ एक सात दो +८१८२ आठ एक आठ दो +८१९२ आठ एक नौ दो +८१९३ आठ एक नौ तीन +८१९४ आठ एक नौ चार +८२१ आठ दो एक +८२२१ आठ दो दो एक +८२२३ आठ दो दो तीन +८२३२ आठ दो तीन दो +८२३६ आठ दो तीन छ: +८२३६ आठ दो तीन छः +८२३६ आठ दो तीन छह +८२३६ आठ दो तीन छे +८२४ आठ दो चार +८२४७ आठ दो चार सात +८२५१ आठ दो पाँच एक +८२५१ आठ दो पांच एक +८२५२ आठ दो पाँच दो +८२५२ आठ दो पांच दो +८२५५ आठ दो पाँच पाँच +८२५५ आठ दो पाँच पांच +८२५५ आठ दो पांच पाँच +८२५५ आठ दो पांच पांच +८२६२ आठ दो छ: दो +८२६२ आठ दो छः दो +८२६२ आठ दो छह दो +८२६२ आठ दो छे दो +८२७२ आठ दो सात दो +८२७४ आठ दो सात चार +८३१ आठ तीन एक +८३२ आठ तीन दो +८३३८ आठ तीन तीन आठ +८३४७६० आठ तीन चार सात छ: शून्य +८३४७६० आठ तीन चार सात छः शून्य +८३४७६० आठ तीन चार सात छह शून्य +८३४७६० आठ तीन चार सात छे शून्य +८३५४ आठ तीन पाँच चार +८३५४ आठ तीन पांच चार +८३५५ आठ तीन पाँच पाँच +८३५५ आठ तीन पाँच पांच +८३५५ आठ तीन पांच पाँच +८३५५ आठ तीन पांच पांच +८३६ आठ तीन छ: +८३६ आठ तीन छः +८३६ आठ तीन छह +८३६ आठ तीन छे +८३७२ आठ तीन सात दो +८३७३ आठ तीन सात तीन +८३७५ आठ तीन सात पाँच +८३७५ आठ तीन सात पांच +८३८२ आठ तीन आठ दो +८३८४ आठ तीन आठ चार +८३८५ आठ तीन आठ पाँच +८३८५ आठ तीन आठ पांच +८3९३ आठ तीन नौ तीन +८३९४ आठ तीन नौ चार +८४१३ आठ चार एक तीन +८४१४ आठ चार एक चार +८४४३ आठ चार चार तीन +८४५३ आठ चार पाँच तीन +८४५३ आठ चार पांच तीन +८४५५ आठ चार पाँच पाँच +८४५५ आठ चार पाँच पांच +८४५५ आठ चार पांच पाँच +८४५५ आठ चार पांच पांच +८४५७ आठ चार पाँच सात +८४५७ आठ चार पांच सात +८४६२ आठ चार छ: दो +८४६२ आठ चार छः दो +८४६२ आठ चार छह दो +८४६२ आठ चार छे दो +८४६३ आठ चार छ: तीन +८४६३ आठ चार छः तीन +८४६३ आठ चार छह तीन +८४६३ आठ चार छे तीन +८४७२ आठ चार सात दो +८४७४ आठ चार सात चार +८४८२ आठ चार आठ दो +८५१२ आठ पाँच एक दो +८५१२ आठ पांच एक दो +८५१३ आठ पाँच एक तीन +८५१३ आठ पांच एक तीन +८५१८ आठ पाँच एक आठ +८५१८ आठ पांच एक आठ +८५२५ आठ पाँच दो पाँच +८५२५ आठ पाँच दो पांच +८५२५ आठ पांच दो पाँच +८५२५ आठ पांच दो पांच +८५३२ आठ पाँच तीन दो +८५३२ आठ पांच तीन दो +८५३९ आठ पाँच तीन नौ +८५३९ आठ पांच तीन नौ +८५४० आठ पाँच चार शून्य +८५४० आठ पांच चार शून्य +८५४३ आठ पाँच चार तीन +८५४३ आठ पांच चार तीन +८५४४ आठ पाँच चार चार +८५४४ आठ पांच चार चार +८५४६ आठ पाँच चार छ: +८५४६ आठ पाँच चार छः +८५४६ आठ पाँच चार छह +८५४६ आठ पाँच चार छे +८५४६ आठ पांच चार छ: +८५४६ आठ पांच चार छः +८५४६ आठ पांच चार छह +८५४६ आठ पांच चार छे +८५४८ आठ पाँच चार आठ +८५४८ आठ पांच चार आठ +८५५२ आठ पाँच पाँच दो +८५५२ आठ पाँच पांच दो +८५५२ आठ पांच पाँच दो +८५५२ आठ पांच पांच दो +८५५४ आठ पाँच पाँच चार +८५५४ आठ पाँच पांच चार +८५५४ आठ पांच पाँच चार +८५५४ आठ पांच पांच चार +८५५६ आठ पाँच पाँच छ: +८५५६ आठ पाँच पाँच छः +८५५६ आठ पाँच पाँच छह +८५५६ आठ पाँच पाँच छे +८५५६ आठ पाँच पांच छ: +८५५६ आठ पाँच पांच छः +८५५६ आठ पाँच पांच छह +८५५६ आठ पाँच पांच छे +८५५६ आठ पांच पाँच छ: +८५५६ आठ पांच पाँच छः +८५५६ आठ पांच पाँच छह +८५५६ आठ पांच पाँच छे +८५५६ आठ पांच पांच छ: +८५५६ आठ पांच पांच छः +८५५६ आठ पांच पांच छह +८५५६ आठ पांच पांच छे +८५५८ आठ पाँच पाँच आठ +८५५८ आठ पाँच पांच आठ +८५५८ आठ पांच पाँच आठ +८५५८ आठ पांच पांच आठ +८५६२ आठ पाँच छ: दो +८५६२ आठ पाँच छः दो +८५६२ आठ पाँच छह दो +८५६२ आठ पाँच छे दो +८५६२ आठ पांच छ: दो +८५६२ आठ पांच छः दो +८५६२ आठ पांच छह दो +८५६२ आठ पांच छे दो +८५७४ आठ पाँच सात चार +८५७४ आठ पांच सात चार +८५७४ आठ पाँच सात चार +८५७४ आठ पांच सात चार +८५७७ आठ पाँच सात सात +८५७७ आठ पांच सात सात +८५७८ आठ पाँच सात आठ +८५७८ आठ पांच सात आठ +८५९२ आठ पाँच नौ दो +८५९२ आठ पांच नौ दो +८५९३ आठ पाँच नौ तीन +८५९३ आठ पांच नौ तीन +८६१ आठ छ: एक +८६१ आठ छः एक +८६१ आठ छह एक +८६१ आठ छे एक +८६२४ आठ छ: दो चार +८६२४ आठ छः दो चार +८६२४ आठ छह दो चार +८६२४ आठ छे दो चार +८६२६ आठ छ: दो छ: +८६२६ आठ छ: दो छः +८६२६ आठ छ: दो छह +८६२६ आठ छ: दो छे +८६२६ आठ छः दो छ: +८६२६ आठ छः दो छः +८६२६ आठ छः दो छह +८६२६ आठ छः दो छे +८६२६ आठ छह दो छ: +८६२६ आठ छह दो छः +८६२६ आठ छह दो छह +८६२६ आठ छह दो छे +८६२६ आठ छे दो छ: +८६२६ आठ छे दो छः +८६२६ आठ छे दो छह +८६२६ आठ छे दो छे +८६३ आठ छ: तीन +८६३ आठ छः तीन +८६३ आठ छह तीन +८६३ आठ छे तीन +८६४१ आठ छ: चार एक +८६४१ आठ छः चार एक +८६४१ आठ छह चार एक +८६४१ आठ छे चार एक +८६४४ आठ छ: चार चार +८६४४ आठ छः चार चार +८६४४ आठ छह चार चार +८६४४ आठ छे चार चार +८६४६ आठ छ: चार छ: +८६४६ आठ छ: चार छः +८६४६ आठ छ: चार छह +८६४६ आठ छ: चार छे +८६४६ आठ छः चार छ: +८६४६ आठ छः चार छः +८६४६ आठ छः चार छह +८६४६ आठ छः चार छे +८६४६ आठ छह चार छ: +८६४६ आठ छह चार छः +८६४६ आठ छह चार छह +८६४६ आठ छह चार छे +८६४६ आठ छे चार छ: +८६४६ आठ छे चार छः +८६४६ आठ छे चार छह +८६४६ आठ छे चार छे +८६४७ आठ छ: चार सात +८६४७ आठ छः चार सात +८६४७ आठ छह चार सात +८६४७ आठ छे चार सात +८६४८ आठ छ: चार आठ +८६४८ आठ छः चार आठ +८६४८ आठ छह चार आठ +८६४८ आठ छे चार आठ +८६६ आठ छ: छ: +८६६ आठ छ: छः +८६६ आठ छ: छह +८६६ आठ छ: छे +८६६ आठ छः छ: +८६६ आठ छः छः +८६६ आठ छः छह +८६६ आठ छः छे +८६६ आठ छह छ: +८६६ आठ छह छः +८६६ आठ छह छह +८६६ आठ छह छे +८६६ आठ छे छ: +८६६ आठ छे छः +८६६ आठ छे छह +८६६ आठ छे छे +८६७२ आठ छ: सात दो +८६७२ आठ छः सात दो +८६७२ आठ छह सात दो +८६७२ आठ छे सात दो +८६७४ आठ छ: सात चार +८६७४ आठ छः सात चार +८६७४ आठ छह सात चार +८६७४ आठ छे सात चार +८६७८ आठ छ: सात आठ +८६७८ आठ छः सात आठ +८६७८ आठ छह सात आठ +८६७८ आठ छे सात आठ +८६८२ आठ छ: आठ दो +८६८२ आठ छः आठ दो +८६८२ आठ छह आठ दो +८६८२ आठ छे आठ दो +८६८३ आठ छ: आठ तीन +८६८३ आठ छः आठ तीन +८६८३ आठ छह आठ तीन +८६८३ आठ छे आठ तीन +८७१२ आठ सात एक दो +८७२२ आठ सात दो दो +८७२८ आठ सात दो आठ +८७३२ आठ सात तीन दो +८७३८ आठ सात तीन आठ +८७४२ आठ सात चार दो +८७४३ आठ सात चार तीन +८७४४ आठ सात चार चार +८८१२ आठ आठ एक दो +८८१४ आठ आठ एक चार +८८१६ आठ आठ एक छ: +८८१६ आठ आठ एक छः +८८१६ आठ आठ एक छह +८८१६ आठ आठ एक छे +८८१७ आठ आठ एक सात +८८१८ आठ आठ एक आठ +८८१९ आठ आठ एक नौ +८८३ आठ आठ तीन +८८३७ आठ आठ तीन सात +८८४ आठ आठ चार +८८५२ आठ आठ पाँच दो +८८५२ आठ आठ पांच दो +८८५५ आठ आठ पाँच पाँच +८८५५ आठ आठ पाँच पांच +८८५५ आठ आठ पांच पाँच +८८५५ आठ आठ पांच पांच +८८५६ आठ आठ पाँच छ: +८८५६ आठ आठ पाँच छः +८८५६ आठ आठ पाँच छह +८८५६ आठ आठ पाँच छे +८८५६ आठ आठ पांच छ: +८८५६ आठ आठ पांच छः +८८५६ आठ आठ पांच छह +८८५६ आठ आठ पांच छे +८८५७ आठ आठ पाँच सात +८८५७ आठ आठ पांच सात +८८५७ आठ आठ पाँच सात +८८५७ आठ आठ पांच सात +८९१ आठ नौ एक +८९२४ आठ नौ दो चार +८९४२ आठ नौ चार दो +८९४४ आठ नौ चार चार +९५२० नौ पाँच दो शून्य +९५२० नौ पांच दो शून्य +९५२११४ नौ पाँच दो एक एक चार +९५२११४ नौ पांच दो एक एक चार +९५२५१ नौ पाँच दो पाँच एक +९५२५१ नौ पाँच दो पांच एक +९५२५१ नौ पांच दो पाँच एक +९५२५१ नौ पांच दो पांच एक diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/telephone/__init__.py b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/__init__.py new file mode 100644 index 000000000..d9155f923 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2024, 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. diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/telephone/eng_to_hindi_digit.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/eng_to_hindi_digit.tsv new file mode 100644 index 000000000..53c5e36cb --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/eng_to_hindi_digit.tsv @@ -0,0 +1,10 @@ +० zero +१ one +२ two +३ three +४ four +५ five +६ six +७ seven +८ eight +९ nine diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/telephone/std_tier1_eng.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/std_tier1_eng.tsv new file mode 100644 index 000000000..8efc76550 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/std_tier1_eng.tsv @@ -0,0 +1,8 @@ +११ one one +२० two zero +२२ two two +३३ three three +४० four zero +४४ four four +७९ seven nine +८० eight zero diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/telephone/std_tier1_hin.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/std_tier1_hin.tsv new file mode 100644 index 000000000..5e5fbc96f --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/telephone/std_tier1_hin.tsv @@ -0,0 +1,8 @@ +११ दो शून्य +२० दो शून्य +२२ दो दो +३३ तीन तीन +४० चार चार +४४ चार चार +७९ सात नौ +८० आठ शून्य diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/time/hour.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/time/hour.tsv index 7e0c8628e..dcd3e46a3 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/data/time/hour.tsv +++ b/nemo_text_processing/inverse_text_normalization/hi/data/time/hour.tsv @@ -23,5 +23,6 @@ २० बीस २१ इक्कीस २२ बाईस +२२ बाइस २३ तेईस -२४ चौबीस \ No newline at end of file +२४ चौबीस diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/time/hour_for_paune.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/time/hour_for_paune.tsv new file mode 100644 index 000000000..8bb4c67ca --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/data/time/hour_for_paune.tsv @@ -0,0 +1,15 @@ +१२ एक +१ दो +२ तीन +३ चार +४ पाँच +४ पांच +५ छः +५ छह +५ छे +६ सात +७ आठ +८ नौ +९ दस +१० ग्यारह +११ बारह diff --git a/nemo_text_processing/inverse_text_normalization/hi/data/whitelist/whitelist.tsv b/nemo_text_processing/inverse_text_normalization/hi/data/whitelist/whitelist.tsv index f9eb081b9..8cfd0e19f 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/data/whitelist/whitelist.tsv +++ b/nemo_text_processing/inverse_text_normalization/hi/data/whitelist/whitelist.tsv @@ -1,13 +1,7 @@ १/४ पाव -१/२ आधा -३/४ पौन -१:३० डेढ़ बजे -२:३० ढाई बजे -१.५ डेढ़ -२.५ ढाई कु. कुमारी स्मि. श्रीमती श्री. श्री श्री. श्रीमान मा. मास्टर -डॉ. डॉक्टर \ No newline at end of file +डॉ. डॉक्टर diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/cardinal.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/cardinal.py index f1e4da381..00e2eb94e 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/cardinal.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/cardinal.py @@ -44,12 +44,18 @@ def __init__(self, input_case: str = INPUT_LOWER_CASED): graph_zero = pynini.string_file(get_abs_path("data/numbers/zero.tsv")).invert() graph_digit = pynini.string_file(get_abs_path("data/numbers/digit.tsv")).invert() graph_teens_and_ties = pynini.string_file(get_abs_path("data/numbers/teens_and_ties.tsv")).invert() + graph_paune = pynini.string_file(get_abs_path("data/numbers/paune.tsv")).invert() + self.graph_digit = graph_digit + self.graph_single_digit_with_zero = pynutil.insert("०") + graph_digit + self.graph_teens_and_ties = graph_teens_and_ties self.graph_two_digit = graph_teens_and_ties | (pynutil.insert("०") + graph_digit) graph_hundred = pynini.cross("सौ", "") + delete_hundred = pynutil.delete("सौ") delete_thousand = pynutil.delete("हज़ार") | pynutil.delete("हजार") graph_hundred_component = pynini.union(graph_digit + delete_space + graph_hundred, pynutil.insert("०")) graph_hundred_component += delete_space graph_hundred_component += self.graph_two_digit | pynutil.insert("००") + graph_hundred_component_at_least_one_none_zero_digit = graph_hundred_component @ ( pynini.closure(NEMO_HI_DIGIT) + (NEMO_HI_DIGIT - "०") + pynini.closure(NEMO_HI_DIGIT) @@ -63,12 +69,22 @@ def __init__(self, input_case: str = INPUT_LOWER_CASED): graph_teens_and_ties + delete_space + graph_hundred, pynutil.insert("०") ) graph_hundred_as_thousand += delete_space - graph_hundred_as_thousand += self.graph_two_digit | pynutil.insert("००") - - self.graph_hundreds = graph_hundred_component | graph_hundred_as_thousand + graph_hundred_as_thousand += (self.graph_two_digit | pynutil.insert("००")) + graph_hundred_as_thousand |= pynutil.add_weight(pynutil.delete("साढ़े") + delete_space + graph_digit + pynutil.insert("५००", weight=-0.1) + delete_space + delete_thousand, -0.1) + graph_hundred_as_thousand |= pynutil.add_weight(pynutil.delete("सवा") + delete_space + graph_digit + pynutil.insert("२५०", weight=-0.1) + delete_space + delete_thousand, -0.1) + graph_hundred_as_thousand |= pynutil.add_weight(pynutil.delete("पौने") + delete_space + graph_paune + pynutil.insert("७५०", weight=-0.1) + delete_space + delete_thousand, -0.1) + graph_hundred_as_thousand |= pynutil.add_weight(pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़"))+ delete_space + pynutil.insert("१५००", weight=-0.1) + delete_space + delete_thousand, -0.1) + graph_hundred_as_thousand |= pynutil.add_weight(pynutil.delete("ढाई") + delete_space + pynutil.insert("२५००", weight=-0.1) + delete_space + delete_thousand, -0.1) + + graph_in_hundreds = pynutil.add_weight(pynutil.delete("साढ़े") + delete_space + (graph_digit | self.graph_two_digit) + pynutil.insert("५०", weight=-0.1) + delete_space + delete_hundred, -0.1) + graph_in_hundreds |= pynutil.add_weight(pynutil.delete("सवा") + delete_space + (graph_digit | self.graph_two_digit) + pynutil.insert("२५", weight=-0.1) + delete_space + delete_hundred, -0.1) + graph_in_hundreds |= pynutil.add_weight(pynutil.delete("पौने") + delete_space + graph_paune + pynutil.insert("७५", weight=-0.1) + delete_space + delete_hundred, -0.1) + graph_in_hundreds |= pynutil.add_weight(pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + pynutil.insert("१५०", weight=-0.1) + delete_space + delete_hundred, -0.1) + graph_in_hundreds |= pynutil.add_weight(pynutil.delete("ढाई") + delete_space + pynutil.insert("२५०", weight=-0.1) + delete_space + delete_hundred, -0.1) + self.graph_hundreds = graph_hundred_component | graph_hundred_as_thousand | graph_in_hundreds graph_teens_and_ties_component = pynini.union( - graph_teens_and_ties | pynutil.insert("00") + delete_space + (graph_digit | pynutil.insert("0")), + graph_teens_and_ties | pynutil.insert("००") + delete_space + (graph_digit | pynutil.insert("०")), ) graph_ties_component_at_least_one_none_zero_digit = self.graph_two_digit @ ( pynini.closure(NEMO_HI_DIGIT) + pynini.closure(NEMO_HI_DIGIT) @@ -77,7 +93,7 @@ def __init__(self, input_case: str = INPUT_LOWER_CASED): # %% Indian numeric format simple https://en.wikipedia.org/wiki/Indian_numbering_system # This only covers "standard format". - # Conventional format like thousand crores/lakh crores is yet to be implemented + # Conventional format like thousand crores/lakh crores is yet to be implemented graph_in_thousands = pynini.union( self.graph_two_digit + delete_space + delete_thousand, pynutil.insert("००", weight=0.1), ) @@ -132,6 +148,7 @@ def __init__(self, input_case: str = INPUT_LOWER_CASED): graph_no_prefix = pynutil.add_weight( pynini.cross("सौ", "१००") | pynini.cross("हज़ार", "१०००") + | pynini.cross ("हजार", "१०००") | pynini.cross("लाख", "१०००००") | pynini.cross("करोड़", "१०००००००"), 2, diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/date.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/date.py index 61183ae72..2e0d603d3 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/date.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/date.py @@ -35,21 +35,36 @@ class DateFst(GraphFst): date: DateFst """ - def __init__(self, cardinal: GraphFst): + def __init__(self, cardinal: GraphFst, ordinal: GraphFst): super().__init__(name="date", kind="classify") graph_year = pynutil.add_weight( pynini.compose(cardinal.graph_no_exception, pynini.closure(NEMO_HI_DIGIT, 1, 4)), 0.03 ) - + cardinal_graph = cardinal.graph_no_exception + month_graph = pynini.string_file(get_abs_path("data/date/months.tsv")) graph_date_days = pynini.string_file(get_abs_path("data/date/date_days.tsv")).invert() + graph_century = pynini.string_file(get_abs_path("data/date/century.tsv")).invert() + graph_morph_features = pynini.string_file(get_abs_path("data/ordinals/morph_features.tsv")) self.day = pynutil.insert("day: \"") + graph_date_days + pynutil.insert("\" ") self.month = pynutil.insert("month: \"") + month_graph + pynutil.insert("\" ") self.year = pynutil.insert("year: \"") + graph_year + pynutil.insert("\" ") - insert_comma = pynutil.insert(", ") - + self.year_range = ( + pynutil.insert("year: \"") + + graph_year + + delete_space + + pynini.cross("से", "-") + + delete_space + + graph_year + + delete_space + + pynutil.insert("\" ") + ) + self.century = pynutil.insert("text: \"") + graph_century + pynutil.insert("\" ") + self.ordinal_century = pynutil.insert("era: \"") + cardinal_graph + pynutil.insert("\" ") + self.morpho_graph = pynutil.insert("morphosyntactic_features: \"") + graph_morph_features + pynutil.insert("\"") + graph_day_month = self.day + delete_space + self.month graph_month_day = self.month + delete_space + self.day graph_month_day += pynutil.insert(" preserve_order: true") @@ -58,9 +73,33 @@ def __init__(self, cardinal: GraphFst): graph_month_day_year += pynutil.insert(" preserve_order: true") graph_month_year = self.month + delete_space + self.year graph_saal = self.year + graph_AD_BC = self.year + delete_space + self.century + graph_day_month_year_century = ( + self.day + delete_space + self.month + delete_space + self.year + delete_space + self.century + ) + graph_month_year_century = self.month + delete_space + self.year + delete_space + self.century + graph_year_range = self.year_range + graph_year_range_century = self.year_range + delete_space + self.century + + graph_ordinal_century = self.ordinal_century + self.morpho_graph + delete_extra_space + self.century + + graph_date_exceptions = self.month + delete_space + pynutil.delete("की") + delete_space + self.day + graph_date_exceptions += pynutil.insert("preserve_order: true") - graph = graph_day_month | graph_month_day | graph_day_month_year | graph_month_day_year | graph_month_year - self.graph = graph.optimize() - + graph = ( + graph_day_month + | graph_month_day + | graph_day_month_year + | graph_month_day_year + | graph_month_year + | graph_saal + | graph_AD_BC + | graph_day_month_year_century + | graph_month_year_century + | graph_year_range + | graph_year_range_century + | graph_ordinal_century + | graph_date_exceptions + ) final_graph = self.add_tokens(graph) self.fst = final_graph diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/fraction.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/fraction.py index 56b2c63e3..124a457b2 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/fraction.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/fraction.py @@ -16,13 +16,13 @@ import pynini from pynini.lib import pynutil -from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path -from nemo_text_processing.text_normalization.en.graph_utils import ( +from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path, apply_fst +from nemo_text_processing.text_normalization.hi.graph_utils import ( INPUT_CASED, INPUT_LOWER_CASED, MIN_NEG_WEIGHT, MINUS, - NEMO_DIGIT, + NEMO_HI_DIGIT, NEMO_SIGMA, TO_LOWER, GraphFst, @@ -59,9 +59,26 @@ def __init__(self, cardinal: GraphFst): numerator = pynutil.insert("numerator: \"") + graph_cardinal + pynutil.insert("\"") denominator = pynutil.insert(" denominator: \"") + graph_cardinal + pynutil.insert("\"") + graph_fraction = numerator + delete_bata + denominator + graph_mixed_fraction = integer + delete_extra_space + pynutil.delete("सही") + delete_space + graph_fraction + + graph_saade = pynutil.add_weight(pynutil.delete("साढ़े") + delete_space + integer + pynutil.insert("numerator: \"१\"") + delete_space + pynutil.insert(" denominator: \"२\""), -0.01) + graph_sava = pynutil.add_weight(pynutil.delete("सवा") + delete_space + integer + pynutil.insert("numerator: \"१\"") + delete_space + pynutil.insert(" denominator: \"४\""), -0.001) + graph_paune = pynutil.add_weight(pynutil.delete("पौने") + delete_space + integer + pynutil.insert("numerator: \"३\"") + delete_space + pynutil.insert(" denominator: \"४\""), -0.01) + graph_dedh = pynutil.add_weight(pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + pynutil.insert("integer_part: \"१\"") + pynutil.insert(" numerator: \"१\"") + delete_space + pynutil.insert(" denominator: \"२\""), -0.01) + graph_dhaai = pynutil.add_weight(pynutil.delete("ढाई") + delete_space + pynutil.insert("integer_part: \"२\"") + pynutil.insert(" numerator: \"१\"") + delete_space + pynutil.insert(" denominator: \"२\""), -0.1) + + graph_aadha_and_saade_only = pynini.union(pynutil.delete("आधा") | pynutil.delete("साढ़े")) + delete_space + pynutil.insert(" numerator: \"१\"") + delete_space + pynutil.insert(" denominator: \"२\"") + graph_sava_only = pynutil.delete("सवा") + delete_space + pynutil.insert(" numerator: \"१\"") + delete_space + pynutil.insert(" denominator: \"४\"") + graph_paune_only = pynini.union(pynutil.delete("पौन") | pynutil.delete("पौना")) + delete_space + pynutil.insert("numerator: \"३\"") + delete_space + pynutil.insert(" denominator: \"४\"") + + graph_tihaai = numerator + delete_space + pynutil.delete("तिहाई") + delete_space + pynutil.insert(" denominator: \"३\"") + graph_chauthaai = numerator + delete_space + pynutil.delete("चौथाई") + delete_space + pynutil.insert(" denominator: \"४\"") + + graph_quarterly_exceptions = graph_saade | graph_sava | graph_paune | graph_dedh | graph_dhaai | graph_aadha_and_saade_only | graph_sava_only | graph_paune_only | graph_tihaai | graph_chauthaai - graph = graph_fraction + graph = graph_fraction | graph_mixed_fraction | graph_quarterly_exceptions self.graph = graph.optimize() self.final_graph_wo_negative = graph optional_graph_negative = pynini.closure( diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/measure.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/measure.py index d7e9ba562..fbb66decf 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/measure.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/measure.py @@ -23,7 +23,7 @@ delete_space, insert_space, ) -from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path +from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path, apply_fst class MeasureFst(GraphFst): @@ -49,7 +49,20 @@ def __init__(self, cardinal: GraphFst, decimal: GraphFst): ) measurements_graph = pynini.string_file(get_abs_path("data/measure/measurements.tsv")).invert() + paune_graph = pynini.string_file(get_abs_path("data/numbers/paune.tsv")).invert() + self.measurements = pynutil.insert("units: \"") + measurements_graph + pynutil.insert("\" ") + graph_integer = pynutil.insert("integer_part: \"") + cardinal_graph + pynutil.insert("\"") + graph_integer_paune = pynutil.insert("integer_part: \"") + paune_graph + pynutil.insert("\"") + + graph_saade_single_digit = pynutil.add_weight(pynutil.delete("साढ़े") + delete_space + graph_integer + delete_space + pynutil.insert(" fractional_part: \"५\""), 0.1) + graph_sava_single_digit = pynutil.add_weight(pynutil.delete("सवा") + delete_space + graph_integer + delete_space + pynutil.insert(" fractional_part: \"२५\""), 0.1) + graph_paune_single_digit = pynutil.add_weight(pynutil.delete("पौने") + delete_space + graph_integer_paune + delete_space + pynutil.insert(" fractional_part: \"७५\""), 1) + graph_dedh_single_digit = pynutil.add_weight(pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + pynutil.insert("integer_part: \"१\"") + delete_space + pynutil.insert(" fractional_part: \"५\""), 0.1) + graph_dhaai_single_digit = pynutil.add_weight(pynutil.delete("ढाई") + delete_space + pynutil.insert("integer_part: \"२\"") + delete_space + pynutil.insert(" fractional_part: \"५\""), 1) + + graph_exceptions = graph_saade_single_digit | graph_sava_single_digit | graph_paune_single_digit | graph_dedh_single_digit | graph_dhaai_single_digit + graph_measurements = ( pynutil.insert("decimal { ") @@ -69,8 +82,30 @@ def __init__(self, cardinal: GraphFst, decimal: GraphFst): + delete_extra_space + self.measurements ) - - graph = graph_measurements + graph_quarterly_measurements = ( + pynutil.insert("decimal { ") + + optional_graph_negative + + graph_exceptions + + pynutil.insert(" }") + + delete_extra_space + + self.measurements + ) + graph_exception_bai = ( + pynutil.insert("cardinal { ") + + optional_graph_negative + + pynutil.insert("integer: \"") + + cardinal_graph + + delete_space + + pynini.cross("बाई", "x") + + delete_space + + cardinal_graph + + pynutil.insert("\"") + + pynutil.insert(" }") + + pynini.closure(delete_extra_space + + self.measurements) + ) + + graph = graph_measurements | graph_quarterly_measurements | graph_exception_bai self.graph = graph.optimize() final_graph = self.add_tokens(graph) diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/money.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/money.py index 7fa59ee26..6ca21e2d6 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/money.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/money.py @@ -21,7 +21,7 @@ delete_space, insert_space, ) -from nemo_text_processing.inverse_text_normalization.hi.utils import apply_fst, get_abs_path +from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path class MoneyFst(GraphFst): @@ -40,14 +40,22 @@ def __init__(self, cardinal: GraphFst, decimal: GraphFst): super().__init__(name="money", kind="classify") cardinal_graph = cardinal.graph_no_exception + cardinal_single_and_double_digit_graph = cardinal.graph_digit | cardinal.graph_teens_and_ties decimal_graph = decimal.final_graph_wo_negative currency_graph = pynini.string_file(get_abs_path("data/money/currency.tsv")).invert() + paune_graph = pynini.string_file(get_abs_path("data/numbers/paune.tsv")).invert() self.integer = pynutil.insert("integer_part: \"") + cardinal_graph + pynutil.insert("\"") + self.integer_quarterly_measures = pynutil.insert("integer_part: \"") + cardinal_single_and_double_digit_graph + self.integer_paune = pynutil.insert("integer_part: \"") + paune_graph self.paise = pynutil.insert("fractional_part: \"") + cardinal_graph + pynutil.insert("\"") self.fraction = decimal_graph self.currency = pynutil.insert("currency: \"") + currency_graph + pynutil.insert("\" ") aur = pynutil.delete("और") + delete_hundred = pynutil.delete("सौ") + delete_lakh = pynutil.delete("लाख") + delete_hazar = pynutil.delete("हजार") | pynutil.delete("हज़ार") + delete_crore = pynutil.delete("करोड़") | pynutil.delete("करोड़") graph_currency_decimal = self.fraction + delete_extra_space + self.currency graph_currency_cardinal = self.integer + delete_extra_space + self.currency @@ -60,8 +68,39 @@ def __init__(self, cardinal: GraphFst, decimal: GraphFst): + delete_extra_space + pynutil.delete(currency_graph) ) - - graph = graph_currency_decimal | graph_currency_cardinal | graph_rupay_and_paisa + #cases for saade,sava with teens and ties + graph_saade_teens_ties = pynutil.delete("साढ़े") + delete_space + self.integer_quarterly_measures + pynutil.insert("\"") + delete_space + pynutil.insert(" fractional_part: \"५०\"") + delete_extra_space + self.currency + graph_sava_teens_ties = pynutil.delete("सवा") + delete_space + self.integer_quarterly_measures + pynutil.insert("\"") + delete_space + pynutil.insert(" fractional_part: \"२५\"") + delete_extra_space + self.currency + graph_dedh = pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + pynutil.insert("integer_part: \"१\"") + delete_space + pynutil.insert(" fractional_part: \"५०\"") + delete_extra_space + self.currency + graph_dhaai = pynutil.delete("ढाई") + delete_space + pynutil.insert("integer_part: \"२\"") + delete_space + pynutil.insert(" fractional_part: \"५०\"") + delete_extra_space + self.currency + + graph_exceptions_teens_ties = graph_saade_teens_ties | graph_sava_teens_ties | graph_dedh | graph_dhaai + + #cases for saade,sava,paune,dedh and dhaai with hundreds and thousands + graph_exceptions = self.integer + delete_extra_space + self.currency + + #exceptions with lakhs + graph_saade_lakh = pynutil.add_weight(pynutil.delete("साढ़े") + delete_space + self.integer_quarterly_measures + delete_space + pynutil.insert("५००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_lakh + delete_extra_space + self.currency, 0.01) + graph_sava_lakh = pynutil.add_weight(pynutil.delete("सवा") + delete_space + self.integer_quarterly_measures + delete_space + pynutil.insert("२५०००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_lakh + delete_extra_space + self.currency, 0.01) + graph_paune_lakh = pynutil.delete("पौने") + delete_space + self.integer_paune + delete_space + pynutil.insert("७५०००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_lakh + delete_extra_space + self.currency + graph_dedh_lakh = pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + pynutil.insert("integer_part: \"") + pynutil.insert("१५००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_lakh + delete_extra_space + self.currency + graph_dhaai_lakh = pynutil.delete("ढाई") + delete_space + pynutil.insert("integer_part: \"") + pynutil.insert("२५००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_lakh + delete_extra_space + self.currency + + graph_exceptions_lakhs = graph_saade_lakh | graph_sava_lakh | graph_paune_lakh | graph_dedh_lakh | graph_dhaai_lakh + + # exceptions with crores + graph_saade_crore = pynutil.delete("साढ़े") + delete_space + self.integer_quarterly_measures + delete_space + pynutil.insert("५००००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_crore + delete_extra_space + self.currency + graph_sava_crore = pynutil.delete("सवा") + delete_space + self.integer_quarterly_measures + delete_space + pynutil.insert("२५०००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_crore + delete_extra_space + self.currency + graph_paune_crore = pynutil.delete("पौने") + delete_space + self.integer_paune + delete_space + pynutil.insert("७५०००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_crore + delete_extra_space + self.currency + graph_dhaai_crore = pynutil.delete("ढाई") + delete_space + pynutil.insert("integer_part: \"") + pynutil.insert("२५००००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_crore + delete_extra_space + self.currency + graph_dedh_crore = pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + pynutil.insert("integer_part: \"") + pynutil.insert("१५००००००", weight=-0.1) + pynutil.insert("\"") + delete_space + delete_crore + delete_extra_space + self.currency + + graph_exceptions_crores = graph_saade_crore | graph_sava_crore | graph_paune_crore | graph_dedh_crore | graph_dhaai_crore + + + graph_quarterly_measures = graph_exceptions_teens_ties | graph_exceptions | graph_exceptions_lakhs | graph_exceptions_crores + + graph = graph_currency_decimal | graph_currency_cardinal | graph_rupay_and_paisa | graph_quarterly_measures self.graph = graph.optimize() final_graph = self.add_tokens(graph) diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/ordinal.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/ordinal.py index d6f4d59ac..473055891 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/ordinal.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/ordinal.py @@ -83,5 +83,6 @@ def __init__(self, cardinal: GraphFst): rule = pynini.cdrewrite(morpho_graph, pynini.closure(NEMO_HI_DIGIT), pynini.union("[EOS]", " "), NEMO_SIGMA) final_graph = pynutil.insert("integer: \"") + graph @ rule - final_graph = self.add_tokens(final_graph) + self.final_graph = self.add_tokens(final_graph) + final_graph = self.final_graph self.fst = final_graph.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/telephone.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/telephone.py new file mode 100644 index 000000000..b1b34c9fb --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/telephone.py @@ -0,0 +1,171 @@ +# Copyright (c) 2025, 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 pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.hi.graph_utils import GraphFst, delete_space +from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path, load_column_from_tsv + + +class TelephoneFst(GraphFst): + """ + Finite state transducer for classifying telephone numbers, e.g. + e.g. प्लस इक्यानवे नौ आठ सात छह पांच चार तीन दो एक शून्य => tokens { name: "+९१ ९८७६५ ४३२१०" } + + Args: + Cardinal: CardinalFst + """ + + def __init__(self, cardinal: GraphFst): + super().__init__(name="telephone", kind="classify") + eng_to_hin_digit_graph = pynini.string_file(get_abs_path("data/telephone/eng_to_hindi_digit.tsv")).invert() + hin_word_to_digit_graph = pynini.string_file(get_abs_path("data/numbers/digit.tsv")).invert() + hin_word_to_digit_graph |= pynini.string_file(get_abs_path("data/numbers/zero.tsv")).invert() + digit = eng_to_hin_digit_graph | hin_word_to_digit_graph + + eng_word_to_hin_std_graph = pynini.string_file(get_abs_path("data/telephone/STD_codes_eng.tsv")).invert() + hin_word_to_hin_std_graph = pynini.string_file(get_abs_path("data/telephone/STD_codes_hin.tsv")).invert() + words_to_hin_std_graph = eng_word_to_hin_std_graph | hin_word_to_hin_std_graph + + graph_eng_stds = load_column_from_tsv(get_abs_path("data/telephone/STD_codes_eng.tsv")) + graph_hin_stds = load_column_from_tsv(get_abs_path("data/telephone/STD_codes_hin.tsv")) + graph_valid_stds = graph_eng_stds + graph_hin_stds + + graph_eng_valid_landline_start_digits = load_column_from_tsv(get_abs_path("data/telephone/landline_operator_digits_eng.tsv")) + graph_hin_valid_landline_start_digits = load_column_from_tsv(get_abs_path("data/telephone/landline_operator_digits_hin.tsv")) + graph_valid_landline_start_digits = graph_eng_valid_landline_start_digits + graph_hin_valid_landline_start_digits + + landline_start_digits = pynini.union(*graph_valid_landline_start_digits) + landline_start_digit = (landline_start_digits @ digit) + delete_space + + two_digit_std = pynini.union(*list(filter(lambda x: len(x.split())==2, graph_valid_stds))) + two_digit_graph = ( + (pynutil.insert("extension: \"") + (two_digit_std @ words_to_hin_std_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + landline_start_digit + pynini.closure((digit + delete_space), 7, 7) + pynutil.insert("\" ")) + ).optimize() + + three_digit_std = pynini.union(*list(filter(lambda x: len(x.split())==3, graph_valid_stds))) + three_digit_std_graph = ( + (pynutil.insert("extension: \"") + (three_digit_std @ words_to_hin_std_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + landline_start_digit + pynini.closure((digit + delete_space), 6, 6) + pynutil.insert("\" ")) + ).optimize() + + four_digit_std = pynini.union(*list(filter(lambda x: len(x.split())==4, graph_valid_stds))) + four_digit_std_graph = ( + (pynutil.insert("extension: \"") + (four_digit_std @ words_to_hin_std_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + landline_start_digit + pynini.closure((digit + delete_space), 5, 5) + pynutil.insert("\" ")) + ).optimize() + + five_digit_std = pynini.union(*list(filter(lambda x: len(x.split())==5, graph_valid_stds))) + five_digit_std_graph = ( + (pynutil.insert("extension: \"") + (five_digit_std @ words_to_hin_std_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + landline_start_digit + pynini.closure((digit + delete_space), 4, 4) + pynutil.insert("\" ")) + ).optimize() + + six_digit_std = pynini.union(*list(filter(lambda x: len(x.split())==6, graph_valid_stds))) + six_digit_std_graph = ( + (pynutil.insert("extension: \"") + (six_digit_std @ words_to_hin_std_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + landline_start_digit + pynini.closure((digit + delete_space), 3, 3) + pynutil.insert("\" ")) + ).optimize() + + seven_digit_std = pynini.union(*list(filter(lambda x: len(x.split())==7, graph_valid_stds))) + seven_digit_std_graph = ( + (pynutil.insert("extension: \"") + (seven_digit_std @ words_to_hin_std_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + landline_start_digit + pynini.closure((digit + delete_space), 2, 2) + pynutil.insert("\" ")) + ).optimize() + + delete_zero = pynini.union( + pynutil.delete("शून्य") | pynutil.delete("zero") | pynutil.delete("Zero") | pynutil.delete("ZERO") + ) + + graph_landline = pynutil.add_weight(delete_zero + delete_space + (two_digit_graph | three_digit_std_graph | four_digit_std_graph | five_digit_std_graph | six_digit_std_graph | seven_digit_std_graph), -100) + + + #mobile numbers + eng_word_to_hin_country_graph = pynini.string_file(get_abs_path("data/telephone/country_codes_eng.tsv")).invert() + hin_word_to_hin_country_graph = pynini.string_file(get_abs_path("data/telephone/country_codes_hin.tsv")).invert() + words_to_hin_country_graph = eng_word_to_hin_country_graph | hin_word_to_hin_country_graph + + graph_eng_country_code = load_column_from_tsv(get_abs_path("data/telephone/country_codes_eng.tsv")) + graph_hin_country_code = load_column_from_tsv(get_abs_path("data/telephone/country_codes_hin.tsv")) + graph_valid_country_code = graph_eng_country_code + graph_hin_country_code + + graph_eng_valid_mobile_start_digits = load_column_from_tsv(get_abs_path("data/telephone/mobile_operator_digits_eng.tsv")) + graph_hin_valid_mobile_start_digits = load_column_from_tsv(get_abs_path("data/telephone/mobile_operator_digits_hin.tsv")) + graph_valid_mobile_start_digits = graph_eng_valid_mobile_start_digits + graph_hin_valid_mobile_start_digits + + mobile_start_digits = pynini.union(*graph_valid_mobile_start_digits) + mobile_start_digit = (mobile_start_digits @ digit) + delete_space + + country_code = pynini.union(*list(filter(lambda x: len(x.split())==2, graph_valid_country_code))) + country_code_graph = ( + (pynutil.insert("country_code: \"") + (country_code @ words_to_hin_country_graph) + pynutil.insert("\" ")) + + delete_space + + (pynutil.insert("number_part: \"") + mobile_start_digit + pynini.closure((digit + delete_space), 9, 9) + pynutil.insert("\" ")) + ).optimize() + mobile_graph = ( + (pynutil.insert("number_part: \"") + mobile_start_digit + pynini.closure((digit + delete_space), 9, 9) + pynutil.insert("\" ")) + ).optimize() + + delete_plus = pynini.union( + pynutil.delete("प्लस") | pynutil.delete("plus") | pynutil.delete("Plus") | pynutil.delete("PLUS") + ) + + graph_mobile = pynutil.add_weight(delete_plus + delete_space + country_code_graph, -100) + graph_mobile |= pynutil.add_weight(mobile_graph, -100) + + + #Pincode + self.pincode_hindi = ( + pynutil.insert("number_part: \"") + + pynini.closure(hin_word_to_digit_graph + delete_space, 0, 5) + + hin_word_to_digit_graph + + pynutil.insert("\" ") + ) + self.pincode_english = ( + pynutil.insert("number_part: \"") + + pynini.closure(eng_to_hin_digit_graph + delete_space, 0, 5) + + eng_to_hin_digit_graph + + pynutil.insert("\" ") + ) + + graph_pincode = self.pincode_hindi | self.pincode_english + + + #last digits of credit card + self.credit_card_last_digits_hindi = ( + pynutil.insert("number_part: \"") + + pynini.closure(hin_word_to_digit_graph + delete_space, 0, 3) + + hin_word_to_digit_graph + + pynutil.insert("\" ") + ) + self.credit_card_last_digits_english = ( + pynutil.insert("number_part: \"") + + pynini.closure(eng_to_hin_digit_graph + delete_space, 0, 3) + + eng_to_hin_digit_graph + + pynutil.insert("\" ") + ) + + graph_credit_card_last_digits = self.credit_card_last_digits_hindi | self.credit_card_last_digits_english + + graph = graph_landline | graph_mobile | graph_pincode | graph_credit_card_last_digits + final_graph = self.add_tokens(graph) + self.fst = final_graph diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/telephone_trial.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/telephone_trial.py new file mode 100644 index 000000000..e90a7f97c --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/telephone_trial.py @@ -0,0 +1,163 @@ +# Copyright (c) 2025, 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 pynini +from pynini.lib import pynutil + +from nemo_text_processing.inverse_text_normalization.hi.graph_utils import ( + DEVANAGARI_DIGIT, + integer_to_devanagari, + GraphFst, + delete_space, + insert_space, +) +from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path, load_column_from_tsv, apply_fst + + +class TelephoneFst(GraphFst): + """ + Finite state transducer for classifying telephone numbers, e.g. + e.g. प्लस नौ एक नौ आठ सात छह पांच चार तीन दो एक शून्य => tokens { name: "+९१ ९८७६५ ४३२१०" } + + Args: + Cardinal: CardinalFst + """ + + def __init__(self, cardinal: GraphFst): + super().__init__(name="telephone", kind="classify") + + english_digit_graph = pynini.string_file(get_abs_path("data/telephone/eng_to_hindi_digit.tsv")).invert() + hindi_digit_graph = cardinal.graph_digit | cardinal.graph_zero + digit = english_digit_graph | hindi_digit_graph + + std_tier1_hin_code = pynini.string_file(get_abs_path("data/telephone/std_tier1_hin.tsv")).invert() + std_tier1_eng_code = pynini.string_file(get_abs_path("data/telephone/std_tier1_eng.tsv")).invert() + tier1_code_graph = std_tier1_hin_code | std_tier1_eng_code + + std_tier1_hin = load_column_from_tsv(get_abs_path("data/telephone/std_tier1_hin.tsv")) + std_tier1_eng = load_column_from_tsv(get_abs_path("data/telephone/std_tier1_eng.tsv")) + std_tier1_graph = std_tier1_hin + std_tier1_eng + + allowed_start_hindi_landline = pynini.union("दो", "तीन", "चार", "छः", "छह", "छे") + landline_start_hindi_graph = allowed_start_hindi_landline @ hindi_digit_graph + allowed_start_english_landline = pynini.union("two", "three", "four", "six") + landline_start_english_graph = allowed_start_english_landline @ english_digit_graph + landline_start_digit = landline_start_hindi_graph + landline_start_english_graph + + graph_valid_landline_start_digit = pynini.union(*landline_start_digit) + graph_landline_start_digit = (graph_valid_landline_start_digit @ digit) + delete_space + + tier1_std = pynini.union(*list(filter(lambda x: len(x.split()) == 2, std_tier1_graph))) + two_digit_graph = ( + (pynutil.insert("extension: \"") + (tier1_std @ tier1_code_graph) + pynutil.insert("\" ")) + + delete_space + + ( + pynutil.insert("number_part: \"") + + graph_landline_start_digit + + pynini.closure((digit + delete_space), 7, 7) + + pynutil.insert("\" ") + ) + ).optimize() + + self.city_code = ( + pynutil.insert("extension: \"") + + pynini.closure(digit + delete_space, 3, 3) + + pynutil.insert("\" ") + ) + + self.landline_hindi = ( + pynutil.insert("number_part: \"") + + landline_start_hindi_graph + delete_space + + pynini.closure(hindi_digit_graph + delete_space, 6, 6) + + pynutil.insert("\" ") + ) + self.landline_english = ( + pynutil.insert("number_part: \"") + + landline_start_english_graph + delete_space + + pynini.closure(english_digit_graph + delete_space, 6, 6) + + pynutil.insert("\" ") + ) + self.landline = self.landline_hindi | self.landline_english + + delete_zero = pynini.union( + pynutil.delete("शून्य") | pynutil.delete("zero") | pynutil.delete("Zero") | pynutil.delete("ZERO") + ) + + #mobile numbers + country_code_hindi = cardinal.graph_digit | cardinal.graph_zero + country_code_english = pynini.string_file(get_abs_path("data/telephone/eng_to_hindi_digit.tsv")).invert() + country_code = country_code_hindi | country_code_english + + allowed_start_hindi_mobile = pynini.union("छः", "छह", "छे", "सात", "आठ", "नौ") + mobile_start_hindi_graph = allowed_start_hindi_mobile @ hindi_digit_graph + allowed_start_english_mobile = pynini.union("six", "seven", "eight", "nine") + mobile_start_english_graph = allowed_start_english_mobile @ english_digit_graph + + self.country_code_hindi = ( + pynutil.insert("country_code: \"") + + pynini.closure(country_code_hindi + delete_space, 0, 2) + + pynutil.insert("\" ") + ) + self.country_code_english = ( + pynutil.insert("country_code: \"") + + pynini.closure(country_code_english + delete_space, 0, 2) + + pynutil.insert("\" ") + ) + + self.hindi_digit = ( + pynutil.insert("number_part: \"") + + mobile_start_hindi_graph + delete_space + + pynini.closure(digit + delete_space, 0, 9) + + hindi_digit_graph + + pynutil.insert("\" ") + ) + self.english_digit = ( + pynutil.insert("number_part: \"") + + mobile_start_english_graph + delete_space + + pynini.closure(digit + delete_space, 0, 9) + + english_digit_graph + + pynutil.insert("\" ") + ) + + delete_plus = pynini.union( + pynutil.delete("प्लस") | pynutil.delete("plus") | pynutil.delete("Plus") | pynutil.delete("PLUS") + ) + + graph_landline_tier1 = delete_zero + delete_space + two_digit_graph + + graph_landline = delete_zero + delete_space + self.city_code + delete_space + self.landline + + graph_mobile_hindi = delete_plus + delete_space + self.country_code_hindi + delete_space + self.hindi_digit + graph_mobile_hindi |= self.hindi_digit + graph_mobile_english = delete_plus + delete_space + self.country_code_english + delete_space + self.english_digit + graph_mobile_english |= self.english_digit + + graph_mobile = graph_mobile_hindi | graph_mobile_english + + graph = graph_landline_tier1 | graph_landline | graph_mobile + final_graph = self.add_tokens(graph) + self.fst = final_graph + +from nemo_text_processing.inverse_text_normalization.hi.taggers.cardinal import CardinalFst +cardinal = CardinalFst() +telephone = TelephoneFst(cardinal) +#input_text = "zero eight nine one six nine four one one one two" +#input_text = "plus nine one nine four nine one six one one one seven seven" +#input_text = "nine four nine one six one one one seven seven" +input_text = "शून्य आठ शून्य दो नौ चार एक एक एक दो एक" #- tier 1 city (not yet implemented) +#input_text = "प्लस नौ एक नौ आठ सात छह पांच चार तीन दो एक शून्य" +#input_text = "नौ आठ सात छह पांच चार तीन दो एक शून्य" +#input_text = "शून्य दो चार शून्य तीन सात एक चार पांच चार तीन" +output = apply_fst(input_text, telephone.fst) +print(output) diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/time.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/time.py index ac539966d..af30b6612 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/time.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/time.py @@ -15,7 +15,7 @@ import pynini from pynini.lib import pynutil -from nemo_text_processing.inverse_text_normalization.hi.graph_utils import GraphFst, delete_space, insert_space +from nemo_text_processing.inverse_text_normalization.hi.graph_utils import GraphFst, delete_space, insert_space, delete_extra_space from nemo_text_processing.inverse_text_normalization.hi.utils import get_abs_path @@ -29,12 +29,12 @@ class TimeFst(GraphFst): time: TimeFst """ - def __init__(self): + def __init__(self, cardinal: GraphFst): super().__init__(name="time", kind="classify") - + hour_graph = pynini.string_file(get_abs_path("data/time/hour.tsv")).invert() - minute_graph = pynini.string_file(get_abs_path("data/time/minute_and_second.tsv")).invert() - second_graph = pynini.string_file(get_abs_path("data/time/minute_and_second.tsv")).invert() + cardinal_graph = cardinal.graph_single_digit_with_zero | cardinal.graph_teens_and_ties + paune_hour_graph = pynini.string_file(get_abs_path("data/time/hour_for_paune.tsv")).invert() delete_baje = pynini.union( pynutil.delete("बजके") | pynutil.delete("बजकर") | pynutil.delete("बजे") | pynutil.delete("घंटा") @@ -44,8 +44,9 @@ def __init__(self): delete_second = pynutil.delete("सेकंड") self.hour = pynutil.insert("hours: \"") + hour_graph + pynutil.insert("\" ") - self.minute = pynutil.insert("minutes: \"") + minute_graph + pynutil.insert("\" ") - self.second = pynutil.insert("seconds: \"") + second_graph + pynutil.insert("\" ") + self.paune_hour = pynutil.insert("hours: \"") + paune_hour_graph + pynutil.insert("\" ") + self.minute = pynutil.insert("minutes: \"") + cardinal_graph + pynutil.insert("\" ") + self.second = pynutil.insert("seconds: \"") + cardinal_graph + pynutil.insert("\" ") # hour minute second graph_hms = ( @@ -63,17 +64,18 @@ def __init__(self): ) # hour minute and hour minute without "baje and minat" - graph_hm = ( + graph_hm = pynutil.add_weight( self.hour + delete_space + pynini.closure(delete_baje, 0, 1) + delete_space + self.minute + pynini.closure(delete_space + delete_minute, 0, 1) + , 0.01 ) # hour second - graph_hs = self.hour + delete_space + delete_baje + delete_space + self.second + delete_space + delete_second + graph_hs = pynutil.add_weight(self.hour + delete_space + delete_baje + delete_space + self.second + delete_space + delete_second, 0.01) # minute second graph_ms = ( @@ -82,8 +84,16 @@ def __init__(self): # hour graph_hour = self.hour + delete_space + delete_baje + + graph_saade = pynutil.add_weight(pynutil.delete("साढ़े") + delete_space + self.hour + delete_space + pynutil.insert(" minutes: \"३०\"") + delete_space + pynini.closure(delete_baje), 0.01) + graph_sava = pynutil.add_weight(pynutil.delete("सवा") + delete_space + self.hour + delete_space + pynutil.insert(" minutes: \"१५\"") + delete_space + pynini.closure(delete_baje), 0.01) + graph_paune = pynutil.add_weight(pynutil.delete("पौने") + delete_space + self.paune_hour + delete_space + pynutil.insert(" minutes: \"४५\"") + delete_space + pynini.closure(delete_baje), 0.01) + graph_dedh = pynutil.add_weight(pynini.union(pynutil.delete("डेढ़") | pynutil.delete("डेढ़")) + delete_space + delete_baje + pynutil.insert("hours: \"१\"") + delete_space + pynutil.insert(" minutes: \"३०\""), 0.01) + graph_dhaai = pynutil.add_weight(pynutil.delete("ढाई") + delete_space + delete_baje + pynutil.insert("hours: \"२\"") + delete_space + pynutil.insert(" minutes: \"३०\""), 0.01) + graph_quarterly_measures = (graph_dedh | graph_dhaai | ((graph_saade | graph_sava | graph_paune) + pynini.closure(delete_space + delete_baje))) + - graph = graph_hms | graph_hm | graph_hs | graph_ms | graph_hour + graph = graph_hms | graph_hm | graph_hs | graph_ms | graph_hour | graph_quarterly_measures self.graph = graph.optimize() final_graph = self.add_tokens(graph) diff --git a/nemo_text_processing/inverse_text_normalization/hi/taggers/tokenize_and_classify.py b/nemo_text_processing/inverse_text_normalization/hi/taggers/tokenize_and_classify.py index a5a371d90..288185b6e 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/taggers/tokenize_and_classify.py +++ b/nemo_text_processing/inverse_text_normalization/hi/taggers/tokenize_and_classify.py @@ -1,5 +1,4 @@ # Copyright (c) 2024, 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. @@ -15,16 +14,19 @@ import logging import os +import time import pynini from pynini.lib import pynutil -from nemo_text_processing.inverse_text_normalization.hi.graph_utils import ( +from nemo_text_processing.text_normalization.hi.graph_utils import ( + NEMO_WHITE_SPACE, GraphFst, delete_extra_space, delete_space, generator_main, ) + from nemo_text_processing.inverse_text_normalization.hi.taggers.cardinal import CardinalFst from nemo_text_processing.inverse_text_normalization.hi.taggers.date import DateFst from nemo_text_processing.inverse_text_normalization.hi.taggers.decimal import DecimalFst @@ -33,80 +35,147 @@ from nemo_text_processing.inverse_text_normalization.hi.taggers.money import MoneyFst from nemo_text_processing.inverse_text_normalization.hi.taggers.ordinal import OrdinalFst from nemo_text_processing.inverse_text_normalization.hi.taggers.punctuation import PunctuationFst +from nemo_text_processing.inverse_text_normalization.hi.taggers.telephone import TelephoneFst from nemo_text_processing.inverse_text_normalization.hi.taggers.time import TimeFst from nemo_text_processing.inverse_text_normalization.hi.taggers.whitelist import WhiteListFst from nemo_text_processing.inverse_text_normalization.hi.taggers.word import WordFst - class ClassifyFst(GraphFst): """ - Final class that composes all other classification grammars. This class can process an entire sentence, that is lower cased. + Final class that composes all other classification grammars. This class can process an entire sentence including punctuation. For deployment, this grammar will be compiled and exported to OpenFst Finite State Archive (FAR) File. More details to deployment at NeMo/tools/text_processing_deployment. - + Args: input_case: accepting either "lower_cased" or "cased" input. + deterministic: if True will provide a single transduction option, + for False multiple options (used for audio-based normalization) cache_dir: path to a dir with .far grammar file. Set to None to avoid using cache. overwrite_cache: set to True to overwrite .far files whitelist: path to a file with whitelist replacements """ def __init__( - self, cache_dir: str = None, overwrite_cache: bool = False, whitelist: str = None, input_case: str = None, + self, + input_case: str, + deterministic: bool = True, + cache_dir: str = None, + overwrite_cache: bool = False, + whitelist: str = None, ): - super().__init__(name="tokenize_and_classify", kind="classify") + super().__init__(name="tokenize_and_classify", kind="classify", deterministic=deterministic) 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, f"hi_itn.far") + whitelist_file = os.path.basename(whitelist) if whitelist else "" + far_file = os.path.join( + cache_dir, f"hi_tn_{deterministic}_deterministic_{input_case}_{whitelist_file}_tokenize.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 was restored from {far_file}.") + logging.info(f'ClassifyFst.fst was restored from {far_file}.') else: logging.info(f"Creating ClassifyFst grammars.") - cardinal = CardinalFst() + + start_time = time.time() + cardinal = CardinalFst(deterministic=deterministic) cardinal_graph = cardinal.fst + logging.debug(f"cardinal: {time.time() - start_time: .2f}s -- {cardinal_graph.num_states()} nodes") - ordinal = OrdinalFst(cardinal) - ordinal_graph = ordinal.fst - decimal = DecimalFst(cardinal) + start_time = time.time() + decimal = DecimalFst(cardinal=cardinal, deterministic=deterministic) decimal_graph = decimal.fst - fraction = FractionFst(cardinal) + logging.debug(f"decimal: {time.time() - start_time: .2f}s -- {decimal_graph.num_states()} nodes") + + start_time = time.time() + fraction = FractionFst(cardinal=cardinal, deterministic=deterministic) fraction_graph = fraction.fst - date = DateFst(cardinal) + logging.debug(f"fraction: {time.time() - start_time: .2f}s -- {fraction_graph.num_states()} nodes") + + start_time = time.time() + date = DateFst(cardinal=cardinal) date_graph = date.fst - time = TimeFst() - time_graph = time.fst - measure = MeasureFst(cardinal, decimal) + logging.debug(f"date: {time.time() - start_time: .2f}s -- {date_graph.num_states()} nodes") + + start_time = time.time() + timefst = TimeFst() + time_graph = timefst.fst + logging.debug(f"time: {time.time() - start_time: .2f}s -- {time_graph.num_states()} nodes") + + start_time = time.time() + measure = MeasureFst(cardinal=cardinal, decimal=decimal) measure_graph = measure.fst - money = MoneyFst(cardinal, decimal) + logging.debug(f"measure: {time.time() - start_time: .2f}s -- {measure_graph.num_states()} nodes") + + start_time = time.time() + money = MoneyFst(cardinal=cardinal, decimal=decimal) money_graph = money.fst +<<<<<<< HEAD + telephone = TelephoneFst(cardinal) + telephone_graph = telephone.fst punct_graph = PunctuationFst().fst whitelist_graph = WhiteListFst().fst word_graph = WordFst().fst +======= + logging.debug(f"money: {time.time() - start_time: .2f}s -- {money_graph.num_states()} nodes") + + start_time = time.time() + whitelist_graph = WhiteListFst( + input_case=input_case, deterministic=deterministic, input_file=whitelist + ).fst + logging.debug(f"whitelist: {time.time() - start_time: .2f}s -- {whitelist_graph.num_states()} nodes") + + start_time = time.time() + punctuation = PunctuationFst(deterministic=deterministic) + punct_graph = punctuation.fst + logging.debug(f"punct: {time.time() - start_time: .2f}s -- {punct_graph.num_states()} nodes") +>>>>>>> 185bee1c (WIP: Changes made on hindi_2.0) classify = ( - pynutil.add_weight(cardinal_graph, 1.1) - | pynutil.add_weight(ordinal_graph, 1.1) + pynutil.add_weight(whitelist_graph, 1.01) + | pynutil.add_weight(cardinal_graph, 1.1) | pynutil.add_weight(decimal_graph, 1.1) | pynutil.add_weight(fraction_graph, 1.1) | pynutil.add_weight(date_graph, 1.1) | pynutil.add_weight(time_graph, 1.1) | pynutil.add_weight(measure_graph, 1.1) | pynutil.add_weight(money_graph, 1.1) +<<<<<<< HEAD + | pynutil.add_weight(telephone_graph, 1.1) | pynutil.add_weight(word_graph, 100) | pynutil.add_weight(whitelist_graph, 1.01) +======= +>>>>>>> 185bee1c (WIP: Changes made on hindi_2.0) + ) + + start_time = time.time() + word_graph = WordFst(punctuation=punctuation, deterministic=deterministic).fst + logging.debug(f"word: {time.time() - start_time: .2f}s -- {word_graph.num_states()} nodes") + + punct = pynutil.insert("tokens { ") + pynutil.add_weight(punct_graph, weight=2.1) + pynutil.insert(" }") + punct = pynini.closure( + pynini.compose(pynini.closure(NEMO_WHITE_SPACE, 1), delete_extra_space) + | (pynutil.insert(" ") + punct), + 1, ) - punct = pynutil.insert("tokens { ") + pynutil.add_weight(punct_graph, weight=1.1) + pynutil.insert(" }") + classify |= pynutil.add_weight(word_graph, 100) 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 = token_plus_punct + pynini.closure( + ( + pynini.compose(pynini.closure(NEMO_WHITE_SPACE, 1), delete_extra_space) + | (pynutil.insert(" ") + punct + pynutil.insert(" ")) + ) + + token_plus_punct + ) + graph = delete_space + graph + delete_space + graph |= punct self.fst = graph.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/hi/utils.py b/nemo_text_processing/inverse_text_normalization/hi/utils.py index 5e387b6e8..317112604 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/utils.py +++ b/nemo_text_processing/inverse_text_normalization/hi/utils.py @@ -61,3 +61,11 @@ def apply_fst(text, fst): print(pynini.shortestpath(text @ fst).string()) except pynini.FstOpError: print(f"Error: No valid output with given input: '{text}'") + + +def load_column_from_tsv(filepath, column_index=1): + """ + + """ + with open(filepath, encoding='utf-8') as tsv: + return [line.strip().split("\t")[column_index] for line in tsv if line.strip()] diff --git a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/date.py b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/date.py index 5442777da..f6285c254 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/date.py +++ b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/date.py @@ -30,7 +30,7 @@ class DateFst(GraphFst): date { day: "५" month: "जनवरी" year: "२०१२" preserve_order: true } -> ५ जनवरी २०१२ """ - def __init__(self): + def __init__(self, cardinal: GraphFst, ordinal: GraphFst): super().__init__(name="date", kind="verbalize") month = ( pynutil.delete("month:") @@ -61,22 +61,66 @@ def __init__(self): + pynini.closure(NEMO_NOT_QUOTE, 1) + pynutil.delete("\"") ) - graph_fy = period + delete_space + year + era = ( + pynutil.delete("era:") + + delete_space + + pynutil.delete("\"") + + pynini.closure(NEMO_NOT_QUOTE, 1) + + pynutil.delete("\"") + ) + morpho_features = ( + pynutil.delete("morphosyntactic_features:") + + delete_space + + pynutil.delete("\"") + + pynini.closure(NEMO_NOT_QUOTE, 1) + + pynutil.delete("\"") + ) + + graph_fy = year + graph_fy |= period + delete_space + year + + # century + graph_century = year + delete_extra_space + period + # month (day) year graph_mdy = month + delete_extra_space + day + pynutil.insert(",") + delete_extra_space + year # (day) month year graph_dmy = day + delete_extra_space + month + pynutil.insert(",") + delete_extra_space + year + # day month year century + graph_dmyc = ( + day + + delete_extra_space + + month + + pynutil.insert(",") + + delete_extra_space + + year + + delete_extra_space + + period + ) + # month year graph_my = month + pynini.closure(delete_extra_space + year, 0, 1) + # month year century + graph_myc = month + pynutil.insert(",") + delete_extra_space + year + delete_extra_space + period + # month day graph_md = month + pynini.closure(delete_extra_space + day, 0, 1) # day month graph_dm = day + pynini.closure(delete_extra_space + month, 0, 1) + # year range + graph_year_range = year + + # ordinal century + graph_ordinal_century = era + delete_space + morpho_features + delete_extra_space + period + + #graph_ordinal_range = graph_ordinal + delete_extra_space + period + + optional_preserve_order = pynini.closure( pynutil.delete("preserve_order:") + delete_space + pynutil.delete("true") + delete_space | pynutil.delete("field_order:") @@ -88,7 +132,19 @@ def __init__(self): ) final_graph = ( - (graph_fy | graph_mdy | graph_dmy | graph_my | graph_md | graph_dm) + ( + graph_fy + | graph_mdy + | graph_dmy + | graph_my + | graph_md + | graph_dm + | graph_century + | graph_dmyc + | graph_myc + | graph_year_range + | graph_ordinal_century + ) + delete_space + optional_preserve_order ) diff --git a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/fraction.py b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/fraction.py index 0fa7e97bd..773d39b05 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/fraction.py +++ b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/fraction.py @@ -17,6 +17,8 @@ from pynini.lib import pynutil from nemo_text_processing.text_normalization.en.graph_utils import NEMO_NOT_QUOTE, NEMO_SPACE, GraphFst, delete_space +from nemo_text_processing.inverse_text_normalization.hi.utils import apply_fst + class FractionFst(GraphFst): diff --git a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/measure.py b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/measure.py index 1fc9ba373..d6d8f72f8 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/measure.py +++ b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/measure.py @@ -52,7 +52,17 @@ def __init__(self, cardinal: GraphFst, decimal: GraphFst): graph_decimal = ( pynutil.delete("decimal {") + delete_space + decimal.numbers + delete_space + pynutil.delete("}") ) + graph_exception_bai = ( + pynutil.delete("cardinal {") + + delete_space + + optional_sign + + delete_space + + cardinal.numbers + + delete_space + + pynutil.delete("}") + ) graph = (graph_cardinal | graph_decimal) + delete_space + pynutil.insert(" ") + unit + graph |= graph_exception_bai + pynini.closure(delete_space + pynutil.insert(" ") + unit) delete_tokens = self.delete_tokens(graph) self.decimal = graph_decimal self.fst = delete_tokens.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/ordinal.py b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/ordinal.py index d6c4e0025..94f280798 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/ordinal.py +++ b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/ordinal.py @@ -40,6 +40,7 @@ def __init__(self): + pynini.closure(NEMO_NOT_QUOTE, 1) + pynutil.delete("\"") ) - + self.numbers = graph + graph = graph.optimize() delete_tokens = self.delete_tokens(graph) self.fst = delete_tokens.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/telephone.py b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/telephone.py new file mode 100644 index 000000000..e97afd850 --- /dev/null +++ b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/telephone.py @@ -0,0 +1,55 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# Copyright 2025 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.text_normalization.hi.graph_utils import NEMO_NOT_QUOTE, GraphFst, delete_space, delete_extra_space + + +class TelephoneFst(GraphFst): + """ + Finite state transducer for verbalizing telephone, e.g. + telephone { number_part: "123-123-5678" } + -> 123-123-5678 + """ + + def __init__(self, cardinal: GraphFst): + super().__init__(name="telephone", kind="verbalize") + + number_part = pynutil.delete("number_part: \"") + pynini.closure(NEMO_NOT_QUOTE, 1) + pynutil.delete("\"") + optional_country_code = pynini.closure( + pynutil.delete("country_code: \"") + + pynutil.insert("+") + + delete_space + + pynini.closure(NEMO_NOT_QUOTE, 1) + + pynutil.delete("\"") + + pynini.accep(" "), + 0, + 1, + ) + optional_city_code = pynini.closure( + pynutil.delete("extension: \"") + + pynutil.insert("०") + + delete_space + + pynini.closure(NEMO_NOT_QUOTE, 1) + + delete_space + + pynutil.insert("-") + + pynutil.delete("\" ") + ) + + delete_tokens = self.delete_tokens(optional_country_code + number_part) + delete_tokens |= self.delete_tokens(optional_city_code + number_part) + self.fst = delete_tokens.optimize() diff --git a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/verbalize.py b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/verbalize.py index d88bd25d9..f1a6c55a3 100644 --- a/nemo_text_processing/inverse_text_normalization/hi/verbalizers/verbalize.py +++ b/nemo_text_processing/inverse_text_normalization/hi/verbalizers/verbalize.py @@ -21,6 +21,7 @@ from nemo_text_processing.inverse_text_normalization.hi.verbalizers.measure import MeasureFst from nemo_text_processing.inverse_text_normalization.hi.verbalizers.money import MoneyFst from nemo_text_processing.inverse_text_normalization.hi.verbalizers.ordinal import OrdinalFst +from nemo_text_processing.inverse_text_normalization.hi.verbalizers.telephone import TelephoneFst from nemo_text_processing.inverse_text_normalization.hi.verbalizers.time import TimeFst from nemo_text_processing.inverse_text_normalization.hi.verbalizers.whitelist import WhiteListFst from nemo_text_processing.inverse_text_normalization.hi.verbalizers.word import WordFst @@ -37,14 +38,16 @@ def __init__(self): super().__init__(name="verbalize", kind="verbalize") cardinal = CardinalFst() cardinal_graph = cardinal.fst - ordinal_graph = OrdinalFst().fst + ordinal = OrdinalFst() + ordinal_graph = ordinal.fst decimal = DecimalFst() decimal_graph = decimal.fst fraction_graph = FractionFst().fst - date_graph = DateFst().fst + date_graph = DateFst(cardinal, ordinal).fst time_graph = TimeFst().fst measure_graph = MeasureFst(cardinal, decimal).fst money_graph = MoneyFst(cardinal, decimal).fst + telephone_graph = TelephoneFst(cardinal).fst word_graph = WordFst().fst whitelist_graph = WhiteListFst().fst @@ -59,5 +62,6 @@ def __init__(self): | time_graph | measure_graph | money_graph + | telephone_graph ) self.fst = graph diff --git a/nemo_text_processing/text_normalization/data_loader_utils.py b/nemo_text_processing/text_normalization/data_loader_utils.py index 5e7fa1892..6a46230cf 100644 --- a/nemo_text_processing/text_normalization/data_loader_utils.py +++ b/nemo_text_processing/text_normalization/data_loader_utils.py @@ -162,8 +162,8 @@ def training_data_to_tokens( for instance in data: if instance.token_type != EOS_TYPE: if category is None or instance.token_type == category: - result[instance.token_type][0].append(instance.un_normalized) - result[instance.token_type][1].append(instance.normalized) + result[instance.token_type][0].append(unicodedata.normalize(NFC, instance.un_normalized)) + result[instance.token_type][1].append(unicodedata.normalize(NFC, instance.normalized)) return result diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_cardinal.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_cardinal.txt index a72ad4183..4a7221675 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_cardinal.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_cardinal.txt @@ -43,4 +43,12 @@ एक अरब बारह करोड़ तेईस लाख पैंतालीस हज़ार पाँच सौ सड़सठ~११२२३४५५६७ एक अरब दो करोड़ तेईस लाख पैंतालीस हज़ार पाँच सौ सड़सठ~१०२२३४५५६७ ग्यारह अरब दो करोड़ तेईस लाख पैंतालीस हज़ार पाँच सौ सड़सठ~११०२२३४५५६७ -इक्यावन अरब दो करोड़ तेईस लाख पैंतालीस हज़ार पाँच सौ सड़सठ~५१०२२३४५५६७ \ No newline at end of file +इक्यावन अरब दो करोड़ तेईस लाख पैंतालीस हज़ार पाँच सौ सड़सठ~५१०२२३४५५६७ +सवा सात सौ~७२५ +साढ़े सात सौ~७५० +साढ़े सात हज़ार~७५०० +सवा सात हज़ार~७२५० +डेढ़ सौ~१५० +ढाई सौ~२५० +साढ़े सोलह सौ~१६५० +सवा सोलह सौ~१६२५ diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_date.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_date.txt index bdc450fdd..95d35e85d 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_date.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_date.txt @@ -22,4 +22,21 @@ सत्ताईस जुलाई दो हज़ार ग्यारह~२७ जुलाई, २०११ जुलाई सत्ताईस~जुलाई २७ वर्ष दो हज़ार उन्नीस~वर्ष २०१९ -सन उन्नीस सौ नब्बे~सन १९९० \ No newline at end of file +सन उन्नीस सौ नब्बे~सन १९९० +उन्नीस सौ नब्बे से उन्नीस सौ इक्यानबे~१९९०-१९९१ +दो हज़ार पाँच से दो हज़ार उन्नीस~२००५-२०१९ +दो हज़ार पाँच से उन्नीस~२००५-१९ +चौंतीस सौ ईसा पूर्व~३४०० ई.पू. +उन्नीस सौ बीस ईस्वी~१९२० ई. +पच्चीस जनवरी अठारह सौ तिरेपन ईसवी~२५ जनवरी, १८५३ ई. +इकत्तीस मई उन्नीस सौ नब्बे ईसवी~३१ मई, १९९० ई. +पच्चीस ईसा पूर्व~२५ ई.पू. +मार्च की दो~मार्च २ +फ़रवरी की बीस~फ़रवरी २० +उन्नीस सौ नब्बे से उन्नीस सौ इक्यानबे ईसवी~१९९०-१९९१ ई. +दो हज़ार पाँच से दो हज़ार उन्नीस ईसा पूर्व~२००५-२०१९ ई.पू. +दसवें शताब्दी~१०वें शताब्दी +अठाहरवीं शताब्दी~१८वीं शताब्दी +एक हज़ार एकवीं शताब्दी~१००१वीं शताब्दी +एक सौ उन्नीसवां शताब्दी~११९वां शताब्दी +उन्नीस सौ बीस से छब्बीस तक~१९२०-२६ तक diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_decimal.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_decimal.txt index 23bef1a85..5b8d86602 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_decimal.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_decimal.txt @@ -4,4 +4,10 @@ एक सौ आठ दशमलव सात पाँच~१०८.७५ एक सौ दस दशमलव सात पाँच~११०.७५ एक सौ दो दशमलव तीन~१०२.३ -एक सौ छह दशमलव पाँच~१०६.५ \ No newline at end of file +एक सौ छह दशमलव पाँच~१०६.५ +साढ़े तीन सौ दशमलव दो दो~३५०.२२ +सवा तीन सौ दशमलव दो~३२५.२ +साढ़े चार सौ दशमलव सात पाँच~४५०.७५ +सवा चार सौ दशमलव सात पाँच~४२५.७५ +ढाई सौ दशमलव छह~२५०.६ +डेढ़ सौ दशमलव सात पाँच~१५०.७५ diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_fraction.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_fraction.txt index 12ee24d61..21ceff6c6 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_fraction.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_fraction.txt @@ -7,4 +7,25 @@ एक सौ तेईस बटा एक सौ पच्चीस~१२३/१२५ छह सौ बासठ बटा एक~६६२/१ एक सौ पाँच बटा सात~१०५/७ -छह सौ चौवन बटा तीन~६५४/३ \ No newline at end of file +छह सौ चौवन बटा तीन~६५४/३ +एक सौ तैंतीस सही एक बटा दो~१३३ १/२ +एक सौ तैंतीस सही दो बटा तीन~१३३ २/३ +एक सही छह बटा छह~१ ६/६ +दो सही एक बटा छह~२ १/६ +तीन सही तीन बटा चार~३ ३/४ +एक सौ बीस सही तीन बटा चार~१२० ३/४ +एक सौ बीस सही पिछत्तर बटा नब्बे~१२० ७५/९० +तीन सही तीन बटा चार~३ ३/४ +सवा चौरासी~८४ १/४ +डेढ़~१ १/२ +ढाई~२ १/२ +आधा~१/२ +साढ़े~१/२ +सवा~१/४ +पौन~३/४ +पौना~३/४ +सवा पैंतीस~३५ १/४ +साढ़े चार सौ बटा दस~४५०/१० +तीन चौथाई~३/४ +दो तिहाई~२/३ +एक चौथाई~१/४ diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_measure.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_measure.txt index 3bd860f08..21615f1c5 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_measure.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_measure.txt @@ -29,4 +29,20 @@ तैंतीस दशमलव तीन तीन किलोमीटर प्रति घंटा~३३.३३ km/h चौदह हज़ार इकहत्तर दशमलव नौ नौ पिंट~१४०७१.९९ pt बहत्तर दशमलव आठ तीन मील प्रति घंटा~७२.८३ mi/h -बहत्तर मील प्रति घंटा~७२ mi/h \ No newline at end of file +बहत्तर मील प्रति घंटा~७२ mi/h +पौने ग्यारह घंटे~१०.७५ h +साढ़े सात वर्ष~७.५ yr +सवा ग्यारह सौ मीटर~११२५ m +पौने चार सौ हेक्टेयर~३७५ ha +साढ़े दस घन फीट~१०.५ ft³ +पौने पांच सौ किलोमीटर~४७५ km +ढाई सौ गैलन~२५० gal +डेढ़ दर्जन~१.५ doz +साढ़े सात ऐंपीयर~७.५ A +पौने तीन हजार एकड़~२७५० ac +साढ़े बारह वर्ग माइक्रोमीटर~१२.५ µm² +ढाई महीने~२.५ mo +दो बाई दो~२x२ +दो बाई दो~२x२ +पाँच बाई पाँच~५x५ +बाईस बाई पाँच घन फीट~२२x५ ft³ diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_money.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_money.txt index 8cc06397b..8821940c3 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_money.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_money.txt @@ -21,4 +21,30 @@ इकहत्तर हज़ार इकहत्तर बिटकॉइन~₿७१०७१ बत्तीस बुरुंडी फ्रैंक~fbu३२ पन्द्रह सौ कैमन आइलैंड्स डॉलर~ci$१५०० -छह सौ पच्चीस रुपये दो पैसे~₹६२५.२ \ No newline at end of file +छह सौ पच्चीस रुपये दो पैसे~₹६२५.२ +साढ़े सात सौ डॉलर~$७५० +सवा दो सौ यूक्रेनी ग्रिव्ना~₴२२५ +साढ़े छः लाख रुपए~₹६५०००० +सवा छः लाख अल्जीरियाई दिनार~دج६२५००० +सवा पंद्रह लाख युगांडा शिलिंग~ush१५२५००० +साढ़े पंद्रह लाख रुपए~₹१५५०००० +साढ़े पाँच हज़ार लीरा~₺५५०० +ढाई सौ यूरो~€२५० +ढाई हजार बुरुंडी फ्रैंक~fbu२५०० +ढाई करोड़ रुपए~₹२५०००००० +ढाई लाख रुपए~₹२५०००० +डेढ़ सौ यूरो~€१५० +डेढ़ हजार रुपए~₹१५०० +डेढ़ करोड़ रुपए~₹१५०००००० +डेढ़ लाख रुपए~₹१५०००० +पौने तीन सौ रुपए~₹२७५ +पौने पंद्रह सौ रुपए~₹१४७५ +पौने तीन हजार रुपए~₹२७५० +पौने पंद्रह हजार यूरो~€१४७५० +पौने पैंतालिस हजार यूरो~€४४७५० +पौने तीन लाख रुपए~₹२७५००० +पौने पंद्रह लाख रुपए~₹१४७५००० +पौने पैंतालिस लाख रुपए~₹४४७५००० +पौने तीन करोड़ रुपए~₹२७५००००० +पौने पंद्रह करोड़ रुपए~₹१४७५००००० +पौने पैंतालिस करोड़ रुपए~₹४४७५००००० diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_telephone.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_telephone.txt new file mode 100644 index 000000000..362405be5 --- /dev/null +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_telephone.txt @@ -0,0 +1,33 @@ +प्लस nine one nine four one one one two three four one two~+९१ ९४१११२३४१२ +plus nine one eight four one one one two three four zero one~+९१ ८४१११२३४०१ +प्लस नौ एक नौ आठ सात छह पांच चार तीन दो एक शून्य~+९१ ९८७६५४३२१० +zero eight zero two nine four one one one two one~०८०-२९४१११२१ +शून्य आठ शून्य दो नौ चार एक एक एक दो एक~०८०-२९४१११२१ +zero four zero two seven eight one eight three nine nine~०४०-२७८१८३९९ +शून्य चार शून्य दो सात आठ एक आठ तीन नौ नौ~०४०-२७८१८३९९ +zero one six seven two seven two six three three three~०१६७२७२-६३३३ +PLUS nine one six three eight two seven one four six five zero~+९१ ६३८२७१४६५० +प्लस नौ एक सात तीन आठ दो सात एक चार छह पांच शून्य~+९१ ७३८२७१४६५० +zero four eight nine two six five one three four eight~०४८९२-६५१३४८ +zero two eight seven six eight three three six five zero~०२८७६८३३-६५० +शून्य दो छह नौ नौ आठ एक चार तीन सात दो~०२६९९८१-४३७२ +प्लस नौ एक आठ चार तीन सात दो शून्य पांच छह एक आठ~+९१ ८४३७२०५६१८ +प्लस नौ एक छह शून्य पांच एक तीन चार आठ दो सात छह~+९१ ६०५१३४८२७६ +zero three one nine two two two nine four one one~०३१९२-२२९४११ +plus nine one nine zero five one three four eight two seven six~+९१ ९०५१३४८२७६ +शून्य एक छह तीन चार दो आठ एक आठ तीन एक~०१६३४-२८१८३१ +शून्य दो चार शून्य तीन सात एक चार पांच चार तीन~०२४०-३७१४५४३ +एक एक शून्य शून्य सात शून्य दिल्ली के वसंत कुंज का पिनकोड है~११००७० दिल्ली के वसंत कुंज का पिनकोड है +बंगलौर के बैयापानहली का पिनकोड पाँच छह शून्य शून्य तीन आठ है~बंगलौर के बैयापानहली का पिनकोड ५६००३८ है +दिल्ली के वसंत कुंज का पिनकोड one one zero zero seven zero है~दिल्ली के वसंत कुंज का पिनकोड ११००७० है +five six zero zero three eight बंगलौर के बैयापानहली का पिनकोड है~५६००३८ बंगलौर के बैयापानहली का पिनकोड है +मेरे क्रेडिट कार्ड के आखिरी डिजिट शून्य शून्य तीन आठ हैं~मेरे क्रेडिट कार्ड के आखिरी डिजिट ००३८ हैं +क्रेडिट कार्ड के आखिरी डिजिट four three seven two हैं~क्रेडिट कार्ड के आखिरी डिजिट ४३७२ हैं +दिल्ली के वसंत कुंज का पिनकोड one one zero zero seven zero है~दिल्ली के वसंत कुंज का पिनकोड ११००७० है +five six zero zero three eight बंगलौर के बैयापानहली का पिनकोड है~५६००३८ बंगलौर के बैयापानहली का पिनकोड है +मेरे क्रेडिट कार्ड के आखिरी डिजिट शून्य शून्य तीन आठ हैं~मेरे क्रेडिट कार्ड के आखिरी डिजिट ००३८ हैं +क्रेडिट कार्ड के आखिरी डिजिट four three seven two हैं~क्रेडिट कार्ड के आखिरी डिजिट ४३७२ हैं +आठ दो पाँच नौ आठ नौ दो एक एक चार मेरा नंबर मिलाओ~८२५९८९२११४ मेरा नंबर मिलाओ +मेरे नए नंबर पे कॉल करो छह पाँच शून्य दो दो पाँच नौ आठ तीन पाँच~मेरे नए नंबर पे कॉल करो ६५०२२५९८३५ +ये नंबर मिलाओ नौ छह पाँच आठ सात आठ दो शून्य तीन सात~ये नंबर मिलाओ ९६५८७८२०३७ +शून्य चार तीन एक आठ दो चार छह आठ नौ सात मेरे भाई के नंबर पे कॉल करो~०४३१८२-४६८९७ मेरे भाई के नंबर पे कॉल करो diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_time.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_time.txt index c1edb837d..8ec5e4df3 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_time.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_time.txt @@ -14,4 +14,12 @@ नौ घंटा दो सेकंड~९:००:०२ सोलह घंटा एक मिनट सत्ताईस सेकंड~१६:०१:२७ दस बजकर चौवन मिनट आठ सेकंड~१०:५४:०८ -तीन मिनट उन्नीस सेकंड~००:०३:१९ \ No newline at end of file +तीन मिनट उन्नीस सेकंड~००:०३:१९ +ढाई बजे~२:३० +डेढ़ बजे~१:३० +डेढ़ घंटा~१:३० +साढ़े पाँच बजे~५:३० +सवा चार बजे~४:१५ +साढ़े ग्यारह~११:३० +पौने पाँच~४:४५ +पौने तीन घंटा~२:४५ diff --git a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_whitelist.txt b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_whitelist.txt index 30824fced..68f4fd775 100644 --- a/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_whitelist.txt +++ b/tests/nemo_text_processing/hi/data_inverse_text_normalization/test_cases_whitelist.txt @@ -1,5 +1,3 @@ -डेढ़ बजे~१:३० -ढाई बजे~२:३० मास्टर निखिल तनिष~मा. निखिल तनिष पाव~१/४ श्रीमती ज्योत्सना~स्मि. ज्योत्सना @@ -7,6 +5,4 @@ आधा कप चाय~१/२ कप चाय श्रीमान भारत कुमार~श्री. भारत कुमार डॉक्टर प्रशांत~डॉ. प्रशांत -डेढ़~१.५ कुमारी~कु. -ढाई~२.५ \ No newline at end of file diff --git a/tests/nemo_text_processing/hi/test_sparrowhawk_inverse_text_normalization.sh b/tests/nemo_text_processing/hi/test_sparrowhawk_inverse_text_normalization.sh index aec7299d5..a365a834d 100644 --- a/tests/nemo_text_processing/hi/test_sparrowhawk_inverse_text_normalization.sh +++ b/tests/nemo_text_processing/hi/test_sparrowhawk_inverse_text_normalization.sh @@ -63,6 +63,11 @@ testITNMoney() { runtest $input } +testITNTelephone() { + input=$PROJECT_DIR/hi/data_inverse_text_normalization/test_cases_telephone.txt + runtest $input +} + testITNWord() { input=$PROJECT_DIR/hi/data_inverse_text_normalization/test_cases_word.txt runtest $input diff --git a/tests/nemo_text_processing/hi/test_telephone.py b/tests/nemo_text_processing/hi/test_telephone.py new file mode 100644 index 000000000..7e43f7e82 --- /dev/null +++ b/tests/nemo_text_processing/hi/test_telephone.py @@ -0,0 +1,31 @@ +# Copyright (c) 2025, 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 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 TestTelephone: + inverse_normalizer = InverseNormalizer(lang='hi', cache_dir=CACHE_DIR, overwrite_cache=False) + + @parameterized.expand(parse_test_case_file('hi/data_inverse_text_normalization/test_cases_telephone.txt')) + @pytest.mark.run_only_on('CPU') + @pytest.mark.unit + def test_denorm(self, test_input, expected): + pred = self.inverse_normalizer.inverse_normalize(test_input, verbose=False) + assert pred.strip() == expected.strip() diff --git a/tools/text_processing_deployment/hi_itn_grammars_lower_cased/classify/tokenize_and_classify.far b/tools/text_processing_deployment/hi_itn_grammars_lower_cased/classify/tokenize_and_classify.far new file mode 100644 index 000000000..fe1122ebc Binary files /dev/null and b/tools/text_processing_deployment/hi_itn_grammars_lower_cased/classify/tokenize_and_classify.far differ diff --git a/tools/text_processing_deployment/hi_itn_grammars_lower_cased/hi_itn.far b/tools/text_processing_deployment/hi_itn_grammars_lower_cased/hi_itn.far new file mode 100644 index 000000000..01cdd9b66 Binary files /dev/null and b/tools/text_processing_deployment/hi_itn_grammars_lower_cased/hi_itn.far differ diff --git a/tools/text_processing_deployment/hi_itn_grammars_lower_cased/verbalize/verbalize.far b/tools/text_processing_deployment/hi_itn_grammars_lower_cased/verbalize/verbalize.far new file mode 100644 index 000000000..20022a95a Binary files /dev/null and b/tools/text_processing_deployment/hi_itn_grammars_lower_cased/verbalize/verbalize.far differ