தமிழ் உரை சம்பந்தமான சில புதிர்கள் (3) – மறைந்த மெய் புள்ளிகள்

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

1. அறிமுகம்

எனக்கு இந்த சிக்கல் இருப்பதன் காரணம், 1910-இல் ஆர்டன் பாதரியார் இயற்றிய “A progressive grammar of common Tamil,” என்ற நூலின் மறுபதிப்பு பிரதியில் சில/பல சொற்கள் விட்டுப்போயிருந்தன. மறுபதிப்பு செய்யும் நிறுவனமோ, கலிபோர்னியா லாசு ஏஞ்சலஸ் பல்கலைக்கழகத்தில் உள்ள பிரதியினில் இருந்து எப்படியோ (கூகிள் புத்தகங்கள் வழியாகவா?) ஒரு புத்தகத்தின் மின்வடிவத்தை சரிபார்க்காமல் அப்படியே அச்சு செய்து அமேசான் சந்தையில் விற்று அதுவும் என் கைக்கு கிடைத்தது. பல இடங்களில் மெய் புள்ளிகளின் மறைவு – சொற்பிழைப்போல் பாவிக்கும் இந்த பிழைகள் இந்திர வழி செயல்திருத்தத்தால் நுழைக்கப்பட்டவை. நுழககபபடடவை!

மெய் புள்ளிகளின்றி செம்புலப்பொயல்நீரார் கூற்றி சங்க இலக்கியத்தில் இருந்து இப்படியே தோன்றும்,

யாயும ஞாயும யாராகியரோ

எநதையும நுநதையும எமமுறைக கேளிர

இதனை எப்படி நாம் சீர் செய்வது? இதுதான் நமது இன்றைய சிக்கல்.

2. அல்கோரிதம்

உள்ளீடு

  • சொல் என்பதை எழுத்துச் சரமாக தறப்படுகிறது. இதனை சொ என்ற மாறியில் குறிக்கின்றோம்.

வெளியீடுகள்

  • மறைந்த மெய்கள் இருந்தால் அவற்றை மற்றும் திருத்தி புதிய சொல் வெளியீடு செய்வதற்கு.

அல்கோரிதம்  முன்-நிபந்தனைகள்

  1. உள்ளீட்டு சரம் என்பதில் வேறு எந்த சொற்பிழைகளும் இல்லை
  2. சரம் என்பதின் இடம் ‘‘ என்பதில், சரம் எழுத்து சொ[இ] என்ற நிரலாக்கல் குறியீட்டில் சொல்கின்றோம்.
  3. சரம் எழுத்து சொ[இ], தமிழ் எழுத்தாக இல்லாவிட்டால் அதனை நாம் பொருட்படுத்துவதில்லை
  4. சரம் எழுத்து சொ[இ], உயிர், மெய், உயிர்மெய் (அகர வரிசை தவிர்த்து), ஆய்த எழுத்து என்றாலும் அவற்றில் எவ்வித செயல்பாடுகளையும் செய்யப்போவதில்லை
  5. ஆகவே, சரம் எழுத்து சொ[இ] என்பது உயிர்மெய் எழுத்தாக அதுவும் அகரவரிசையில் {க, ச, ட, த, ப, ர, .. } இருந்தால் மட்டும் இதனை செயல்படுத்துகின்றோம்.

அல்கோரிதம்  செயல்பாடு

  1. மேல் சொன்னபடி, நாம் கண்டெடுக்க வேண்டியது உள்ளீட்டு சரத்தில் அகரவரிசை உயிர்மெய்களில்  சரியான உயிர்மெய் எழுத்து வருகிறதா அல்லது மெய் புள்ளி மறைந்து வருகிறதா என்பது மட்டுமே!
  2. இதனை சறியாக செய்தால் அடுத்த கட்டமாக பிழைஉள்ள இடங்களில் புள்ளிகளை சேற்றுக்கொள்ளலாம்
  3. மேல் உள்ள 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 மாற்றுகள் கிடைக்கும். அவையாவன,

['கணனன',
 'கணனன்',
 'கணன்ன',
 'கணன்ன்',
 'கண்னன',
 'கண்னன்',
 'கண்ன்ன',
 'கண்ன்ன்',
 'க்ணனன',
 'க்ணனன்',
 'க்ணன்ன',
 'க்ணன்ன்',
 'க்ண்னன',
 'க்ண்னன்',
 'க்ண்ன்ன',
 'க்ண்ன்ன்']

இந்த விடையின் மாற்று சொற்களை unigram அல்லது bigram யுகிப்பு சார்புகளின்படி மதிப்பிட்டால் கீழ்கண்டவாறு கிடைக்கின்றது,

[(‘க்ண்ன்ன்‘, 28.0),
(‘க்ணன்ன்’, 24.83912971793407),
(‘க்ண்னன்’, 24.39197168659185),
(‘க்ண்ன்ன’, 24.0),
(‘கண்ன்ன்’, 23.60384297446045),
(‘க்ணனன்’, 21.231101404525926),
(‘க்ணன்ன’, 20.83912971793407),
(‘கணன்ன்’, 20.44297269239452),
(‘க்ண்னன’, 20.39197168659185),
(‘கண்னன்‘, 19.9958146610523),
(‘கண்ன்ன’, 19.60384297446045),
(‘க்ணனன’, 17.231101404525926),
(‘கணனன்’, 16.834944378986375),
(‘கணன்ன’, 16.44297269239452),
(‘கண்னன’, 15.995814661052302),
(‘கணனன’, 12.834944378986375)]
(‘க்ண்ன்ன்’, -11.553147747485053)]

இந்த சமயம் நமக்கு சரியான விடைகிடைக்கவில்லை; இதனுடன் அகராதிபெயர்கள் அல்லது classification செயற்கைப்பின்னல்களை பயன்படுத்திப்பார்க்கலாம் என்றும் தோன்றுகிறது.

இந்த அல்கோரிதத்தை ஓப்பன்-தமிழ் பைத்தான் நிரலாக எழுதினால் இப்படி:

மேலும், செம்புலப்பெயல்நீரார் கூற்றை மெய்கள் சேர்த்தால், இப்படி வருகின்றது. இதில் 7-இல் ஆறு சொற்கள் சரியாவருகிறது.

  1. [(‘யாயும்‘, 20.0), (‘யாயும’, 16.0)]
  2. [(‘ஞாயும்‘, 20.0), (‘ஞாயும’, 16.0)]
  3. [(‘யாராகிய்ரோ‘, 36.0), (‘யாராகியரோ‘, 31.94703511524359)]
  4. [(‘எந்தையும்‘, 32.0),(‘எநதையும்’, 28.83912971793407),(‘எந்தையும’, 28.0),(‘எநதையும’, 24.83912971793407)]
  5. [(‘நுந்தையும்‘, 36.0),
    (‘நுநதையும்’, 32.83912971793407),
    (‘நுந்தையும’, 32.0),
    (‘நுநதையும’, 28.83912971793407)]
  6. [(‘எம்முறைக்‘, 32.181004231607204),
    (‘எமமுறைக்’, 28.543012694821613),
    (‘எம்முறைக’, 28.181004231607204),
    (‘எமமுறைக’, 24.543012694821613)]
  7. [(‘கேளிர்‘, 20.0), (‘கேளிர’, 16.0)]

மேலும் தொடர்புக்கு உங்கள் விவரங்களை இங்கு சேர்க்கவும்.

ஆடுகளம் – 2020

Tamil projects for 2019-2020

Over the course of this year, since translating Ruby Kin, and preparing a summary of 3 years work on spell-checker for Tamil Internet Conference – 2019, I’ve been thinking of next level of interesting projects.

