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

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

இந்த பதிவில் விட்டர்பீ அல்கோரிதம் (Viterbi algorithm) என்பதனை கொண்டு எப்படி சொற்பிழைகளை திருத்தலாம் என்பதை மேலோட்டமாக பார்க்கலாம். முழுவிவரங்கள் இங்கே. விட்டர்பீ அல்கோரிதம் என்பது தகவல்தொழில்னுட்பத்தில் பிழைகளை நீக்கும் வண்ணம் வடிவமைக்கப்பட்ட ஒரு மிக முக்கியமான உத்தி/கண்டுபிடிப்பு. இது ஒரு குறியீட்டின் (code), பிழைகளை அந்த குறியீடு எப்படி உருவானது என்ற state-transition-table கொண்டு பிழைகளை நீக்கும்.

இதனை எப்படி மொழியில் சொற்பிழைகளை திருத்த பயன்படுத்துவது ? இதோ இப்படி – இந்த முழு கட்டுரையை பார்த்து தான் நானும் மயங்கினேன். அதாவது மொழியின் 1-கிராம், 2-கிராம், 3-கிராம் ஒலி எண்களின் மாற்றங்கள் புள்ளிவிவரங்களை (ngram state-transition tables) கொண்டு மட்டுமே இதனை சாதிக்க முடியும் என்று Etsy பொறியாளர்கள் சொல்லினார்கள் – அதை நானும் ஒப்புக்கொள்கின்றேன்.

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

இந்த பூனைக்கு யார் மணிகட்டுவாங்க ? 🐈

படம்

Tamil Entry via Keypad

One problem that seem to not draw interest from various actors in digital Tamil community seems to be the Tamil input via 4 x 3 standard Keypad.

A standard 4×3 keypad shown with digits and letters, including Japanese key entry on a vodafone device. Image credits to Wikipedia.

Problem Statement: Given a 4×3 matrix of keys in a phone keypad, how can we input the basic 13 + 18 + 12×18 = 247 letters of Tamil alphabet using this device ?

Alternate: Clearly, 247 letters have an information content of \log{2}{247} = 7.94836723158 bits or roughly 8bits. So we can simply punch in 3 keys for indicating this 8bit combination and we are done. Provide a table to the user about 247 letters and their 3-numeric key map and we have solved this problem in one way.

This is not very satisfying however; we seem to put the user to more work; we would instead like to have similar entry method in Tamil just like in English (where 3 letters are grouped per telephone key). The processor for application in the phone or mainframe can decode any ambiguity of the telephone keypad mapping into meaningful words or phrases.

Ideas: We can come up with various proposals; being lazy, and the official jester of Tamil computing community, I will try and make a simple combinatorial analysis for this problem without giving a specific solution.

Details: We can consider the factors of 247 = 19 x 13 which form a matrix of all letters representing the Tamil alphabets and we can count the partitions of this matrix onto the smaller keypad matrix. Following the roman letters of English alphabet consisting of 26 letters are fit easily into the 4 x 3 matrix on average of little less than 3 letters per key, we can also adopt a similar convention.

There are many ways to fit this large 19 x 13 matrix into a 4 x 3 matrix. Using simple combinatorial analysis we may show 19 letters can be divided into 4 groups as {19 \choose 4} (ignoring the assignment of letter groups to keys – 4! ways) along the rows. Similarly, we group along columns in {13 \choose 3} ways (and ignoring the 3! column permutation themselves). In all we have a total of {19 \choose 4}\times{13 \choose 3} = 1801371 key grouping combinations.

Clearly we have an alternate possibility of grouping the 19 x 13 matrix as a transposed matrix – i.e grouping dimension of 13 elements of Tamil alphabets into larger keypad dimension of 4, and assigning 19 elements along the fewer keypad dimension of 3. This alternative gives us {13 \choose 4}\times{19 \choose 3} = 692835

Together we have a total of 1,801,371. Thats roughly 1.8 million possibilities! Check them yourself by running this code:

