இரண்டு பைத்தான் சொற்பிழை திருத்திகளை சமிபத்தில் எளிதாக பயன்படுத்தும் வண்ணம் “பொட்டலம்” போட்டேன். அதாவது மளிகைக்கடைகளில் அரிசி பருப்பு வகைகள் சாக்குகளில் இருந்தாலும் மொத்தவிலை கடைகளில்லாமல் தனியார் செல்லும் நகர கடைகளில் இவை பொட்டலங்களாக “பாக்கேட்” செய்து, நமது நேர நெருக்கடிக்காக, விற்கப்படும். அதே போல பல நல்ல நிரல்கள் பொதுவிலும், கிட் ஹபிலும் இருந்தாலும், இவற்றை பொதுவில் நிரலர்கள் பயன்படுத்த நாம் இதனை பொட்டலம் செய்தும், அரிசியில் கற்களை பொறக்கியெடுத்தும் சீர்செய்து மளிகைக்கடைக்காரர் செய்வார் இல்லையா, பரிசோதித்தும் வெளியிட்டுள்ளேன்.
“”ஓர் ஆயிரம் கழித்தல் ஐந்து பெருக்கல் (ஒன்பது கூட்டல் ஒன்று)” என்பதை எப்படி 950 என்று கணினி புரிந்து கொள்ளும் ? Open-Tamil வழியாகத்தான் – வாங்க இதை பார்க்கலாம்.
Open-Tamil is a free and open-source Tamil Text / Natural Language Processing library (NLP) written in Python, and developed since early 2010s. This blog post is cover our gaps in marketing (on our part, ofcourse) Open-Tamil regarding the capabilities and features presented by Open-Tamil python library. Open-Tamil Python package is distributed under MIT license.
Documentation
Open-Tamil project is currently in the release v0.96 – the Python package can be found here. Documentation from Sphinx for Open-Tamil package can be found on Tamilpesu.us site at this URL.
Installation
Open-Tamil can be installed by running the following command from your terminal with root privileges on Python3. You cannot use current/later versions of Open-Tamil with v2.x – please refer to older releases on pypi page which are still available to you.
$ pip install –upgrade open-tamil>=0.96
If you want to install locally, you can run this command instead,
$ pip install –upgrade open-tamil>=0.96 –user
Python Modules
Open-Tamil provides the following Python modules with various classess and functionalities. You can learn more about them from browsing our documentation.
In summary we can list them as follows,
Module
Functionality
1
tamil
Tamil tokenization, word ordering, encoding converters, numerals, text summarizer
Various examples and utilities in Open-Tamil package; nifty code tips and tricks
Open-Tamil source code examples like numeral to audio generation, ngram generation, corpus analysis etc. see link here.
Calculator Example
One fun use of the API is to build interactive websites like tamilpesu.us but a more interesting use is to build a text based calculator taking inputs in form of Tamil numerals with Tamil words for arithmetic operations like add, subtract, multiply and divide.
“”ஓர் ஆயிரம் கழித்தல் ஐந்து பெருக்கல் (ஒன்பது கூட்டல் ஒன்று)” என்பதை எப்படி 950 என்று கணினி புரிந்து கொள்ளும் ?
Using Open-Tamil we can parse the numerals back to numbers and form a simple mathematical infix expression;
1000 – 5 * ( 9 + 1 )
then use Python eval() we can use Python parser and evaluator to build the expression tree and compute the post-order traversal and execute the expression to receive the result, which in our case is not surprisingly,
950.
Well, all this can be done in less than 30 lines of code using Open-Tamil; if you don’t believe me check-out the code here.
Credits
A large number of individuals have contributed their time and effort over the years in many capacities to the project; should you wish to acknowledge this project in your research, products you can choose to cite any of our published works of relevance to you; our publications are listed here.
As always if you wish to report bugs, or share your comments please write an email to me ezhillang AT gmail DOT com or file an issue at github.
இந்த வார பகுதியில் ஒரு வித்தியாசமான சிக்கலைப்பற்றி பேசலாம், முன்னரே எழுதிய பகுதிகளை இங்கு காண்க; அதாவது ஒரு எழுத்துணரியின் வழியாக தயாரிக்கப்பட்ட தமிழ் சொற்றொடரில் சில சமயம் மெய் புள்ளிகள் மறைந்துவிடுகின்றன. இது சற்றி இயந்திர கால சிக்கல் என்றால் அப்போது கல்வெட்டுக்களிலும் நூற்றாண்டின் நாளடைவில் இப்படிப்பட்ட சிக்கல்கள் தோன்றுகின்றன; ஆகவே இது தனிப்பட்ட ஒரு சிக்கல் இல்லை என்பதும் புலப்படுகின்றது. இந்த வலைப்பதிவில் உள்ள அல்கோரிதத்தை இங்கு ஓப்பன் தமிழ் நிரலாக காணலாம்.
1. அறிமுகம்
எனக்கு இந்த சிக்கல் இருப்பதன் காரணம், 1910-இல் ஆர்டன் பாதரியார் இயற்றிய “A progressive grammar of common Tamil,” என்ற நூலின் மறுபதிப்பு பிரதியில் சில/பல சொற்கள் விட்டுப்போயிருந்தன. மறுபதிப்பு செய்யும் நிறுவனமோ, கலிபோர்னியா லாசு ஏஞ்சலஸ் பல்கலைக்கழகத்தில் உள்ள பிரதியினில் இருந்து எப்படியோ (கூகிள் புத்தகங்கள் வழியாகவா?) ஒரு புத்தகத்தின் மின்வடிவத்தை சரிபார்க்காமல் அப்படியே அச்சு செய்து அமேசான் சந்தையில் விற்று அதுவும் என் கைக்கு கிடைத்தது. பல இடங்களில் மெய் புள்ளிகளின் மறைவு – சொற்பிழைப்போல் பாவிக்கும் இந்த பிழைகள் இந்திர வழி செயல்திருத்தத்தால் நுழைக்கப்பட்டவை. நுழககபபடடவை!
மெய் புள்ளிகளின்றி செம்புலப்பொயல்நீரார் கூற்றி சங்க இலக்கியத்தில் இருந்து இப்படியே தோன்றும்,
யாயும ஞாயும யாராகியரோ
எநதையும நுநதையும எமமுறைக கேளிர
…
இதனை எப்படி நாம் சீர் செய்வது? இதுதான் நமது இன்றைய சிக்கல்.
2. அல்கோரிதம்
உள்ளீடு
சொல் என்பதை எழுத்துச் சரமாக தறப்படுகிறது. இதனை சொ என்ற மாறியில் குறிக்கின்றோம்.
வெளியீடுகள்
மறைந்த மெய்கள் இருந்தால் அவற்றை மற்றும் திருத்தி புதிய சொல் வெளியீடு செய்வதற்கு.
அல்கோரிதம் முன்-நிபந்தனைகள்
உள்ளீட்டு சரம் என்பதில் வேறு எந்த சொற்பிழைகளும் இல்லை
சரம் என்பதின் இடம் ‘இ‘ என்பதில், சரம் எழுத்து சொ[இ] என்ற நிரலாக்கல் குறியீட்டில் சொல்கின்றோம்.
சரம் எழுத்து சொ[இ], தமிழ் எழுத்தாக இல்லாவிட்டால் அதனை நாம் பொருட்படுத்துவதில்லை
சரம் எழுத்து சொ[இ], உயிர், மெய், உயிர்மெய் (அகர வரிசை தவிர்த்து), ஆய்த எழுத்து என்றாலும் அவற்றில் எவ்வித செயல்பாடுகளையும் செய்யப்போவதில்லை
ஆகவே, சரம் எழுத்து சொ[இ] என்பது உயிர்மெய் எழுத்தாக அதுவும் அகரவரிசையில் {க, ச, ட, த, ப, ர, .. } இருந்தால் மட்டும் இதனை செயல்படுத்துகின்றோம்.
அல்கோரிதம் செயல்பாடு
மேல் சொன்னபடி, நாம் கண்டெடுக்க வேண்டியது உள்ளீட்டு சரத்தில் அகரவரிசை உயிர்மெய்களில் சரியான உயிர்மெய் எழுத்து வருகிறதா அல்லது மெய் புள்ளி மறைந்து வருகிறதா என்பது மட்டுமே!
இதனை சறியாக செய்தால் அடுத்த கட்டமாக பிழைஉள்ள இடங்களில் புள்ளிகளை சேற்றுக்கொள்ளலாம்
மேல் உள்ள 1-2 படிகளை அனைத்து சொல்லின் அகரவரிசை உயிமெய்களிலும் சயல்படுத்தினால் நமது தீர்வு கிடைக்கின்றது.
இதன் மேலோட்டமான ஒரு முதற்கண் தீற்வை பார்க்கலாம் (இதனை மேலும் சீர்மை செய்ய வேண்டும்),
அல்கோரிதம் – இதற்கு ஒத்தாசை செய்ய மேலும் கூடிய அல்கோரித செயல்முறைகளான “அகரவரிசை_மெய்”, “புள்ளிகள்_தேவையா” மற்றும் “புள்ளிகள்_சேர்” என்றவற்றையும் நாம் சேரக்க்வேண்டும்.
நிரல்பாகம்மறைந்த_மெய்_புள்ளியிடல்( சொல் )
திருத்தம்_சொல் = ""
@(சொல் இல் எழுத்து) ஒவ்வொன்றாக
விடை = 0
@( அகரவரிசை_உயிர்மெய்( எழுத்து ) ) ஆனால்
விடை = புள்ளிகள்_தேவையா( சொல், எழுத்து )
முடி@( விடை ) ஆனால்திருத்தம்_சொல் += புள்ளிகள்_சேர்( எழுத்து )
இல்லைதிருத்தம்_சொல் += எழுத்து
முடிமுடிபின்கொடுதிருத்தம்_சொல்முடிநிரல்பாகம்அகரவரிசை_உயிர்மெய்( எழுத்து )
அகரவரிசை_உயிர்மெய்கள் = 'கசடதபறயரலவழளஞஙனநமண'
பின்கொடு அகரவரிசை_உயிர்மெய்கள்.இடம்(எழுத்து) != -1
முடி
நிரல்பாகம் புள்ளிகள்_சேர் ( எழுத்து )
அகரவரிசை_உயிர்மெய்கள் = 'கசடதபறயரலவழளஞஙனநமண'
அகரவரிசைக்குள்ள_மெய் = ['க்','ச்','ட்','த்','ப்','ற்',
'ய்', 'ர்','ல்','வ்','ழ்','ள்',
'ஞ்', 'ங்', 'ன்','ந்','ம்','ண்']
இடம் = அகரவரிசை_உயிர்மெய்கள்.இடம்( எழுத்து )
பின்க்கொடு அகரவரிசைக்குள்ள_மெய்[ இடம் ]
முடி
பொதுவாக நம்மால் புள்ளிகள்_தேவையா என்ற செயல்பாட்டை சரிவர முழு விவரங்களுடன் எழுதமுடயாது. இது கணினிவழி உரைபகுப்பாய்வுக்கு ஒரு தனி கேடு. அதனால் நாம் புள்ளியியல் வழி செயல்படுவது சிறப்பானது/சராசரியாக சரிவர விடையளிக்கக்கூடிய செயல்முறை.
3. மாற்று அல்கோரிதம்
மேல் சொன்னபடி உள்ள கட்டமைப்பில் புள்ளிகள் தேவையா என்பதன் ஓட்ட நேரம் (runtime), கணிமை சிக்கலளவு (computational complexity) பற்றி பார்க்கலாம்.
உதாரணமாக, “கண்னன்” என்று எடுத்துக்கொண்டால் அது அச்சாகுமபொழுது “கணனன” என்று அச்சாகிறது என்றும் கொள்ளலாம். நமது அல்கோரிதத்தின்படி இதில் நான்று இடங்களில், அதாவது அத்துனை எழுத்துக்களுமே அகரவரிசை உயிமெயகளாக அமைகின்றன. இவற்றில் எந்த ஒது எழுத்தும் உயிர்மெய்யாக இருக்கலாம் (அச்சிட்டபடியே), அல்லது மாறியும் புள்ளி மறைந்த மெய்யாகவும் இருக்கலாம்.
அதாவது, “கணனன” என்ற சொல்லை மொத்தம் உள்ள வழிகளாவது இவற்றின் பெருக்கல்:
க என்ற எழுத்தில் இரண்டு வழிகள்
ண என்ற எழுத்தில் இரண்டு வழிகள்
ன என்ற எழுத்தில் இரண்டு வழிகள்
ன என்ற எழுத்தில் இரண்டு வழிகள்
மொத்தம் 2 x 2 x 2 x 2 = 24 = 16 வழிகள் உள்ளன.
இதனை பொதுப்படுத்தி சொன்னால்,
நீ என்ற எண் நீளம் உள்ள சொல்லில் (அதாவது, நீ = |சொல்|) என்ன நடக்கின்றது என்றால்,
நீ1 என்ற எண் சொல்லின் உள்ள அகரவரிசை உயிர்மெய்களை குறிக்கும் என்றால்,
நீ1 ⩽ நீ,
மொத்தம் நாம் பரிசோதிக்க வேண்டிய வழிகள், 2நீ1
இது விரைவில் பொறிய அளவு வளரும் ஒரு தொகை, இதனை exponentially fast, அதிவேகமாக வளரும் கணிமை என்றும் சொல்லாம். இதற்கு என்ன செய்ய வேண்டும் என்றால் இதனை எளிதாக வழிகள் தோன்றும் படி மட்டும் விடைகள் தேடினால் நமது செயல்பாடு விரைவில் முடியவே முடியாது – இதற்காக branch and bound என்ற செயல்முறைகளை பயன்படுத்தவேண்டும்.
#இந்த நிரல்பாகம், 2நீ1 என்ற ஓட்ட நேரத்தில் இயங்கும்
நிரல்பாகம் புள்ளிகள்_தேவையா_உதவியாளர்( முதல்_ஒட்டு, சந்தித்காதவை )@( நீளம்( சந்தித்காதவை ) == 0 )பின்கொடு [முதல்_ஒட்டு]முடி
விடைகள் = []
எழுத்து = சந்தித்காதவை[0]
@( அகரவரிசை_உயிர்மெய்( எழுத்து ) ) ஆனால்
#உள்ளபடியே இந்த இடத்தில் மெய் இல்லை என்றவழியில் யுகிக்க
விடைகள்1 = புள்ளிகள்_தேவையா_உதவியாளர்(முதல்_ஒட்டு + எழுத்து, சந்தித்காதவை[1:])
விடைகள்.நீட்டிக்க( விடைகள்1 )
#உள்ளபடியே இந்த இடத்தில் மெய் வந்தால் எப்படி இருக்கும் என்ற்வழியில் யுகிக்க
மெய்எழுத்து = புள்ளிகள்_சேர்(எழுத்து )
விடைகள்2 = புள்ளிகள்_தேவையா_உதவியாளர்(முதல்_ஒட்டு + மெய்எழுத்து, சந்தித்காதவை[1:])
விடைகள்.நீட்டிக்க( விடைகள்2 )
இல்லை
விடைகள்3 = புள்ளிகள்_தேவையா_உதவியாளர்(முதல்_ஒட்டு + எழுத்து, சந்தித்காதவை[1:])
விடைகள்.நீட்டிக்க( விடைகள்3 )
முடி
பின்கொடுவிடைகள்முடிநிரல்பாகம் மறைந்த_மெய்_புள்ளியிடல்(சொல்) #யுகிப்பு சார்பு என்பது n-gram புள்ளியியல் கொண்டு #சொல்லின் புள்ளிகள் சோர்க்கப்பட்ட மாற்றங்களை மதிப்பிடும்.மாற்று_சொற்கள் = புள்ளிகள்_தேவையா_உதவியாளர்( '', list(சொல்) ) மதிப்பீடுகள் = யுகிப்பு_சார்பு( மாற்று_சொற்கள் )
இடம் = அதிக_மதிப்பெண்_இடம்( மதிப்பீடுகள் )
சரியான_மாற்று_சொல் = மாற்று_சொற்கள்[ இடம் ]
பின்கொடு சரியான_மாற்று_சொல்
முடி
மேல் சொல்லப்பட்டபடி கணினி அல்கோரிதப்படுத்திப்பார்த்தால் ‘கணனன’ என்ற சொல்லிற்கு, 16 மாற்றுகள் கிடைக்கும். அவையாவன,
இந்த சமயம் நமக்கு சரியான விடைகிடைக்கவில்லை; இதனுடன் அகராதிபெயர்கள் அல்லது classification செயற்கைப்பின்னல்களை பயன்படுத்திப்பார்க்கலாம் என்றும் தோன்றுகிறது.
இந்த அல்கோரிதத்தை ஓப்பன்-தமிழ் பைத்தான் நிரலாக எழுதினால் இப்படி:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ஏற்கணவே எழுதிய கட்டுரை கீற்றில் தமிழ் கட்டுரைகளில் எப்படி பால் ஓற்றுமை படுத்துவது என்ற கேள்வியைப்பற்றி கண்டோம். இன்று, தமிழில் எப்படி இரட்டைக்கிளவி சொற்கள், பரத நாட்டிய/கருநாடக இசையில் ஜதி சொற்கள், என்பதை கணினியால் சுயமாக அறியமுடியும் என்ற கேள்வியைப்பற்றி பார்க்கலாம். விடைகள் என்னிடம் இருந்தால் INFITTக்கு முதல் ஆளாக கட்டுரை எழுதிருபேன் இல்லையா ஹஹா ;).
முதன்மையில் இவ்வை சொற்கள், இரட்டைக்கிளவி மற்றும் ஜதி சொற்கள், ஒருவகையான இசைவுத்தன்மையை சொல்பவை. இதனை, மற்ற மொழிகளிலும் காணலாம் – முதன்மையாக ஆங்கிலத்தில் இதனை Onomatopoeia என்றும் சொல்கின்றனர்.
தமிழ் சினிமா இசை பாடல்களில், செய்யுள்களில், என பல இடங்களில் சீசீ இங்தப்பழம் புளிக்குது என்று சொல்லும் சுடசுட கிசுகிசு பத்திரிகைகளிலும் எல்லாஇடத்திலும் பரவலாக உள்ள தமிழ் சொல்லாடல் அம்சமாக விளங்குகின்றது இந்த இரட்டைக்கிளவி.
உதாரணம், இந்த 1998-இல் வெளிவந்த ஜீன்ஸ் படப் பாடலான “கண்ணோடு காண்பதெல்லாம்…” பாடலில் இரட்டைக்கிளவி, மற்றும் ஜதி சொற்கள் இடம் பெருகின்றன:
இவற்றில் எப்படி இந்த சொற்களின் திரும்பத்திரும்ப வரும் தன்மையை ஒரு விதிகளால் அல்லது ஒரு சூத்திரத்தினால் குறிக்கமுடியும் ?
இப்படி குறிக்கமுடியுமா, இல்லையா ?
இவாறு எழுதப்பட்ட சூத்திரம் அல்லது நிரல் சார்புகளினால் இந்த பட்டியல்கள் தானியங்கியால் குறிக்கப்படும் இரட்டைக்கிளவி, குறிக்கப்படாத இரட்டைக்கிளவி என்று இருவகைபடுத்தப்படுமா ?
2 சில் விடைக்கான எண்ணங்கள்
2.1 Regular Expression
எனது அனுபவத்தில், இதன் தானியங்கி விதிகள் regular expression என்ற சார்ககத்தினால் எந்த ஒரு உரையிலும் கண்டெடுக்கலாம் என்றும் எண்ணுகின்றேன் – (தமிழில் regular expression-களை ஓப்பன் தமிழ் நிரல் திரட்டில் நீங்கள் பார்க்கலாம்) – எனினும் இது எளிதான செயல் அல்ல – அதுவும் கணினி நினைவகம்/இயக்கும் நேரம் big-O சிக்கல் அளவுகளில் சிக்கனமாகவும் துரிதமாகவும் இந்தவகைச்சேவைகளைச்செய்வது ஒரு கடினமான காரியம்.
மற்ற ஒரு தீர்வு செயற்கையறிவு, ஆழக்கற்றலினால் வரும் என்றும் சொல்லலாம். இந்த கேள்வியை ஒரு classification பகுப்பாய்வு எந்திரவழிகற்றலாக கணினியிடம் நியமித்து, விக்கி மற்றும் பல இடங்களில் இருந்து தரவுகளை தயாரித்து இந்த செயற்கைப்பின்னலை பயிற்சிஅளித்தால் அது நேரம் போகையில் அது திறன்களைப்பொரும்.
மேலும் – ஒரு நல்ல sequence-to-sequence வழியாக கட்டமைக்கப்பட்ட செயற்கையறிவு மாதிரி பின்னல் நாம் சொல்லிக்கொடுத்ததைவிட அதிகமாகவே கற்றிருக்கும் தன்மையையும் நாம் பார்க்கக்கூடும் என்று யுகிக்கக் தோன்றுகிறது.
தமிழ் செயற்கையறிவு மற்றும் எந்திர வழி உரை பகுப்பாய்வு போன்ற செயல்பாடுகளின் திறன் தினமும் வளர்ந்து கொண்டே போகின்ற சமயத்தில் (செயற்கையறிவு என்ற பேரலையின் முதுகில் பயணிக்கின்றது என்றபடியாக) இவற்றினால் கடக்கவேண்டிய சில புதிர்கள் என்ன (என்பார்வையில்) என்று இந்த பதிவில் அலசலாம்.
இருபால் சமநிலைப்பாடுத்தல் (gender balanced text)
அரசாங்கம், வணிக கார்ப்ரேட் நிறுவனங்கள் தினசரி புழக்கத்தில் பல செய்திகள் விளம்பரப்படுத்தலுக்கும், உள்நிறுவன செயல்பாட்டிற்கும் பகிர்ந்துகொள்ள வேண்டியிருக்கும். இத்தகைய செய்திகளில் சில் கேள்விகள் எழுகின்றன:
இந்த செய்திகள் முழுவதும் இருபாலினருக்கும் சரிசமமாக பாரபட்சமின்றி எழுதப்பட்டுள்ளதா?
இப்படி இல்லாவிட்டால் செயற்கையாக உரைதிருத்தம் செய்து இருபால் சம நிலைப்படுத்தல் செய்யலாம ?
உதாரணம்: “பணியாளர் வேலைக்கு வந்தால் அவர் மனைவியிடம் ஒப்புதல் பெற வேண்டும்..” என்ற படி ஒரு உரை இருந்தால் அது சமனிலைப்படுத்தப்பட்டபின் “பணியாளர் வேலைக்கு வந்தால் அவர் மனைவியிடம் (அல்லது அவள் கணவனிடம், [துனைவன்/வியிடம்]) ஒப்புதல் பெறவேண்டும்” என்று வரவேண்டும்.
இத்தகைய ஒரு செயற்கையறிவு அல்லது தானியங்கியிடம் திருக்குறள் மற்றும் சம்காலத்தில் உருவாகாத பழங்கால உரைகளைக்கொடுத்தால் என்ன ஆகும் ?
மேலும் சில திறன்களை தமிழ் இயல்மொழிபகுப்பாய்வு பெரும் என்றும் நம்பலாம்; அடுத்தகட்ட கேள்விகள் / புதிர்கள் அடுத்த பதிவில்.