The following have come to mind, expressed in Twitter @ezhillang in various forms. Here they are in simply chronological order,

  1. Translating “Data Structures and Algorithms” book in Tamil
  2. Translating/Writing a “Debugging Techniques” book in Tamil: ‘கணினி செயல்முறை நிரகளில் வழுநீக்கம்‘ – பயிற்சி, நூல்
    • Debugging techniques are important learning milestone for any professional software/hardware developer which are usually learnt on the job and essentially skipped in academia (perhaps for practical purposes).
  3. (Research/Proof-of-concept) Viterbi algorithm based spelling correction algorithm for Tamil
  4. (Research/Proof-of-concept) Concordance based context ambiguity resolution for Tamil spelling correction.

Contingent on our levels and degrees of success we can share our work in forums like Tamil Internet Conference, ACL or ACM, etc.

நிவாடா மாகனத்தில் மலையேரும் சமயம் மொட்டை வெயிலில் எடுத்த தம்படம் 🙂

As always collaborators are welcome: email: ezhillang -AT- gmail -DOT- com

சொல்திருத்தி – தெறிந்தவை 4

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

படம் 1: தமிழ் 99 – விசைப்பலகை [ஆப்பிள் iOS 10.13-இல் உள்ளபடி]

1 ஏன், எப்படி

விஷயத்துக்கு வாரோம். புதுசு என்ன ? அதாவது தட்டச்சு பிழைகள் என்பது தமிழில் ஒரு வழி மட்டும் வருகின்றன – விசைபலகை வழியாக (typographical errors originate from keyboard). இதன் காரணமாக, நாம் ‘பாம்பின்கால் பாம்பு அறியும்’ என்பது போல், இந்த சிக்கல் உறுவாகும் இடத்தின் விசைப்பலகையின் கட்டமைப்பின் வழியாக இதனைத் தீர்வு காண முடியும். இதனை ‘அருகிலேயே உள்ள விசைப் பிழை’ என்றும் [nearest neighbor key error] சொல்லாம்.

2 செயல்முரை அல்கோரிதம்

தற்சமயம் தமிழ் 99 என்ற விசைபலகையில் உள்ளீடு செய்வது என்ற கொள்வோம். இதில் உள்ளீட்டு பிழை என்பது ‘இ’ என்ற எழுத்தை இடும் சமயம், ‘அ’, ‘ஈ’, ‘உ’, ‘ஓ’,’ஔ’ என்று கைவிரல் தவரி சொடுக்கினால் ‘இன்பம்’ என்ற சொல் உள்ளீடு ‘அன்பம்’ அல்லது ‘உன்பம்’ என்றும் மாற்றமடைவதற்கு வாப்புண்டு.

சரி: இன்பம், தவறு: அன்பம், உன்பம்

இப்போது ஆவனத்தில் இப்படி ஒரு பிழை வந்தது ‘அன்பம்‘ அல்லது ‘உன்பம்’. இதனை நாம் சொல் உள்ளீட்டு பிழை என்ற இந்த செயல்முறை அல்கோரிதத்தின் வழி திருத்தலாம். இந்த தட்டச்சுபிழை எழுத்து பிழை வாய்ப்புகள் அனைத்தும் ஒரு மயக்க அணியில் (‘confusion matrix’ என்று சொல்லக்கூடிய) நிரலிக்கு குறிப்பிட்டிருக்கவேண்டும். இதனை படம் 2-இல் காட்டுகிறோன்.

படம் 2: தமிழ் 99 iOS ஆப்பிள் திரன்பேசியில் உள்ள விசைபலகை குழப்ப/மயக்க அணி

இதற்கு மேற்கண்ட அல்கோரிதத்தை இயக்கினால் 56 மாற்றங்களைத்தரும். இவற்றில் சரியான் சொற்களை மட்டும், குறைந்த திருத்த தொலைவில் இருப்பவற்றை மட்டும் நாம் ஏற்றுக் கொண்டால் அதில் ‘இன்பம்’ என்ற சரியான் சொல் இருக்கிரது! இதுவே தட்டச்சு பிழை சொல்திருத்தியின் இயக்கம். இதனைப் பற்றி பல அறிவியலாளர்களும் எழுதியுள்ளார்கள் என்பது புதிய செய்தி இல்லை என்பதையும் இங்கு பதிவு செய்வது கவணத்தில் கொள்ளவேண்டியவை.

  1. ஈன்பம்
  2. இன்பம்
  3. ஆன்பம்
  4. உன்பம்
  5. ஊன்பம்
  6. அன்பம்
  7. ஔன்பம்
  8. ஈற்பம்
  9. ஈப்பம்
  10. ஈக்பம்
  11. ஈட்பம்
  12. ஈம்பம்
  13. இற்பம்
  14. இப்பம்
  15. இக்பம்
  16. இட்பம்
  17. இம்பம்
  18. ஆற்பம்
  19. ஆப்பம்
  20. ஆக்பம்
  21. ஆட்பம்
  22. ஆம்பம்
  23. ஈன்னம்
  24. ஈன்மம்
  25. ஈன்றம்
  26. ஈன்லம்
  27. ஈன்கம்
  28. ஈன்ஙம்
  29. ஈன்டம்
  30. இன்னம்
  31. இன்மம்
  32. இன்றம்
  33. இன்லம்
  34. இன்கம்
  35. இன்ஙம்
  36. இன்டம்
  37. ஆன்னம்
  38. ஆன்மம்
  39. ஆன்றம்
  40. ஆன்லம்
  41. ஆன்கம்
  42. ஆன்ஙம்
  43. ஆன்டம்
  44. அன்னம்
  45. அன்மம்
  46. அன்றம்
  47. அன்லம்
  48. அன்கம்
  49. அன்ஙம்
  50. அன்டம்
  51. அன்ணம்
  52. அன்தம்
  53. அன்ரம்
  54. அன்ளம்
  55. அன்எம்
  56. அன்வம்

4 செயல்படுத்துதல், குறிப்புகள்

இந்த அல்கோரிதத்தின் நிரலாக்கம் இங்கு ஓப்பன் தமிழ் திரட்டில் சேர்க்கப்பட்டது. இதனை நீங்கள் முழுதேடலில் இடம் கொடுத்தால் 2398 விடைகள் கிடைக்கும் – அதாவது முழு 4-எழுத்து சொல்லின் 4-எழுத்து தொலைவில் உள்ள திருத்தங்கள் எல்லாவற்றையும் தேடுவதால் உண்டாகும் தகவல் வெள்ளப்பெருக்கு; சாதாரணமாக 1 அல்லது 2 எழுத்துப்பிழைகள் மட்டுமே உள்ளன என்பது அறிவியலாளர்கள் கணிப்பு. இதை நாம் செயல்படுத்தும் ‘tree pruning search‘ அல்கொரிதம் வகையினால் நாம் 56 மாற்றங்களுக்குள் மட்டுமே தேடல்களை நடத்தி இந்த தட்டச்சு கைவிரல் தவரான உள்ளீட்டிற்கு தீர்வு காணலாம்.

இதன் சிக்கல் அளவு [computational complexity] என்பது, ஒரு n-எழுத்து சொல் என்று கொண்டால், O(k1 x k2 x k3 … kn ) = O( kn ) என்று அதிக பட்சமாக இருக்கலாம் என்று [ஏதோ ஒரு k > 0 எண்ணால்] என்று நம்மால் காட்டமுடியும்.

சொல்திருத்தி – தெறிந்தவை 3

இந்த தொடரில் இதுவரை ஆய்வுகளைப்பற்றி மட்டுமே இதுவரை பார்த்தோம். இப்போது சில செயல்முரை அல்கொரிதங்களை பார்க்கலாம்.

1 மேலோட்டமான சில குறிப்புகள்

