Skip to content

Instantly share code, notes, and snippets.

@vanangamudi
Last active April 9, 2022 15:58
Show Gist options
  • Save vanangamudi/e7f8f95f011f7dcada90b5f80db0f896 to your computer and use it in GitHub Desktop.
Save vanangamudi/e7f8f95f011f7dcada90b5f80db0f896 to your computer and use it in GitHub Desktop.
proper regular expression engine for Tamil text

Proper regex engine for Tamil

There are still some corner cases to be ironed out as in anchors and special sequences cases. But this implementation is is useful enough for basic text processing.

vanangamudi@karunthulai:~/agam/projects/code/tamilnlp/tamil-regex
$ python3 ta_re.py
தமிழ், தமிழ் == தமிழ்
தமிழ், உயர்தனிச்செம்மொழி தமிழ் == தமிழ்
த*மிழ், தததததததமிழ் == தததததததமிழ்
[தஅ]மிழ், தமிழ் == தமிழ்
[தஅ]மிழ், அமிழ் == அமிழ்
செ.தமிழ், செந்தமிழ் == செந்தமிழ்
செ.தமிழ், செதமிழ் == False
[தஅ]*மிழ், மிழ் == மிழ்
[தஅ]*மிழ், தததததமிழ் == தததததமிழ்
[தஅ]*மிழ், அஅஅஅஅமிழ் == அஅஅஅஅமிழ்
[தஅ]* மிழ், தஅஅஅதஅதஅ மிழ் == தஅஅஅதஅதஅ மிழ்
(செம்மொழி)* தமிழ்,  தமிழ் ==  தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்மொழி தமிழ் == உயர்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், தனிமொழி தமிழ் == தனிமொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், செம்மொழி தமிழ் == செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்செம்மொழி தமிழ் == உயர்செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்தனிமொழி தமிழ் == உயர்தனிமொழி தமிழ்
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிசெம்மொழி தமிழ் == False
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிச்செம்மொழி தமிழ் == உயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உயயயர்தனிச்செம்மொழி தமிழ் == உயயயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == உர்தனிச்செம்மொழி தமிழ்
(உய+ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == தனிச்செம்மொழி தமிழ்
^தமிழ், தமிழ்---- == தமிழ்
தமிழ்$, -----தமிழ் == False
தமிழ்$, -----தமிழ் == False
தமிழ்$, தமிழ்---- == False
^தமிழ்$, -தமிழ்- == False
^தமிழ்$, தமிழ் == False
\எ ஆயிரம், 1 ஆயிரம் == 1 ஆயிரம்
\எ+ \ச\சொ, 1000 ஆயிரம் == 1000 ஆயி
\எ+ \சொ+, 1000 ஆயிரம் == 1000 ஆயிரம்
\எ+ \சொ+, ௧௦௦௮ ஆயிரம் == ௧௦௦௮ ஆயிரம்
\எ+\ச*, 1000 மைல்  == 1000 மைல் 
\எ+\ச*, 1000 == 100
vanangamudi@karunthulai:~/agam/projects/code/tamilnlp/tamil-regex
$ 

Basic String matching

தமிழ், தமிழ் == தமிழ்
தமிழ், உயர்தனிச்செம்மொழி தமிழ் == தமிழ்

character set and *, +, ? operators support

*மிழ், தததததததமிழ் == தததததததமிழ்
[தஅ]மிழ், தமிழ் == தமிழ்
[தஅ]மிழ், அமிழ் == அமிழ்
செ.தமிழ், செந்தமிழ் == செந்தமிழ்
செ.தமிழ், செதமிழ் == False
[தஅ]*மிழ், மிழ் == மிழ்
[தஅ]*மிழ், தததததமிழ் == தததததமிழ்
[தஅ]*மிழ், அஅஅஅஅமிழ் == அஅஅஅஅமிழ்
[தஅ]* மிழ், தஅஅஅதஅதஅ மிழ் == தஅஅஅதஅதஅ மிழ்

(..|..|…) alternate support

(செம்மொழி)* தமிழ்,  தமிழ் ==  தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்மொழி தமிழ் == உயர்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், தனிமொழி தமிழ் == தனிமொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், செம்மொழி தமிழ் == செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்செம்மொழி தமிழ் == உயர்செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்தனிமொழி தமிழ் == உயர்தனிமொழி தமிழ்
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிசெம்மொழி தமிழ் == False
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிச்செம்மொழி தமிழ் == உயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உயயயர்தனிச்செம்மொழி தமிழ் == உயயயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == உர்தனிச்செம்மொழி தமிழ்
(உய+ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == தனிச்செம்மொழி தமிழ்

anchors support

^தமிழ், தமிழ்---- == தமிழ்
தமிழ்$, -----தமிழ் == False
தமிழ்$, -----தமிழ் == False
தமிழ்$, தமிழ்---- == False
^தமிழ்$, -தமிழ்- == False
^தமிழ்$, தமிழ் == False

special sequences for character classes

\எ ஆயிரம், 1 ஆயிரம் == 1 ஆயிரம்
\எ+ \ச\சொ, 1000 ஆயிரம் == 1000 ஆயி
\எ+ \சொ+, 1000 ஆயிரம் == 1000 ஆயிரம்
\எ+ \சொ+, ௧௦௦௮ ஆயிரம் == ௧௦௦௮ ஆயிரம்
\எ+\ச*, 1000 மைல்  == 1000 மைல் 
\எ+\ச*, 1000 == 100
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment