Tamil Internet Conference 2018 – Coimbatore, India

Tamil internet Conference 2018 to take place at TNAU, Coimbatore, India later this year. Please see call for papers (March 30th deadline) to share your new and upcoming works in Tamil, linguistics and applied computer technology.

Please see the email from Prof. Kalyanasundaram, chair of Tamil Internet Conference – 2018.
DXgFYf8U0AATWuQ.jpg-large
Email from Prof. Kalyan announcing call for papers for Tamil Internet Conference 2018, at TNAU Coimbatore, India.

Classifying Tamil words – part 1

Problem

One of problems faced when building a Tamil spell checker, albeit somewhat marginal, can be phrased as follows:

Given a series of Tamil alphabets, how do you decide if the letters are true Tamil word (even out of dictionary) or if it is a transliterated English word ?

e.g. Between the words, ‘உகந்த’ vs ‘கம்புயுடர்’ can you decide which is true Tamil word and which is transliterated ?

Tools

This is somewhat simple with help of a neural network; given sufficient “features” and “training data” we can train some of these neural networks easily. With current interest in this area, tools are available to make this task quite easy – any of Pandas, Keras, PyTorch and Tensorflow may suffice.

Generally, the only thing you need to know about Artificial Intelligence (AI) is that machines can be trained to do tasks based on two distinctive learning processes:

  1. Regression,
  2. Classification

Read more at the Wikipedia – the current “problem” is a classification task.

Features

Naturally for task of classifying a word, we may take features as following:

  1. Word length
  2. Are all characters unique ?
  3. Number of repeated characters ?
  4. Vowels count, Consonant count
    1. In Tamil this information is stored as (Kuril, Nedil, Ayudham) and (Vallinam, Mellinam and Idayinam)
  5. Is word palindrome ?
  6. We can add bigram data as features as next step

Basically this task can be achieved with new code checked into Open-Tamil 0.7 (dev version) called ‘tamil.utf8.classify_letter

Screen Shot 2017-12-17 at 1.03.03 PM.png

Data sets

To make data sets we can use Tamil VU dictionary as a list of valid Tamil words (label 1); next we can use a transliterated list of words from English into Tamil as list of invalid Tamil words (label 0).

Using a 1, 0 labeled data, we may use part of this combined data for training the neural network with gradient descent algorithm or any other method for building a supervised learning model.

Building Transliterated Data

Using the Python code below and the data file from open-tamil repository you can build the code and run it,

def jaffna_transliterate(eng_string):
  tamil_tx = algorithm.Iterative.transliterate(jaffna.Transliteration.table,eng_string)
  return tamil_tx

def azhagi_transliterate(eng_string):
  tamil_tx = algorithm.Iterative.transliterate(azhagi.Transliteration.table,eng_string)
  return tamil_tx

def combinational_transliterate(eng_string):
  tamil_tx = algorithm.Iterative.transliterate(combinational.Transliteration.table,eng_string)
  return tamil_tx

# 3 forms of Tamil transliteration for English word
jfile = codecs.open('english_dictionary_words.jaffna','w','utf-8')
cfile = codecs.open('english_dictionary_words.combinational','w','utf-8')
afile = codecs.open('english_dictionary_words.azhagi','w','utf-8')
with codecs.open('english_dictionary_words.txt','r') as engf:
for idx,w in enumerate(engf.readlines()):
  w = w.strip()
  if len(w) < 1:
    continue
  print(idx)
  jfile.write(u"%s\n"%jaffna_transliterate(w))
  cfile.write(u"%s\n"%combinational_transliterate(w))
  afile.write(u"%s\n"%azhagi_transliterate(w))
  jfile.close()
  cfile.close()
  afile.close()

to get the following data files (left pane shows ‘Jaffna’ transliteration standard, while the right pane shows the source English word list); full gist on GitHub at this link

Screen Shot 2017-12-17 at 1.47.42 PM.png

In the next blog post I will share the details of training the neural network and building this classifier. Stay tuned!

 

திருத்த திருத்த … பிழைகள் ஒழிந்திட – spellchecker

இந்த பதிவில் ஏற்கனவே எழுதிய மயங்கொலி எழுத்துகள் பற்றிய பதிவில் (எப்படி மயங்கொலி பிழைகளை திருத்தம் செய்யலாம் என்பது பற்றி)  சிந்தனைகளை வழிமுறைபடுத்தி இங்கு பதிவு செய்கிறேன்.

இந்த பதிவில் எப்படி மயங்கொலி பிழைகளை சொல்திருத்தியில் நடைமுறைப்படுத்தி open-tamil-இல் செயல்படுத்துவது என்றும், இதன் நல்ல விளைவுகளையும் பார்க்கலாம்.

திருத்தம்

 

“தமிழ் திருத்தி” என்ற பெயரில் இந்த (web-based) வலை வழி இடைமுகம் காணலாம் [படம் 1].

தமிழ் திருத்தியில் “பளம்” என்றும் மற்ற இரண்டு சொற்களை (“காதள்”, “எலிதில்”) உள்ளீடு செய்து, சறிபார்க்க சொல்லலாம்.

விடைகளும் மாற்றங்களும் இங்கே! தவறான சொற்கள் சிகப்பு நிர கோட்டில் சுட்டி காட்டப்படும். இதனை விரைவில் open-tamil-இல் காணலாம்.

spell-checker-mayangoli-cases
படம்: எழுத்தாளர் சொற்களை செதுக்குகிறாள்; ஆனால் அவளுக்கு சில சொற்பிழை வந்துள்ளது. இவற்றை எப்படி அவள் நிவர்த்தி செய்தாள் ?

 

spell-checker-mayangoli-replace-1
படம் 2: முதல் சொல் மாற்றம் பழம், கனி
spell-checker-mayangoli-replace-2
படம் 3: இரண்டாம் சொல் “காதல்”
spell-checker-mayangoli-replace-3
படம் 4: மூன்றாம் சொல் “எளிதில்”

மாலை பொழுதின் மயக்கமென்ன

img_2450-e1509836851566.jpg
படம்: ஜூலை மலர், ஆண்டிற்கு ஒருமுறை மலரும். உபாயம், எனது தந்தை, வேளாண் வல்லுநர், திரு. அண்ணாமலை.

“தமிழ் தெரியுமா?” என்று நிறையபேர் ஒருவரை கேட்பது, இணையத்தின் தூரத்தில்,  பழக்கமான நாம் பார்க்கும் ஒரு விஷயம். காரணம் அடிக்கடி சிலரது சொற்களில் தலையெடுக்கும் சொற்பிழை. இவற்றை தவிர்க்க அவர்களுக்கு தேவை, பிழைகளை தடுக்கும்/திருத்தும் சொல்திருத்தி – spell checker – மூலம் ஒரு கட்டுரையை சோதித்தால். பல ஆண்டுகள் தமிழ் பயின்ற பொலிவு லேசுலே நமக்கும் கிடைக்கும். இந்த கட்டுரையும் அப்படி ஒரு (வளர்ச்சி நிலையில் உள்ள சொற்பிழை திருத்தியின் வாயில் சோதிக்கப்பட்டே பரிசுரம் செய்யப்பட்டது).

மாலை பொழுதில் மயக்கமென்ன ? தமிழில் உள்ள மயங்கொலி எழுத்துகள்  நான்கு வரிசையில் அமைக்கலாம்,

  • , , வரிசை.
  • , வரிசை.
  • , , வரிசை.
  • , , வரிசை.

சொல்திருத்தியில் கணினி நிரல் செய்யவேண்டியது இதுவே:

  1. உள்ளீடு கொடுக்கபட்ட சொல் சரியானதா, அல்லது தவறானதா ?
  2. தவறான சொல் என்ற பட்சத்தில் அதன் மாற்றங்கள் என்னென்ன ?

முதல் படியை எளிதாக ஒரு கையகராதியை கொண்டு செயல்படுத்தலாம். இதனை ஓபன்-தமிழ் (open-tamil) solthiruthi தொகுப்பில் Tamil VU மின் அகராதியை கொண்டு செயல்படுத்தியுள்ளோம். சரியான சொற்கள், அதாவது வேர் எடுத்த, புணர்ச்சி மற்றும் சாந்தி பிரிக்கப்பட்ட சொற்கள் அனைத்தும்  சராசரி மின்அகராதியில் காணலாம். இதுவே எளிதான படி.

இரண்டாவது படிதான் ஒரு சொல்திருத்தியின் சிறப்பிற்கும், தரத்திற்கும்,  முக்கியமானது; இந்த பதிவில் எப்படி மயங்கொலி எழுத்து பிழைகளை திருத்தலாம் என்று சில எண்ணங்களை சமர்ப்பிக்கிறேன்.

உதாரணம் உரையின் சொல் “பளம்” என்பது பிழை என்று கண்டறியப்பட்டது. இது பள்ளம், அல்லது பழம் என்று இரு மாற்றங்களை எழுத்தாளர் நினைத்தாலும் இதனை பிழையாக உள்ளீடு செய்துள்ளார். இங்கு ள-ல-ழ மயக்கம் காணப்படுகிறது.

இதனை கணினி “பலம்”, “பழம்” என்றும் மாற்றுகளை உருவாக்கி இதில் அகராதியில் உள்ளவற்றை மட்டுமே வடிகட்டி எழுத்தாளருக்கு பரிந்துரை செய்யவேண்டும்.

இதனை கொண்டு அணைத்து மயங்கொலி பிழைகளை திருத்தும் ஒரு தன்மை கொண்ட சொல்திருத்தியை உருவாக்கலாம். உதாரணம்,

வளர்ச்சி நிலையில் உள்ள, தற்போது மென்பொருள் வடிவமைப்பில் உள்ள சொல்திருத்தி ஓபன்-தமிழ் தொகுப்பில் காணலாம்: [எச்சரிக்கை: இது இன்னும் பொது பயன்பாட்டிற்கு பொருத்தமானதல்ல]

muthu@brightone:~/devel/open-tamil$ ./spell.sh -i
>> பளம்
சொல் “பளம்” மாற்றங்கள்
(0) பம், (1) பளகு, (2) உளம், (3) பள், (4) அளம்
, (5) ஆளம், (6) பழம்
வணக்கம்!

-முத்து அண்ணாமலை

கலிஃபோர்னியா, அமெரிக்கா.

சொல்வளம் – புதிர்

குறிப்பு : எப்படி விளையாடுவது ?

கீழ் உள்ள சொற்களை சதுரத்தில் கண்டெடுங்கள். சொற்கள் இடது->வலது, மேல்->கீழ் என்றும் அல்லது மாற்று வரிசையிலும் அமையும். விடைகளை அடுத்த வலை பதிவில் தருகிறேன். முடிந்தால் print அச்சிட்டு தாளில் செய்துபாருங்கள்.

சொற்கள்

எழில் தமிழ் கணிமை வெளியீடு நிரலாக்கம் நிரல்படுத்துதல் இயக்கு பட்டியல் அணி
கணம் வரிசைப்படுத்து திறமூலம் பொதுவெளி பயிற்சி தரவமைப்பு வழுதேடல் வாக்கியம் இலக்கணம்

புதிர்சதுரம்


க் மி நி ல் டு த் து ல்
து நி லா க் ம் க் தி வா
ழ் ம் யீ ம் க்
பொ தே டு ணி ட் மி மூ க் கி
து ம் வெ ம் க் மை டி
க் ல் வெ கு ம் ம்
ல் ளி ப் ரி மை ல் மை ம்
பு சை யி ப் ல் ப்
ம் ழி ம் வா ப் மை பு க்
பு ல் ல் ழு து ம் ம்
வெ வெ ளி யீ டு ம் தே டு யி
வெ ழி ணி மி ழ் த் ற்
ணி க் ம் பு து ல் ணி து சி

அம்மா இங்கே வாவா!

தமிழ் சொல்பேசி / கணினி வழி ஒலிப்பதுக்கான கட்டுமானம்

 

சொல்பேசி

தமிழ் உரைநடை, எழுத்து, செய்திகளை எந்திர வழி ஒலிப்பது பற்றி ஏற்கனவே நிறைய எழுதப்பட்டுள்ளது. நானும் அந்த வரிசையில் ஒரு பதிவு செயதேன்.

தற்போது இங்கு, பேராசிரியர் வாசு அவரது விட்ட இடத்தில் இருந்து அந்த ஒலி உச்சரிப்பு நிரலை  கொஞ்சம் மேம்பாடுகளை செய்து வருகிறேன் : github (Tamil-tts).

உரைவழி ஒலி – TTS

இதில் எனக்கு பிடித்த உரையில் இருந்து ஒலி தயாரிப்பு வழி (tts synthesis method) என்பது “unit selective synthesis by analysis method” எனப்படும். இதனை USS A/S என்றும் ஆராய்ச்சி வட்டங்களில் சொல்லப்படும். இதில் முக்கியமாக என்னவென்றால் இரு நிலைகள் உண்டு :உரை  பரிசோதனை, அடுத்து ஒலி தயாரிப்பு.

முதல் நிலை : உரை  பரிசோதனை

ஒரு உரை செய்தியாக இருக்கலாம், அல்லது உதவி கோரலாகவும் இருக்கலாம். இதன் இரண்டையும் கண்டறிவது உரை பரிசோதனையின் வேலை. அதாவது, “இந்திய அரசு சீன பூகம்ப அபாய நிலையில் உள்ள மக்களுக்கு உதவி அளிக்க முன்வந்தது” என்பது செய்தி வசிப்பவர்போல் ஒரே குரலில் சொல்லலாம். அனால் “காப்பாத்துங்க, வெள்ளம் நீர் கழுத்தை எட்டப்போகுது!” என்பதை உரத்த குரலில் மட்டும் தான் ஒரு எந்திர ஒலிப்பு சொல்லவேண்டும்.

மென்மேலும் தமிழில் homophones சமயோலி கொண்ட சொற்களை சரியாக உச்சரிப்பதற்கு தேவையான மொழியியல் திறனாய்வுகளும் இந்த நிலையில் மட்டுமே ஆகவேண்டும். இவற்றை சொர்கண்டு போன்ற wordnet திட்டங்கள் நமக்கு அளிக்க வாய்ப்பு undu. இதனை parts of speech tagger என்றும் சொல்வது வழக்கம். தமிழில் சமயோலி கொண்ட சொற்கள் எனக்கு சட்டென்று நினைவுக்கு வரவில்லை – இதனை உங்களுக்கு ஏதேனும் உதாரணங்கள் தெரிந்தால் சொல்லவும்.

சொல் இடம் சார்ந்த , சொற்றொடர் சார்ந்த இலக்கண விவரங்களை இத்தகைய POS-கள் உச்சரிக்கும் உரையுடன் கோர்த்து annotations-களாக அடுத்த நிலைக்கு அனுப்பும்.

கடை நிலை : ஒலி உருவாக்குதல்

ஒலி உருவாக்குதல் என்பது ஏற்கனேவே நம்மால் சேமிக்க பட்ட உச்சரிப்புகளை database தரவில் இருந்து எடுத்து கோர்த்து இந்த syllable போன்ற தனிதுவமான உதிர்ப்பூக்களான ஒலிகளை ஒரு பூமாலை போன்று கோர்வையான சொற்றொடர் உச்சரிப்பாக எழுதிவிடலாம். இதை செய்வதில் சில graph optimization கேள்விகளை உருவாக்கி அதன் தீர்வுகளை கண்டெடுத்தால் மட்டுமே நல்ல உச்சரிப்பு கிடைக்கும் என்பது ஒரு தரப்பின் பொறியியல் கணிப்பு.

இப்படிபட்ட ஒன்று தான் கிழே பார்க்கலாம் : “அம்மா இங்கே வாவா” என்ற சொல்லை உச்சரிப்பது பற்றிய கடைநிலை பரிட்சயம். எப்படி கணினி உச்சரிக்கலாம்? 18 வழிகள் உள்ளது:

tts-twitter

ஆனால் எது சரியானது? மேலும் இந்த ஆராய்ச்சியின் தொடர்ச்சியை பற்றி எழுதுவேன்.

முத்து.

 

மே 21 – எழில் மொழி பரிசோதனை வெளியீடு

வணக்கம்,
1. எழில் மொழி பரிசோதனை வெளியீடு மே மாதம் 21-ஆம் நாள்  வெளியீடு செய்யப்பட்டது; இந்த முறை சென்ற மாதம் செய்த மேம்பாடுகள் அனைத்தும் ஒருங்கிணைந்து Windows 64-bit தளத்தில் இயங்கும் வகை செய்யப்பட்டது.
   கிடைக்கும் மேம்பாடுகள் :
   (அ) license உரிமம் தெரியும் வகை செய்யப்பட்டது.
   (ஆ) அமைப்புகள் (settings) சேமிக்கும் வகை வசதிகள்
   (இ) சென்ற பரிசோதனை வெளியீதில் பிழை திருத்தங்கள் 
   (ஈ) எழில் இயக்கியில் பிழை செய்திகள் தமிழாக்கம் செய்தல் 
2. இதனை  http://ezhillang.org/download.html இங்கு பெற்று நீங்கள் ஒரு சிறுவர் சிறுமிக்கோ அல்லது ஒரு பள்ளிக்கூடத்தில் எழில் மொழியை பற்றி பேசலாம், அல்லது உங்கள் சுய பயன்பாட்டிற்கும் நீங்கள் பெறலாம்.
3. பிழைகள் இருந்தால் மறுமொழி கூறவும்.
நன்றி,
-முத்து

காண்டாமிருகம் எங்கே ?

விக்கிபீடியா – வெற்றி நடை!

தமிழ் கணிமை எப்போதுமே வளர்ந்து கொண்டே போகுமா ? இந்த வாரம் விக்கிப்பீடியா தமிழ் திட்டத்தில் 1 இலட்சம் கட்டுரைகளை எட்டியது. விக்கிபீடியா பங்களிப்பாளர்களுக்கும் தனி-தமிழ் (நா லேதண்டி) ஆர்வலர்களுக்கும்  வாழ்த்துக்கள்!

TOSS

ஒதுக்கப்பட்ட கோணம்

தமிழ் திறமூல திட்டங்கள் என்பது அக்ஷயப்பாத்திரம் கிடையாது; எங்களது நிலை பற்றி எனது ( opinionated ) கோணம்.

ஒரு பரிபால அமெரிக்க ராப் கலைஞர் ஜே.சி “Heaven” என்ற பாடலில்  கேட்கிறான்,

“Question religion, question it all
Question existence until them questions are solved”

இதற்கும் சாதாரணமாக தமிழ் கணிமை பத்தி எழுதும் இந்த வலைப்பூவில் என்ன சம்பந்தம் ? அதில் காண்டாமிருகம் எங்கே என்பதற்கும் தலைக்கும் காலுக்கும் முடிச்சு போடுறது என்ன ? நீங்களே சொல்லுங்கள்.

 

எழில் : முதல் பக்கம் வடிவமைப்பு

முதல் பக்கம் என்றாலே கொசம் சிக்கல். பிள்ளையார் சுழி, தென்னாடுடைய சிவனுக்கும் வணக்கம் எனவும் பல வணங்குத்தல்கள் உள்ளன. ஆனால் தமிழ் மொழிக்கு சிறப்பான ஒரு சின்னத்தை கொண்டு எழில் மொழியில் முதல் பக்கம் அமைக்கப்பட்டது.

small-ezhil-splash-5
படம் 1: எழில் மொழி முதல் பக்கம் – செயலியில் தொடங்குதல்.
எழில் – தமிழ் கணினி மொழி

“தமிழில் நிரல்படுத்தி கணிமை பழகுவோம்!” என்பது புதிய கொள்கை

படம் சில மணி நேரம் முன்னேற வடிவமைக்கப்பட்டது. எந்த தமிழ் எழுத்துருக்கள் என்று சொல்லமுடியுமா உங்களால் ?

நன்றி

-முத்து

 

 

இரு கிளை மரம் தரவு உருவம் – (binary tree data structure)

கணிமையில் நமது மாறிலி (variables) மற்றும் தரவு மதிப்புகளை (data values) வரிசை படுத்தியோ அல்லது சீரற்ற வழியில் ஒரே மாதிரி அடுக்கி தரும் தரவு உருவம்  வகையில் (data structure) ஒன்று ‘இரு கிளை மரம்’ (binary tree)- இதனை இரட்டித்த மரம் என்றும் சுருக்கி சொல்லலாம்.

மரம் – நிஜமாவா ?

எண் ‘2’-ஐ  வேர் என்றும், ‘5’, ’11’, ‘4’, ‘2’ என்ற எண்கள் இலைகள் ஆகவும் இந்த இரட்டித்த மரம் அமைந்திருக்கு.

இது இயற்கையில் உள்ள இயற்கை மரம் போலவே காட்சி அளிக்குமோ என்று சந்தேக பட்டால், அது சரியானது! மரம் என்பதற்கு எப்படி,

  1. வேர் (root)
  2. கிளை (branch)
  3. இலைகள் (leaves)

உள்ளதோ அதே போன்று இந்த இரட்டித்த மரம் தரவு வகையில் இதற்கு இணையான (isomorphic) அம்சங்கள் இருக்கு. இந்த பதிவில் இதை பார்க்கலாம்.

இரட்டித்த மரம் நடுவோம் – கட்டுமானம்

மேல் கண்ட படத்தில் உள்ள மரத்தை எப்படி உருவாக்குவது ? இது சுலபம்.

மரத்தின் எல்லா மதிப்புகளையும்  நுனிகள் (nodes) என்று பெயரிடுவோம். இரட்டித்த மதத்தின் குணம் என்ன என்றால், நுனிகளில் இரண்டு கிளைகள் இருக்கும் – வலது (right) நுனி, இடது (left) நுனி, மற்றும் நுனியின் மதிப்பு (value).

முதலில் வேர் நுனி என எண் ‘2’ நியமிக்கவும். இந்த வேர் நுனியிர்க்கு இரண்டு வலது கிளை நுனி (right node) என எண் ‘5’-ம், இடது கிளை நுனி (left node) என எண் ‘7’-ம் அமைக்கவும்.

அடுத்து,  நுனி 7 என்பதில் வலது நுனி 6, இடது நுனி 2 எனவும் இணைக்கவும். நுனி 5-இல் வலது நுனி 9, மற்றும் 9-இன் இடது நுனி 4 எனவும் அமைக்கவும்.

கடைசியாக நுனி 6-இன் வலது புரம் 11 எனவும் இடது புரம் 5-உம் அமைக்கவும்.