சொல்திருத்தியில் பிழையான சொல் ஒன்றை முதலில் கண்டரிந்தபின், அதற்கு எப்படி ஒரு மாற்றை [என்ற ஒரு தோராயமான சொற்பிழை நீக்கப்பட்ட பொருத்தத்தை எப்படி] உருவாக்குவது ? இதற்கு தேவை திருத்தத் தொலைவு d.

இயற்ப்பியலில், புள்ளியியலில் இவ்வாரான் கேள்வியை ஒரு optimization வடிவத்தில் மாற்றி இதனை தீர்வுகாணலாம். இதனைப்போல் சொல்திருத்தியில்,

மாற்றுச் சொல் = arg-min [ d[ச,த] ]   

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

2 தொலைவு

தொலைவு – இரு சொற்களுக்கும் உள்ள நெறுக்கத்தை நாம் சொல்திருத்தியில் கணக்கிட வேண்டிய தேவை இருக்கிரது. ஏனெனில், ஒரு தவரான் சொல் உரையில் உள்ளீடு செய்யப்பட்டிருந்த்தால் அதற்கு மாற்றை தானியங்கி வழியில் கண்டறிய [அதவது இதன் மாற்றுச்ச்சொல்] இதற்கு பொருத்தமாகவும், நேருக்கமாகவும் இருக்கும் என்பது கணினியாளர்களும், மொழியியலாளர்களும் ஒப்புக்கொண்ட ஒரு கோட்பாடு. இதனை செயல்படுத்த கணினியாளர்கள் கொண்ட ஒரு மதிப்பீடு தொலைவு. இதனை திருத்தத் தொலைவு என்று சொல்வார்கள் [edit-distance].

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

இதன் பொருள் என்ன ? இதன் அமைப்பு எப்படிபட்டது ? கணிதவியலில், தினசரி வாழ்வில் எப்படி தொலைவு நிர்னயிக்கப்படுகிரது என்து போல், ஒரே இடத்தில் உள்ள பொருளுக்கும் அதே பொருளுக்கும் தொலைவு எதுவும் இல்லை – 0. அதே மாதிரி ஒரே சொல்லிர்கும் அதே சொல்லின் நகலுக்கும் தொலைவு 0. பிரகு, உங்கள் வீட்டிற்கும் உங்கள் பக்கத்துவீட்டிற்கும் தொலைவு என்ன ? தொலைவு 1 அல்லது கூடுதலாகவே இருக்கவேண்டும் இல்லையா ? பக்கத்து வீட்டார்க்கும் உங்கள் வீட்டிற்கும் உள்ள தொலைவு, உங்கள் வீட்டிற்கும் அவர்களது வீட்டிற்கும் உள்ள தொலைவும் ஒரேபடியானதாக இருக்கும். d[a,b] = d[b,a] என்பது ‘commutativity‘ என்ற சார்பின் குணத்தை இந்த திருத்த தொலைவு சார்பும் கொண்டது. [அதையும் – ‘போத்திக்குனு படுத்துக்கலாம், படுத்துக்குனு போத்திக்கலாம்‘ என்று பல முதிய தமிழ் மைக்கில் ஜாக்சன்கள் சொல்லியதை நினைவு கொள்ளலாம்]. அதுவே பொது அறிதல். இதைப்பொல குணங்களைக்கொண்ட சார்புகளை கணிதவியலில் ‘metric‘ என்றும் சொல்வார்கள் – அதாவது அளக்கும் சார்பு.

3 சிரிய எடுத்துக்காட்டு

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

அகராதியில் உதாரனத்திற்கு 5 சொற்கள் இருக்கு என்று மட்டும் கொள்ளல்லாம்.

அகராதி A என்பதில் [‘அவிழ்’,’அவல்’,’அவள்’,’தவில்’,’தவள்’] என்ற் சொற்கள் இருக்கு என்றும் உள்ளிட்டு சொற்கள் ‘ஏவள்’, ‘இவல்’ என்று கொடுக்கபட்டது என்றும் கொள்வோம். இதற்கு என்ன மாற்றுக்கள் ?