. The real grand total of possible designs is to include the key permutations of the grouping we have already found, thereby adding a factor of 4! \times 3! = 144 to the previous 1.8 million so we get grand total of keypad mapping designs as 259,397,424 or 259 million keyboard combinations in all!

Conclusion: How are we going to find a suitable keypad mapping? Well we may need more heuristics and more cleverness to find the keypad mappings [a few definitely exist in this 259 million possibilities, which maximize a utility function.

So that leads us to the next problem: what is the utility of mapping a Tamil letters in the keypad ? Well – we don’t know apparently, so it doesn’t exist! This also ties into the philosophical question of what is the purpose of all software if not to support use.

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

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

பொது தமிழ் தரவுகள் ஆகியவை

  1. மதுரை திட்டம்
  2. தமிழ் விக்கிப்பீடியா
  3. freetamilebooks மின் புத்தக தரவு
  4. பிரபல நாளிதள், வார இதள், வலை இதள் போன்றவற்றின் தரவு.

இவை ஓவ்வொன்றும் ஒவ்வொரு கால கட்ட தமிழை, அல்லது பல கால கட்ட தமிழ் வழக்கை கொண்டவையாக அமைகின்றன. மென்மேலும், ஒவ்வொன்றும் வெவ்வேறு ‘header information’ மேலான்மை தகவல்களினுள் பொருத்தப்பட்டருக்கின்றன.

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

ஏற்கனவே செய்த வேலைகளில் இந்த குறைபாடுகள் இருந்திருக்கின்றன; இப்போது தான் தெறிந்துகொண்டேன்.

சமீபத்தில் இந்த சிக்கலில் மாட்டினேன்: சரியான தொடக்க நிலையில் இருந்து தொடங்குவது அவசியம். நான் விக்கிபீடியா தரவை அப்படியே header-information உடன் எதையும் துப்புரவு செய்யாமல் 13 இலட்சம் சொற்களை வரிசைடுத்தினேன். எல்லாம் பிரயோஜனத்துக்கிலை.

தவராக வரிசைபடுத்திய மேலான்மை சொற்கள்.

நக்கீரண் வேலை பார்க்க முயன்றால் கொஞ்சமாவது பயபக்தி வேண்டாமா ?

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

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

படம்1: மெக்சிகோவில் புனித குவடலூப்பே கன்னியின் படம் மிக பிரசித்தி பெற்றதாக அவர்கள் நம்புகின்றனர். எனக்கு பூண்டி மாதா, வேளங்கன்னி மாதா நினைவு. இடம்: பெர்க்கிலி, கலிபொனியா #மக்சிக்கோ #சுவர்ஓவியம் #ourladyofguadalupe

1 பிழைதிருத்தி அல்கோரிதம்

உள்ளீடு : உரையின் சொற்கள் ஒவ்வொன்றாக. இடம்-பொருள் விளங்குவதற்கு [context] நாம் சொல் இடம் பெரும் வரியை சூழலுக்கு உள்ளீடாக கொடுக்கலாம்.

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

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

முதல் படியாக உரையில் உள்ள சொற்கள் நேரடியே பட்டியலில் காணப்பட்டால் இதனை நாம் சரியான சொல் என்றும் அவற்றை நீக்கி விடலாம். எ.கா. “அவன் வாத்து முட்டை விருப்பம் கொண்டவளை மட்டுமே சமைக்க தேர்ந்தெடுப்பதாக சீனாவில் அறிவித்திருந்தான்” என்ற 10 சொல் வாக்கியத்தில் ‘அவன்’, ‘வத்து’, ‘முட்டை’, ‘விருப்பம்’, என்ற சொற்கள் சரியாக சொல் பட்டியலில் இருக்கும். தற்போது – 6 சொற்கள் மீதம் உள்ளன.

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

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

 தமிழில் உள்ள இலக்கண விதிகளை பேரா. ராஜம் அவர்கள் letsgrammar.org  என்ற தளத்தில் வினைச்சொற்கள் எப்படி மருவும் என்ற விதிகளை மென்பொருளில் நிருவி அழகாக விளக்கியுள்ளார். இவற்றை ஆங்கிலத்தில் ‘word declension rules’ என்று சொல்வார்கள்.

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

2 பிழை வகைகள்

மேல் சொன்னபடி சொல்திருத்திகள் அவைகளின் நான்கு படினிலைகளில் ஏதேனும் ஒரு சொல்லை [உரையில் உள்ள] அந்தந்த வகுப்பில் உள்ளதாகவும் கண்டு, அதே சொல் தவராக உருவெடுத்திருந்தால் அது தவரான சொல் என்றும், அதனை நாம் சரிசெய்து – மாற்றங்களை பரிந்துரைக்கலாம். இதையே ‘wrong word error’ என்று சொல்லாம்.

கடைசியில், இவ்வாரு நான்கு படிகளில் நீக்கம் செய்யப்படாத சொற்களை நாம் அகராதியில் இல்லாத சொற்கள் என்று மட்டுமே கருதலாம். அதாவது இவற்றை ‘non-word error’ என்று கண்டறிந்து சொல்லாம். இவற்றில் நாம் மாற்று சொற்களை தரமுடியாது.

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

3. வழங்கல்

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

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

  1. தவரான சொற்களை சுட்டிக்காட்ட வேண்டும்
  2. தவரான சொற்களுக்கு மாற்றங்களை காட்ட வேண்டும்
  3. தவரான் சொல்லுக்கு பயனர் மாற்று தரவிருந்தால் அதனை சொல் பட்டியலில் சேர்த்துக்கொள்ள வேண்டும்; அதனை உரையிலும் மாற்றவேண்டும்.

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

Tamilisch – தமிழ் மொழியின் பெயர்

முதல் முரை நான் செருமன் மொழி கற்கும் போது தமிழ் மொழியின் பெயர் Tamilisch என்று சொன்னாங்க. ஜெர்மென் கற்க வாய்ப்பை பயன்படுத்திக்கொள்ளமுடியவில்லை.

ஒரு தானியங்கி ஆட்டொமாடிக்கா பல மொழிகளில் தமிழ் மொழியின் பெயர் இதோ!

Language Word for ‘தமிழ்’ Code
Afrikaans tamil af
Albanian tamil sq
Amharic ታሚልኛ am
Arabic التاميل ar
Armenian թամիլերեն hy
Azerbaijani Tamil az
Basque tamil eu
Belarusian тамільская be
Bengali তামিল bn
Bosnian Tamil bs
Bulgarian тамилски bg
Catalan tamil ca
cebCebuano Tamil nga
Chichewa Tamil ny
Chinese (Simplified) 泰米尔人 zh
Chinese (Traditional) 泰米爾人 zh-TW
Corsican Tamil co
Croatian tamilski hr
Czech tamil cs
Danish Tamil da
Dutch Tamil nl
English Tamil en
Esperanto tamila eo
Estonian tamil et
Filipino Tamil tl
Finnish tamil fi
French tamoul fr
Frisian tamil fy
Galician tamil gl
Georgian Tamil ka
German Tamilisch de
Greek Ταμίλ el
Gujarati તમિલ gu
Haitian Creole Tamil ht
Hausa Tamil ha
Hawaiian Tamil haw
Hebrew טמילית iw
Hindi तामिल hi
Hmong Tamil hmn
Hungarian tamil hu
Icelandic tamil is
Igbo Tamil ig
Indonesian Tamil id
Irish tamil ga
Italian Tamil it
Japanese タミル語 ja
Javanese Tamil jw
Kannada ತಮಿಳು kn
Kazakh Тамил kk
Khmer ភាសាតាមីល km
Korean 타밀 ko
Kurdish (Kurmanji) Tamil ku
Kyrgyz Tamil ky
Lao ທະມິນ lo
Latin Tamil la
Latvian Tamilu lv
Lithuanian tamilų lt
Luxembourgish Tamil lb
Macedonian Тамилските mk
Malagasy Tamil mg
Malay Tamil ms
Malayalam തമിഴ് ml
Maltese tamil mt
Maori Tamil mi
Marathi तामिळ mr
Mongolian Тамил mn
Myanmar (Burmese) တမီး my
Nepali तामिल ne
Norwegian Tamil no
Pashto تامیل ps
Persian تامیل fa
Polish Tamil pl
Portuguese tâmil pt
Punjabi ਤਾਮਿਲ pa
Romanian tamilă ro
Russian тамильский ru
Samoan Tamil sm
Scots Gaelic Tamil gd
Serbian тамилски sr
Sesotho Tamil st
Shona Tamil sn
Sindhi تامل sd
Sinhala දෙමළ si
Slovak tamil sk
Slovenian tamil sl
Somali Tamil so
Spanish Tamil es
Sundanese Tamil su
Swahili Tamil sw
Swedish Tamil sv
Tajik тамилӣ tg
Tamil தமிழ் ta
Telugu తమిళ te
Thai มิลักขะ th
Turkish Tamilce tr
Ukrainian тамільська uk
Urdu تمل ur
Uzbek Tamil uz
Vietnamese Tamil vi
Welsh tamil cy
Xhosa Tamil xh
Yiddish טאַמיל yi
Yoruba Tamil yo
Zulu Tamil zu

இதன் நிரல் இங்க்கே:

Language Transformations

Question  of Translation

How can you convert a text like “Me Amor!” to “என் உயிரே!” [from Spanish to தமிழ்] ? Lets  assume we have Spanish to English and Tamil to English translators [bidirectional with English] then we can convert Spanish to English then to Tamil. Likewise one can translate between any two languages from a clique of languages [so far as the clique is defined such that each language can be translated to at least one other language in clique].

Development – Theory

Language can exist as text (print/message/document) or speech (audio, conversations) etc. Ideas are represented in any language. Ideas originate from one language and move to another, or sometimes originate iñ many lañguages simultaneously. Ideas cañ cross from oñe language to añother via text or speech.

In mathematical terms if we write L as set of lañguages = { L1, L2, .. Ln} and then if we define each language as a tuple Li = (Ti,Si) then we may further define mathematical function operating on text and converting it to speech as :

TTSi : Ti -> Si

we may define a function speech recognition as,

ASRi : Si -> Ti

we may also define a translation function as,

TXij : Li -> Lj

Essentially what we can do is by representing the language as a node in a graph with two text and speech parts to it, we may connect these nodes to each other via the edges – functions – like ASR and TTS, and to nodes of other languages via translators function edge.

In a graph with only two languages [English, Tamil] with all edges representing functions like TTS, ASR within same language and functions like Translator between two languages (one for each direction) we see a graph like the following:

Screen Shot 2018-08-03 at 11.51.08 PM

Fig. 1: Language transformation graph. Nodes represent languages and their components. Edges represent functions like TTS, ASR [for same language] and Translators [directional between languages]. Clearly we may see this is a directed graph with ability to go from a specific language to another language in text or speech or both forms, provided a path exists from source to target language. Using such a graph with no orphan nodes, we may have universal translation powers from language A to language B [so far as bidirectional connectivity is present with at least one neighbor].

Problems to Ponder

So the curious reader now having a background of representing the translation problem as a graph problem of reaching node B from node A, can use rich set of path finding algorithms and shortest distance algorithms may attempt to answer some of these questions:

  1. What is the graph criteria for a language to have no translations ?
  2. What is the graph criteria for a language to not be able to have virtual assistant ? [Siri, Cortana, Alexa etc.]
  3. Conversely, to 2, what is minimum criteria [necessary but not sufficient] to have a virtual assistant [that can speak and listen] ?
  4. Given two paths to translating from language A -> F, which are of two different lengths which one would you choose and why? Assume all jumps have a uniform information loss. What if information loss at each edge is non-uniform, how can you optimized such a problem ?
  5. How would you introduce a new language into this graph so that it maybe translated to all other languages [unidirectionally] ?
  6. How would you introduce a new language into this graph so that it can be bi-directionally translated ?
  7. How can you represent the transliteration function in this graph ?

Answers will be posted soon! Feel free to leave your comments in section below.

-Muthu