இதனை போல் தொடர்ச்சியாக செய்தால் நமக்கு கணினி நினைவில் ஒரு ‘இரட்டித்த மரம்’ என்ற தரவு  உருவத்தை நீங்கள் செய்யலாம்.

விளக்க நிரல் எடுத்துகாட்டுகள் 

இந்த பதிவில் உள்ள நிரல்களை Github-இல் இருந்து இயக்கி பாருங்கள்.

பைதான் மொழியில், இதனை கீழ்கண்டவாறு செய்யலாம்:

root = make_tree(2)
node5 = make_tree(5)
node7 = make_tree(7)
set_right(root,node5)
set_left(root,node7)

node9 = make_tree(9)
node4 = make_tree(4)
set_right(node5,node9)
set_left(node9,node4)

node2 = make_tree(2)
node6 = make_tree(6)
set_right(node7,node6)
set_left(node7,node2)

node11 = make_tree(11)
node5 = make_tree(5)
set_right(node6,node11)
set_left(node6,node5)

எழில் மொழியில், இதனை கீழ்கண்டவாறு செய்யலாம்:

நிரல்பாகம் மரம்_செய்( அளவு )
# left, right,value
ம = {“இடது_நுனி”: [],”வலது_நுனி”: [], “மதிப்பு”:அளவு}
பின்கொடு ம
முடி

நிரல்பாகம் வலது_நுனி_செய்( வேர்நுனி, நுனி )
வேர்நுனி[“வலது_நுனி”] = நுனி
முடி

நிரல்பாகம் இடது_நுனி_செய்( வேர்நுனி, நுனி )
வேர்நுனி[“இடது_நுனி”] = நுனி
முடி

# இரட்டித்த மரம் நடுவோம் – கட்டுமானம்
வேர் = மரம்_செய்(2)
நுனி5 = மரம்_செய்(5)
நுனி7 = மரம்_செய்(7)
வலது_நுனி_செய்(வேர்,நுனி5)
இடது_நுனி_செய்(வேர்,நுனி7)

நுனி9 = மரம்_செய்(9)
நுனி4 = மரம்_செய்(4)
வலது_நுனி_செய்(நுனி5,நுனி9)
இடது_நுனி_செய்(நுனி9,நுனி4)

நுனி2 = மரம்_செய்(2)
நுனி6 = மரம்_செய்(6)
வலது_நுனி_செய்(நுனி7,நுனி6)
இடது_நுனி_செய்(நுனி7,நுனி2)

நுனி11 = மரம்_செய்(11)
நுனி5 = மரம்_செய்(5)
வலது_நுனி_செய்(நுனி6,நுனி11)
இடது_நுனி_செய்(நுனி6,நுனி5)

# மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது
ம_வரிசை = பட்டியல்()
வரிசையில்_எடு( வேர், ம_வரிசை )
பதிப்பி ம_வரிசை

மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது :

கேள்வி : “வேர் நுனி மட்டும் கிடைத்தால் மரம் நுனிகளை அனைத்தயும் வரிசையில் எப்படி எடுப்பது ? ”

இது ஒரு சராசரியான செயல்பாடு; எப்போது இரட்டித்த மரம் என்றாலும் உடனடியாக அந்த இடத்தில் “அனைத்து நுனிகளை எடுக்க” என்ற செயல் புரியும் தேவை உங்கள் கணிமை programming-இல் வந்து விடும்.