பகுதி ஒன்றின் படி இந்த புள்ளியியல் குரைந்த பட்ச தெடலை பைத்தான் மொழியில் இப்படி எழுதலாம்:

இதனை இயக்கினால் நாம் பார்கக்கூடிய வெளியீடு இப்படி; அதாவது நமது சிரிய சொல்திருத்தி அல்கொரிதம் ‘ஏவள்’ என்பதை ‘அவள்’ என்றும், ‘இவல்’ என்பதை ‘அவல்’ என்றும் மாற்றாக பரிந்துரைக்கிரது. மேலும் கவனித்து பார்த்தால் ‘ஏவள்’ என்பது ‘தவள்’ என்பதற்கும் நெருக்கமான தொலைவில் உள்ளது ‘distance’ என்ற தொலைவு பட்டியலில் தெறியும்.

ஒப்பன் தமிழ் நிரல் மற்றும் இயக்கிய வெளிப்பாடு இங்கு.

மேலும் மற்ற அல்கோரிதங்களைப் பற்றி அடுத்த பதிவுகளில் மேலோட்டமாக பாற்கலாம்.

சொல்திருத்தி – தெறிந்தவை 2

சென்ற பதிவில் ஒரு தொடக்கத்தை ஆரம்பம் செய்தோம்; இந்த பதிவில் அதே வேகத்தில் தொடர்வோம். இடைவெளியில் மூன்று முக்கியமான அறிவியல் ஆராய்ச்சிசிகளை பற்றி உங்கள் கவணத்தை ஈர்த்து செல்ல விடுங்கள்.

குருட்டுப்புலி ருட்டுப்புலி, ஓக்லாண்டு, கலிபோர்னியா. 2019. படம்: முத்து அண்ணாமலை.
Blind Tiger, Oakland, CA.
குருட்டுப்புலி, ஓக்லாண்டு, கலிபோர்னியா. 2019. படம்: முத்து அண்ணாமலை

1 முதல் ஆய்வுகளின் முடிவு

சொல்திருத்திகளின் சவால்கள் – ஒரு கணக்கெடுப்பும், மேலோட்டமான விளக்கமும் என்ற தலைப்பில் கேரன் குகிச் என்ற ஆரய்ச்சியாளர் Techniques for automatically correcting words in text 1992-இல் ACM சஞ்சிகையில் அற்புதமாக விளக்கம் அளித்துள்ளார். இது ஒரு கணக்கெடுப்பு என்பதால் 63 பக்கங்கள் கொண்டதாக உள்ளது. கண்டிப்பாக சொல்திருத்தியில் ஆராய்ச்சி செய்ய முனைபவரும், செயல்படுத்துபவரும் இதை வாசித்தல் வேண்டும்.

2 சொந்தங்கள் அவை கண்ட அறிவு

அடுத்து எனது வாசிப்பில் நான் அலசி சல்லடைபோட்டு மீன்பிடித்ததில் இணைய வலையில் சிக்கிய மீன் – தங்கமீன் – இந்த துருக்கி அறிவியலாளர் குழு எழுதிய 1994-இல் வெளிவந்த இந்த கட்டுரை – ஒட்டு மொழிகளினுள் உண்டான அம்சங்களில் ஒரு சொல்திருத்தியை உருவாக்குவது எப்படி – Kemal Oflazer , Cemaleddin Güzey, Spelling correction in agglutinative languages,  PDF என்பதை மைய்யமாகக்கொண்டு கணிமை கோட்பாடுகளில் செயல்முறைகளை சாட்சியப்படுதினார்கள். ஃபின்னிஷ், துருக்கி போன்ற மொழிகள் தமிழைப்போல் ஒட்டு மொழி என்ற சொல்லடல் இலக்கண வகைப்படுத்தப்பட்டவை. ஃபின்னிஷ்-தமிழ் தொடர்பு மிக பெரியது – ஐராவதம் அவர்களைக் கேளுங்கள், இல்லை சிந்து சமவெளியில் போய் பாருங்கள் [விளையாட்டாதான்]!