சரி இதன் கேள்விக்கு விடை ஒரு induction வழியாக பார்க்கலாம்;

  1. நிலை : மரத்தில் வேர் மற்றும் உள்ளது – (மொத்தம் 1 நுனி)
    • வேர்[“மதிப்பு”] மட்டும் அணுகினால் போதும்.
    • நமது மரம் படத்தில், 2
  2. நிலை : மரத்தில் 2 அல்லது 3 நுனிகள் மட்டும் உள்ளன.
    • வேர்[“இடது_நுனி”][“மதிப்பு”],   வேர்[“மதிப்பு”], வேர்[“வலது_நுனி”][“மதிப்பு”] என்ற வரிசையில் நுனிகளை சிந்திப்போம்
    • நமது மரத்தில், 7, 2, 5 என்றும் காண்போம்
  3. நிலை : மரத்தில் 4,5,6,7 அல்லது 8 நுனிகள்
    1. இரண்டாம் படியில் வேர் என்ற மாறிலிக்கு பதில் வேர்[“இடது_நுனி”], வேர்[“வலது_நுனி”] என்றும் கூடுதலாக தொடக்கத்தில் மாற்றத்தை செய்து செயல் பட்டால் இது முடிந்து விடும்

ஆகவே நமது செயல்முறை வழி (algorithm) என்பது இதன்போல் காட்சி அளிக்கும்:

வரிசையில் அணுகு ( உள்ளீடு : மரம் வேர்_நுனி )

படி 1: மரத்தின் இடது பக்கத்தை வரிசையில் அணுகு, எடு

படி 2: தன்னிலை வேர்_நுனி மதிப்பை எடு

படி 3: மரத்தின் வலது பக்கத்தை வரிசையில் அணுகு, எடு

இதுவே recursion சார்ந்த செயல்முறை வழி. இதனை ‘inorder traversal’ (நேர் வரிசையில் அணுகுதல் என்றும் சொல்லலாம். இது எப்படி செயல்படுகிறது என்பதை ஒரு காகிதத்தில் நீங்களே எழுதி பார்த்தால் இன்னமும் எளிமையாக இருக்கும்.   காணொளிகளை மற்ற மென்பொருள் பறிச்சியாளர்கள் youtube-இல்பார்க்கவும் பதிவித்தார்கள்.

எழில் மொழியில் இந்த நேர் வரிசை அணுகல் என்பதை நிரல்க்கி பார்த்தால்,

# walk in in-order; ப – பட்டியல் என்ற மாறிலி (ப- variable is a list)
நிரல்பாகம் வரிசையில்_எடு(வேர்,ப)
@( வேர்[“இடது_நுனி”] != [] ) ஆனால்
வரிசையில்_எடு( வேர்[“இடது_நுனி”] , ப)
முடி

பதிப்பி “%d,”, வேர்[“மதிப்பு”]
பின்இணை( ப, வேர்[“மதிப்பு”] )

@( வேர்[“வலது_நுனி”] != [] ) ஆனால்
வரிசையில்_எடு( வேர்[“வலது_நுனி”] , ப)
முடி

பின்கொடு ப
முடி

பைதான் மொழியில் இதனை, inorder traversal என்றும் எழுதலாம்

# walk in in-order
def walk_inorder(root,listval):
if root.left:
walk_inorder(root.left,listval)
#print(“%d, “%root.value)
listval.append(root.value)
if root.right:
walk_inorder(root.right,listval)
return

இதே அணுகுமுறையை, வலது, இடது மாற்றியும் செய்தால் அதற்கு மற்ற விளைவுகள் உண்டு; இதனால் மரத்தின் நுனிகளை அணுக மூன்று முறைகள் சொல்லுவார்கள்,

  1. நேர் வரிசை அணுகல் – inorder traversal
    • அணுகும் வரிசை: இடது, வேர், வலது
  2. தன் முன் வரிசை அணுகல் – pre-order traversal
    • அணுகும் வரிசை: வேர்இடது, வலது
  3. தன் பின் வரிசை அணுகல்  – post-order traversal
    • அணுகும் வரிசை: இடது, வலது, வேர்

அடுத்த அத்தியாயத்தில் இந்த மூன்று அணுகு முறை இவற்றிகும் என்ன சிறப்பு அம்சங்கள் உண்டு என்றும், வேறு இரட்டித்த மரம் செயல்பாடுகளை பார்க்கலாம்.