3 கண் கெட்டபின் சூரிய நமஸ்காரம்

மூன்றாவதாக நான் சொல்வது பொதுவில் ‘எங்க அப்பன் குதிருக்குள்ள இல்லை’ என்ற பொது இரகசியமாக உள்ள தனபால் – கீதா அண்ணா பல்கலை அறிவியலாளர்களின் 2003-இல் வெளிவந்த கட்டுரை. இதில் பலவிதிகளை நாம் நேரடியாகவும், மேம்பாடு செய்தும் செயல்படுத்தலாம். “Tamil spell checker,”  என்று T. Dhanabalan, R Parthasarathi… – Sixth Tamil Internet 2003

4 அடுத்த படியாக

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

Google-இல் பொறியாளர் வேலை

உலகில் தலைசிறந்த பொறியாளர் ஆண்-பெண்கள் Google-இல் வேலை செய்வதாக கேள்வி. ஆமாம் நனும், நீங்களும் தினமும் கோடு, ரோடு எல்லம் தான் காலா காலமாக போடுகிரோமே அப்படி கூகிளில் என்ன புளியகரச்சு ஊத்திராங்க ?

படம்: கணினி பொறியாளர் வேலைக்கு தயாராக்கும் நேர்க்காணல் புத்தகங்கள்!

சரி.

இதுதாங்க – நம்ம திக்கி தினரி, Stack-Overflowவில் பார்த்து விடை காணுவதில்லாமல் அல்கோரிதங்களில் புலியாகவும் இருப்பது இவர்களின் முதன்மை சிறப்பு!

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

  1. ஒரு கணினி பொறியியல் பட்டம் பெற்றும், அதில் கணினி நிரல்கள் வடிவமைப்பதில் வித்தகராக தேற்சி பெருங்கள். இது இல்லட்டியும் பரவாயில்லை.
  2. சில பிரசித்தி பெற்ற வலைப்பூ இருக்கிரது – அவற்றையும் படியுங்கள்; 1 இணைப்பு, 2 இணைப்பு
  3. சில நேர்காணல் புத்தகங்களைப் படியுங்கள்; இவை
    1. ‘Cracking the coding interview,’ – Gayle Laakman இங்கு
    2. ‘Programming interviews exposed’ – John Morgan, et-al இங்கு
  4. சில நல்ல கணினி செயல்முறை புத்தகங்கள் பற்றியும் படியுங்கள்; இவை பற்றி முதல், இரண்டாம் கட்டுரைகள் எற்கணவே இங்கும் [முதல்], இங்கும் [இரண்டு].

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

ஆமவடை

ஏற்கணவே பதிவு செய்த  இடத்தில் இருந்து தொடருவோம்:

ஆமவடை

படம் 1: ஆமவடை

Corollary 2 of  Theorem 3: ஒரே சொல்லில் எழுத்து இரடிக்கப்பட்டால் அந்த சொல் டோரசில் ஒரு சுழலுடன் [loop] கொண்டபடி அமையும்.

Lemma 2:  படுக்கவசமாகவும், நிமிர்ந்துவசமாகவும் அமைகப்பட்ட சொர்கள் மொழியில் இல்லாதவை.

Corollary 3 or Theorem 3: டோரசில் படுக்கவசமாகவும், நிமிர்ந்துவசமாகவும் பாதைகள்/எழுத்துக்கள் இல்லாதவை.

Theorem 4: ஒரு அகராதியில் உள்ள சொர்கள் அனைத்தையும் டோரசில் பிரதிபலித்தால் அந்த குறுக்கிடும் இடங்களின் [intersecting points] ஒன்று அல்லது மெர்பட்ட சொற்களை] எண்ணிக்கை அளவை மிக குறைவாக்கும் வண்ணம் அமைக்க முடியாது. அதாவது ஒரு அகராதியின் சொற்கள் அனைத்து எவ்வித அமைப்பில் உள்ள டோரசானாலும் சரி அதன் குறுக்கிடும் இடங்களின் எண்ணிக்கை மாராது. இது ஒரு மாறிலி [invariant].

Corollary 1 of Theorem 4: மேர்கண்ட டோரசில் [அதன் ஒரு பிரதிபலிப்பில் – ‘அ,ஆ,இ,ஈ, … ,ஒ,ஓ,ஔ‘ என்றும் ‘கசடதபரயரலவழள – ….’  என்றும் வரிசையிலோ, அல்லது வேறு பரிமாணங்களில்  அடுக்கியிருந்தால்] ஒவ்வொரு அகராதிக்கும் ஒரு சிரப்பான குறுக்கிடும் இடங்களின் எண்ணிக்கை கிடைக்கும். இந்த எண் அகராதியின் கையொப்பம் [signature] என்றும் சொல்லாம்.

Theorem 5: டோரசில் உள்ள ஓவ்வொரு அகராதி சொல்லும் ஒரு பாதை என்று கொள்ளலாம். சொல்லின் தொடக்க எழுத்து  பாதையின் தொடக்கத்தையும், சொல்லின் கடைசி எழுத்து பாதையின் முடிவையும் குறிக்கும்; பாதை திசைகொண்ட பாதையாக இருக்கும் – ஒரு அம்பு தொடக்கத்தில் இருந்து முடிவின் திசையில் வழி காட்டும். ஆகையால் அகராதியில் இல்லாத பாதைகள் பிழையாக எழுதப்பட்ட  அகராதி சொற்களுக்கு சமம், அல்லது அகராதியில் இல்லாத புதிய சொற்களுக்கு சமம்.

வாதம் [ஆதாரத்தின் தொடக்கமாக கருத்ப்படலாம்]:  டோரசில்ஒவ்வொரு சொல்லும் [அதன் பாதையும்] அகராதியில் உள்ள சொற்களாகவே இருக்கவேண்டும். Coding-theory / error correction codes theory படி இவ்வகை சரியான எழுத்துக்கள் உள்ள பாதைகள், சரியான சொற்களாகவும், தவான சொற்கள் [இல்லாத சொற்கள்] பிழையானவை என்வும் அமையும். இவ்வாரான சொற்கள் சரியானவையையின் சொற்பிழை எனவும் கருதப்பாடும்.

Corollary 1 of Theorem 5: மேர்கண்ட டோரசில் முழு அகராதி பிரதிபலிக்கப்பட்டதால், இதனைக்க்கொண்டு ஒரு சொற்பிழை திருத்தி செய்யலாம். பிழையான் சொல்லின் திருத்தம், அதன் நெருங்கிய தொலைவில் உள்ள சரியான் சொல் என்பதை நடைமுரைவிதியாகக்கொண்டு இதனை அமல்படுத்தலாம்.

Theorem 6: Tries எனப்படும் சொல்மரங்களைக்கொண்ட தரவமைப்பை டோரசில் குறியிட்டால், அது தொடர்பாதையாக ஒரே தொடக்கமும், பல பாதைமுடிவுகளையும் கொண்டதாக அமையும். இவற்றில் சில பாதைகள் சேரும் வகையில் முடிவுபெரும் வகையிலும் அமையலாம்.

படம் 2: Trie மரம் என்ற தரவமைப்பு. இதில் ‘to’, ‘tea’, ‘ted’, ‘ten’, ‘A’, ‘in’, மற்றும் ‘inn’ ஆகிய சொற்கள் இடம் பெற்றுள்ளன.

உதாரணத்திற்கு, படம் 2-இல் முடியும் நிலை நுனிகள் ‘n’ என்பவை டோரசில் வரும்பொழுது சேரும் வகையில் முடிவுபெரும் வகையில் அமையும்.

-முத்து.