Παρασκευή, 1 Νοεμβρίου 2013

PomLex Hyphenator (Optimized)

Με μια απλή αντικατάσταση του map container της STL (Standard Template Library) με το unordered_map του TR1 (C++ Technical Report 1),  που ενσωματώθηκε πρόσφατα στη C++11, καθώς και κάποιες μικροδιορθώσεις  στον κώδικα, με την απομάκρυνση κυρίως κάποιων "πλεονασμών", κατάφερα να διπλασιάσω σχεδόν την ταχύτητα του συλλαβιστή PomLex.

Ο συλλαβισμός 97.000 λέξεων (159.000 μεμονωμένων συλλαβισμών) σε σώμα κειμένου με 160.000 λέξεις επιτυγχάνεται μόλις σε 1,2 δευτερόλεπτα, ταχύτητα που θα ζήλευαν ακόμα και εμπορικά πακέτα συλλαβιστών γραμμένα από επαγγελματίες προγραμματιστές.

Για να έχετε μια τάξη μεγέθους, με έναν πρόχειρο υπολογισμό που έκανα, αυτό μεταφράζεται σε κείμενο 330 περίπου σελίδων μεγέθους Α4 με πλήρη στοίχιση (προεπιλεγμένα περιθώρια – 2,54 εκ. κατακόρυφα και 3,17 εκ. οριζόντια), μονό διάστημα γραμμής και γραμματοσειρά Andika 12 στιγμών.

Μετά απ’ αυτό νομίζω πως δεν χρειάζεται να το «σκαλίσω» άλλο το πράγμα, ούτε να «εκμηδενίσω» τους χρόνους είναι στις προθέσεις μου.  Και πώς θα μπορούσε, εξάλλου, να γίνει κάτι τέτοιο;  Ένας μελλοντικός στόχος όμως θα ήταν η ενσωμάτωση του συστήματος συλλαβισμού, μαζί με κάποιον «ορθογράφο» ίσως, σε κάποιον δημοφιλή, ανοιχτού κώδικα κατά προτίμηση, επεξεργαστή κειμένου, είτε ως πρόσθετο είτε απ’ ευθείας στο σώμα του πηγαίου κώδικα.

Οι αριθμοί που εμφανίζονται στις εικόνες είναι, βεβαίως, ενδεικτικοί, καθώς η ίδια η ταχύτητα του υπολογιστή παίζει καθοριστικό ρόλο.  Οι μετρήσεις έγιναν σε διπύρηνο μηχάνημα με επεξεργαστή Intel Core 2 6400 στα 2.13 GHz με 2 GB RAM και λειτουργικό σύστημα Windows 7 (32-bit)

Ο συλλαβιστής θα μπορούσε να συλλαβίσει κείμενο σε οποιαδήποτε σχεδόν γλώσσα του κόσμου (με κάποια επιφύλαξη για τα σύνθετα συστήματα γραφής, όπως Κινέζικα, Αραβικά, Εβραϊκά κλπ.) με τους κατάλληλους κώδικες συλλαβισμού.






Κι εδώ ένα στιγμιότυπο με τον συλλαβιστή PomLex να τρέχει σε ένα τετραπύρηνο turbo laptop με επεξεργαστή Intel Core i7-3630QM στα 2.40 GHz με 16GB RAM σε λειτουργικό Windows 8 (64-bit).  Η διαφορά στην ταχύτητα είναι σοκαριστική.


Δευτέρα, 5 Αυγούστου 2013

Ο δρόμος είχε τη δική του ιστορία

Στίχοι: Κωστούλα Μητροπούλου 
Μουσική: Μάνος Λοΐζος 
Πρώτη εκτέλεση: Σούλα Μπιρμπίλη
Άλλες ερμηνείες:
Μάνος Λοΐζος
Χαρούλα Αλεξίου & Δήμητρα Γαλάνη







Δευτέρα, 24 Ιουνίου 2013

Περί αλφαβήτων

Latı́nıcata, kı́rılıcata ı elını́cata

 

Izkáralı so, póyem faf ınternéta, pomácko alfávıto sas latı́nckı̈ hárfove faf Türkı́ye za Pomácehne, žı́ne žı̈vót ıtám, ta da móžot da sı pı́savot ı da payót na pomáckı̈ ı da sı na zabarávet máyčınokne sı yezı̈́ka, Pomáckoso.  Bastı́salı so ı annó alfavıtárče (bukvárče), za da spaznót ı da naučót Pomácıne 29no hárfove.  Vı́deh pı́sano nókade, če faf Türkı́ye žı̈vót kazá dva mılyóna Pomácı, po mlózıno so so preméstılı ad Bulgarı́ye ıtám, ı ı́štot faf mečı́tevene dečyána mı da so učót Pomáckı̈.  Kakvó po húbavo nóvo ad to.

Stána mı ı móne málko merák da vı́dem kakvó ye tä́hnono alfávıto ı kutrı̈́ hárfove ı kak gı kullandı́savot ı zafátıh da trósem ı da abıyı́skavom faf ınternéta dalı́ go ı́ma nä́yde pakáčeno.  Na znom kak go so ızmı̈́slılı ı kaná ı́štot da stóret, alá kólkoto ı da go abıyı́skavah nı́kade na mažı̈́h da go náydom, nı́ta faf sáytane (ıstoselı́dono) mı, nı́ta drúgade nä́yde.  Annók futugráfa yálnı̈s ad alfavıtárčeno ı́mot pakáčena ı to mu ye vıdé le kapákane.  Na annó mä́sto pad futugráfane vı́deh da pı́sava če go predávot za on evró ı́lı on túrckı̈ lı́rı̈, na pómnem húbbe.  Stána mı málko šüfpä́ ı prekárah sı prez akı̈́lase samı̈́y “kak stánava tya ınázı rábata ını̈́y, alfávıto predáva lı so?”.  Háyde alfavıtárčeno go sı bastı́sal ı ı́šteš da go predadéš, húbbe, amá pı́šı̈y nä́yde ı alfávıtono, ta da móžot da go vı́det ı naučót ı bannı́ drúzı.  On evró ı́lı on túrckı̈ lı́rı̈ móža za bannä́h da so ne nı́kana, alá ne ı za vrıtsä́h.

Izpı́sah mı annók ıméıla ı mı go kázah, če právet nókakva yalnı̈šlı̈́ka.  Usramı́ho lı so, kutrı́ zno, ı nı́ta stórıho zahméte da mı advórnot.   Ne če mı so adbáve nä́ko, káksa vı́dıte ya sı pı́savom kákna sı ya znom ı móžom.  I akú be čákal täh  ı́lı bannä́h druzä́h da ızkárot alfávıto, za da móžom da sı spı́šom nášoso dúmenye pa ıtúzı ı da sı svóršom réčnıkase, te da čákom le bayá vréme yéšte ı netä́h da som stórıl nı́kana da ısä́na.  Amá na, dráznet go čulä́ka na bannóš ısakvı̈́zne rábatı̈.  Spravı́lo mı so ye béykı ta sas annó alfavıtárče še da móžot da zengınyásot.  Kak ı́nak da go abyesnı́ badı́n.

Annı́ “nášı” pak pa ıtúzı da na čúvot za latı́nıco ı́lı za kı́rılıco.  Íštot ad námı da pı́savame yálnı̈s na elını́co.  Ta kutrı́ mı ye kázal pak täm če móžot da nu sódet kak še dúmıme ı kak še pı́savame?  Ne lı da ısä́ nu ızučı́ho túrckı̈, kaná so yéšte kócot ınélkus za námı?  Íštot ı résto na varhú?  Zabarávet če zaradı́ täh Pomácıse sı na učót faf mečı́tevese máyčınokne sı yezı̈́ka, ótı kugána mı ye kef täm Pomácı sme, kugána ı́štot tı́ye Túrcı sme ı útre zaútrešnık akú paı́štot ı rečót móža da nu stóret ı ya na znom kakvä́h.  Ne lı?  I kak móža da ı́ma vä́ro badı́n na täh? 

Ne lı go so kázalı če malmı́na móžaš da gı razvórtaš za mlógo vréme, mlózeh móžaš da gı razvórtaš za málko vréme, alá na móžaš vrıtsä́h da gı razvórtaš pa cä́lo vréme.

Kutrı́ kákna ı́šte móža da dúmı ı da pı́sava ı némot nı́kakvo právo da so bórkot kadéna mı ye ne rábata.  To akú astáne faf tä́hnı̈ rókı̈ Pomáckoso, za málko vréme néma da ı́ma nı́kana, še ye battı́salo sı́čkoso, káksa battı́saho ı hükümétese.  Ílı mı so ye spravı́lo če móžot yéšte da nu kupóvot ı da nu predávot.  Ne, néma da stáne, svórša ıtazı́ vréme.

Ta za to ı ya, káksa vı́dıte, kullandı́savom ı latı́nıcoso ı kı́rılıcoso ı akú ı kugána móžom po nah sétne še kullandı́savom ı elını́coso.  Da sı derót ustána kólkono ı́štot, nı́ta mı préčı nı́ta mı so adbáve. E ını̈́y. 

Изка́рали со, по́йем фаф интерне́та, пома́цко алфа́вито сас лати́нцкъ ха́рфове фаф Тӱрки́йе за Пома́цехне, жи́не жъво́т ита́м, та да мо́жот да си пи́савот и да пайо́т на пома́цкъ и да си на забара́вет ма́йчинокне си йезъ́ка, Пома́цкосо.  Басти́сали со и анно́ алфавита́рче (буква́рче), за да спазно́т и да научо́т Пома́цине 29но ха́рфове.  Ви́дех пи́сано но́каде, че фаф Тӱрки́йе жъво́т каза́ два милйо́на Пома́ци, по мло́зино со со преме́стили ад Булгари́йе ита́м, и и́щот фаф мечи́тевене дечя́на ми да со учо́т Пома́цкъ.  Какво́ по ху́баво но́во ад то.

Ста́на ми и мо́не ма́лко мера́к да ви́дем какво́ йе тӓ́хноно алфа́вито и кутръ́ ха́рфове и как ги кулланди́савот и зафа́тих да тро́сем и да абийи́скавом фаф интерне́та дали́ го и́ма нӓ́йде пака́чено.  На зном как го со измъ́слили и кана́ и́щот да сто́рет, ала́ ко́лкото и да абийи́скавах ни́каде на мажъ́х да го на́йдом, ни́та фаф са́йтане (истосели́доно) ми, ни́та дру́гаде нӓ́йде.  Анно́к футугра́фа я́лнъс ад алфавита́рчено и́мот пака́чена и то му йе виде́ ле капа́кане.  На анно́ мӓ́сто пад футугра́фане ви́дех да пи́сава че го преда́вот за он евро́ и́ли за он ту́рцкъ ли́ръ, на по́мнем ху́ббе.  Ста́на ми ма́лко шӱфпӓ́ и прека́рах си през акъ́ласе самъ́й “как ста́нава тйа ина́зи ра́бата инъ́й, алфа́вито преда́ва ли со?“.  Ха́йде алфавита́рчено го си басти́сал и и́щеш да го предаде́ш, ху́ббе, ама́ пи́шъй нӓ́йде и алфа́витоно, та да мо́жот да го ви́дет и научо́т и банни́ дру́зи.  Он евро́ и́ли он ту́рцкъ ли́ръ мо́жа за баннӓ́х да со не ни́кана, ала́ не и за вритсӓ́х.

Изпи́сах ми анно́к име́ила и ми го ка́зах, че пра́вет но́каква ялнъшлъ́ка.  Усрами́хо ли со, кутри́ зно, и ни́та сто́рихо захме́те да ми адво́рнот.  Не че ми со адба́ве нӓ́ко, ка́кса ви́дите я си пи́савом ка́кна си я зном и мо́жом.  И аку́ бе ча́кал тӓх и́ли баннӓ́х друзӓ́х да изка́рот алфа́вито, за да мо́жом да си спи́шом на́шосо ду́менйе па иту́зи и да си сво́ршом ре́чникасе, те да ча́ком ле бая́ вре́ме йе́ще и нетӓ́х да сом сто́рил ни́кана да исӓ́на.  Ама́ на, дра́знет го на банно́ш чулӓ́ка исаквъ́зне ра́батъ.  Справи́ло ми со йе бе́йки та сас анно́ алфавита́рче ше зенгиня́сот.  Как и́нак да го абйесни́ бади́н.

Анни́ „на́ши“ пак па иту́зи да на чу́вот за лати́ницо и́ли за ки́рилицо.  И́щот ад на́ми да пи́саваме я́лнъс на елини́цо.  Та кутри́ ми йе ка́зал пак тӓм че мо́жот да ну со́дет как ше ду́миме и как ше пи́саваме? Не ли да исӓ́ ну изучи́хо ту́рцкъ, кана́ со йе́ще ко́цот ине́лкус за на́ми?  И́щот и ре́сто на варху́?  Забара́вет че заради́ тӓх Пома́цисе си на учо́т фаф мечи́тевесе ма́йчинокне си йезъ́ка, о́ти куга́на ми йе кеф тӓм Пома́ци сме, куга́на и́щот ти́йе Ту́рци сме и у́тре зау́трешник аку́ паи́щот и речо́т мо́жа да ну сто́рет и я на зном каквӓ́х.  Не ли?  И как мо́жа да и́ма вӓ́ро бади́н на тӓх?

Не ли го со ка́зали че малми́на мо́жаш да ги разво́рташ за мло́го вре́ме, мло́зех мо́жаш да ги разво́рташ за ма́лко вре́ме, ала́ на мо́жаш вритсӓ́х да ги разво́рташ па цӓ́ло вре́ме.

Кутри́ ка́кна и́ще мо́жа да ду́ми и да пи́сава и не́мот ни́какво пра́во да со бо́ркот каде́на ми йе не ра́бата.  То аку́ аста́не фаф тӓ́хнъ ро́къ Пома́цкосо, за ма́лко вре́ме не́ма да и́ма ни́кана, ше йе батти́сало си́чкосо, ка́кса батти́сахо и хӱкӱме́тесе.  И́ли ми со йе справи́ло че мо́жот йе́ще да ну купо́вот и да ну преда́вот.  Не, не́ма да ста́не, сво́рша итази́ вре́ме.

Та за то и я, ка́кса ви́дите, кулланди́савом и лати́ницосо и ки́рилицосо и аку́ и куга́на мо́жом по нах се́тне ше кулланди́савом и елини́цосо.  Да си деро́т уста́на ко́лконо и́щот, ни́та ми пре́чи ни́та ми со адба́ве.  Е инъ́й.

Δευτέρα, 17 Ιουνίου 2013

Όταν οι πέτρες μιλούν


Kugána kámenyeno dúmı - Куга́на ка́менйено ду́ми

Αφιερωμένο στο κλαμπ της Φραγκουδάκη

Šáren kámen

 
Vı́dıyte go!
Izdä́lah go,
ızmı̈́h go,
ızbágrıh go,
da ye mázan ı šáren,
kámatnı̈yes, moy, póstar kámen.
Sas tóga so razbúdom ı zaspávom,
za tóga so zayávom ı nasalzä́vom,
vrıtsä́m go padávom ı razdávom
ı nı́kutromu go na predávom.
Vadá go na prebı́va,
zólezo go na razbı́va
ı ógan go na nadvı́va.
Kórenye dlö́go ye púsnal,
vaz Balkánase ı Kafkása ye fúknal,
bosnı́ckı̈, bälorúskı̈, ukránckı̈,
polónckı̈, slováckı̈, slovénckı̈,
čéhckı̈, sı̈́rpckı̈, hı̈rvátskı̈,
bulgárckı̈, pomáckı̈, rúskı̈
lıstá ı cvetyé ye spúsnal.

Ша́рен ка́мен

 
Ви́дийте го!
Издӓ́лах го,
измъ́х го,
изба́грих го,
да йе ма́зан и ша́рен,
ка́матнъйес, мой, по́стар ка́мен.
Сас то́га со разбу́дом и заспа́вом,
за то́га со зая́вом и насалзӓ́вом,
вритсӓ́м го пада́вом и разда́вом
и ни́кутрому го на преда́вом.
Вада́ го на преби́ва,
зо́лезо го на разби́ва
и о́ган го на надви́ва.
Ко́ренйе длӧ́го йе пу́снал,
ваз Балка́насе и Кафка́са йе фу́кнал,
босни́цкъ, бӓлору́скъ, укра́нцкъ,
поло́нцкъ, слова́цкъ, слове́нцкъ,
че́хцкъ, съ́рпцкъ, хърва́тскъ,
булга́рцкъ, пома́цкъ, ру́скъ
листа́ и цветйе́ йе спу́снал.

 

Τρίτη, 11 Ιουνίου 2013

Συγκέντρωση υπογραφών για την εισαγωγή της Πομακικής στα σχολεία όπου φοιτούν Πομάκοι μαθητές

Στην ανάγνωση ενός δημοσιεύματος της εφημερίδας "Ζαγάλισα" στην ηλεκτρονική της έκδοση (http://www.zagalisa.gr) με τίτλο "«ΕΣΥ, ΟΥΤΕ ΤΟΥΡΚΙΚΑ ΔΕΝ ΞΕΡΕΙΣ ΚΑΛΑ!» Απίστευτη δήλωση καθηγητή σε Πομάκο μαθητή. Νέα «δικαίωση» του προγράμματος Φραγκουδάκη", που μπορείτε να διαβάσετε εδώ, τα κύτταρά μου, το είναι μου όλο, άρχισε να επαναστατεί και δεν μπορώ, πλέον, να τα συγκρατήσω. Αυτό ήταν! Δεν χρειάζεται κάτι άλλο.

Το ποτήρι ξεχείλισε και νομίζω ότι όλοι αυτοί οι καραγκιόζηδες, όπως και να λέγονται, σε όποιον θεό και να πιστεύουν και σε όποιο έθνος κι αν ανήκουν, μαζί με τους πολιτικούς μας ταγούς θα πρέπει να πάρουν τη δέουσα απάντηση.

Εμπρός, λοιπόν, Πομάκοι, δείξτε σε όλους αυτούς τί πραγματικά μπορείτε να κάνετε και μην τους αφήνετε να ντροπιάζουν και να εξευτελίζουν τα παιδιά σας κι εσάς τους ίδιους κατ' αυτόν τον βάρβαρο τρόπο. Στείλτε τους περίπατο όλους αυτούς, τη Φραγκουδάκη και το σατανικό της πρόγραμμα.

Υπογράψτε για την εισαγωγή της Πομακικής Γλώσσας, έστω σε συμβολικό επίπεδο, στα σχολεία όπου φοιτούν τα παιδιά μας και τότε να ιδούμε τα μούτρα όλων αυτών.

Κυριακή, 2 Ιουνίου 2013

Ο συλλαβισμός στην Πομακική

réčkovo delénye ή rečkodelénye

 

Την παραπάνω σύνθετη πομακική λέξη δε θα τη βρείτε σε κανένα λεξικό της Πομακικής, συμπεριλαμβανομένου του Δ’ Σώματος Στρατού, όσο και να ψάξετε.  Απλά δεν υπήρχε, μέχρι που να αρχίσω να γράφω αυτές εδώ τις γραμμές.  Το ξέρω ότι είναι πολύ πιθανό να κατηγορηθώ για γλωσσοπλασία.  Δεν θα με πείραζε όμως καθόλου αυτό, διότι είναι η ίδια η ζωή και οι ανάγκες τις, εν τέλει, η πραγματική δημιουργός δύναμη και κάπως έτσι θαρρώ πως δημιουργήθηκαν πολλές, αν όχι οι περισσότερες, λέξεις όλων των γλωσσών του κόσμου.  Αυτά σαν παρένθεση.

Με τη σημερινή ραγδαία ανάπτυξη και εξέλιξη της επιστήμης των υπολογιστών δεν είναι καθόλου απίθανο σε λίγα χρόνια να εκλείψει παντελώς η ανάγκη του συλλαβισμού των κειμένων και η ίδια η λέξη «συλλαβισμός» να καταργηθεί από το λεξιλόγιό μας.  Ρίξτε μια ματιά εδώ κι εδώ για του λόγου το αληθές.  Μέχρι τότε όμως, για να μπορούμε να χρησιμοποιούμε την πλήρη στοίχιση στα μονόστηλα, δίστηλα ή πολύστηλα κείμενά μας με το καλύτερο δυνατό αισθητικό, λειτουργικό και πρακτικό αποτέλεσμα, θα είμαστε αναγκασμένοι να χρησιμοποιούμε τον συλλαβισμό με το κατάλληλο «σπάσιμο» των λέξεων σύμφωνα με ορισμένους κανόνες.

Οι κανόνες συλλαβισμού της Πομακικής δε θα μπορούσε παρά να είναι κάποιοι πολύ απλοί και βασικοί κανόνες σαν τους παρακάτω, οι οποίοι ενυπάρχουν και σε πολλές άλλες γλώσσες, με κάποιες μικρές διαφορές, ίσως, και ορισμένες εξαιρέσεις.  Είναι μετρημένοι στα δάχτυλα του ενός χεριού και είναι οι εξής:

1. Ένα σύμφωνο ανάμεσα σε δύο φωνήεντα συλλαβίζεται με το δεύτερο φωνήεν
π.χ.  va-dá, ža-ná, dé-te, ko-rá, pé-pel, na-gá, ra-ká κλπ.

2.  Δύο σύμφωνα ανάμεσα σε δύο φωνήεντα συλλαβίζονται με το δεύτερο φωνήεν, εάν απ’ αυτά τα σύμφωνα αρχίζει λέξη της Πομακικής (ανεξαρτήτου προέλευσης).  Διαφορετικά, χωρίζονται και το πρώτο σύμφωνο πάει με το προηγούμενο φωνήεν, το δεύτερο με το ακόλουθο.
π.χ.
α) ko-prı́va (prı́lıka), a-gledálo (glavá), má-slo (slónce), pa-trı́šom (trahá, trendráfel), patá-vra (vrána) κλπ.
β) per-perúda, úr-da, yúr-va, pór-ta, sól-za, fúr-ka, vór-ga, bór-no, bán-ga κλπ.

3.  Τρία σύμφωνα ανάμεσα σε δύο φωνήεντα συλλαβίζονται με το ακόλουθο φωνήεν, όταν απ’ αυτά τα σύμφωνα αρχίζει λέξη της Πομακικής.  Σε διαφορετική περίπτωση, χωρίζονται και το πρώτο σύμφωνο πάει με το προηγούμενο φωνήεν, το τρίτο (τελευταίο) σύμφωνο με το ακόλουθο φωνήεων και το δεύτερο (ενδιάμεσο) σύμφωνο υπάγεται στον δεύτερο κανόνα συλλαβισμού.  Εάν, δηλαδή, από το δεύτερο και τρίτο σύμφωνο αρχίζει λέξη της Πομακικής, τότε αυτό ακολουθεί το τρίτο σύμφωνο και πάει με το επόμενο φωνήεν, αλλιώς, μένει πίσω με το πρώτο σύμφωνο και το προηγούμενο φωνήεν.
π.χ.
α) pa-smračáva so (smračáva so), pa-strašávom (strašávom, strah, strášan), pa-splatnä́vom (splatnä́vom), pa-skrapä́vom (skrapä́vom, skram, skramcá), pad-skrafı́savom (skrafı́som) κλπ.
β) amar-tvä́vom, skı̈rč-yásavom, borč-yásavom κλπ.

Αυτή τη στιγμή δεν μπορώ να σκεφτώ κάποια λέξη που να περιέχει τέσσερα σύμφωνα στη σειρά.  Αυτό, αναμφίβολα, έχει να κάνει και με το αλφάβητο.  Εάν όμως προκύψει κάτι τέτοιο στην πορεία, νομίζω ότι αυτό θα μπορούσε χωρίς κανένα πρόβλημα να υπαχθεί στον τρίτο κανόνα συλλαβισμού.

Από τους παραπάνω κανόνες εξαιρούνται οι εξής περιπτώσεις:
α) Τα προθήματα (πρώτα συνθετικά) ab, ad, ız, nad, pad, raz, vaz δεν χωρίζονται.
β) Τα συμπλέγματα ck και čk στις καταλήξεις -ckı̈y, -cka, -cko, -ckı, -ckı̈ και -čkı̈y, -čka, -čko, -čkı, -čkı̈ ορισμένων επιθέτων με ή χωρίς το οριστικό άρθρο δεν χωρίζονται.

(Σημ.: Λέξη της Πομακικής που να αρχίζει από ck ή čk δεν υπάρχει και κανονικά θα έπρεπε να εφαρμοστεί ο αντίστοιχος κανόνας συλλαβισμού, ανάλογα με την περίπτωση, και να χωριστούν τα γράμματα c και από το k, κάτι το οποίο εγώ προσωπικά δεν επιθυμώ).
Αυτό είναι όλο κι όλο, για την ώρα τουλάχιστον.


Μπορείτε τώρα να κάνετε μια σύγκριση με τους κανόνες συλλαβισμού της Νεοελληνικής Γραμματικής του Μανόλη Τριανταφυλλίδη, σελ. 19, παρ. 24, και αυτούς της σύγχρονης Βουλγαρικής, όπως έχουν τροποποιηθεί από το 1983, ή άλλων γλωσσών και να βγάλετε τα όποια συμπεράσματά σας.

Όλα αυτά, βεβαίως, στη θεωρία.  Ας περάσουμε όμως τώρα στην πράξη και την υλοποίηση όλων αυτών των κανόνων στους υπολογιστές, προκειμένου να μπορεί να εφαρμόσει κανείς αυτόματο συλλαβισμό στα κείμενά του.


Την περιγραφή του γνωστού στους προγραμματιστές αλγορίθμου συλλαβισμού στους υπολογιστές του καθηγητή Franklin Mark Liang του Πανεπιστημίου Stanford μπορείτε να τη διαβάσετε εδώ.  Την υλοποίηση του παραπάνω αλγορίθμου, με κάποιες παραλλαγές, έχουν πραγματοποιήσει και ενσωματώσει στα έργα τους διάφοροι μεμονωμένοι προγραμματιστές, οργανισμοί και εταιρείες ανά τον κόσμο και μεταξύ αυτών και κάποια μεγάλης κλίμακας projects, όπως το OpenOffice και το LibreOffice κ.ά.


Μια τέτοια υλοποίηση γραμμένη σε C++ (για Linux) που μου κέντρισε το ενδιαφέρον είναι τούτη εδώ.  Αφού, λοιπόν, κατάφερα με κάποια δυσκολία, ομολογώ, να την μεταγλωττίσω σε περιβάλλον Windows και, όντας παιχνιδιάρης ο ίδιος, να «παίξω» μαζί της επί αρκετές ημέρες, διαπίστωσα με μεγάλη μου λύπη για άλλη μια φορά ότι το παιχνίδι δεν έβγαινε και ήταν σχεδόν αδύνατη η χρήση της στην περίπτωση της Πομακικής για δύο λόγους:  α) η χρήση διεθνών τυποποιήσεων σε ό,τι αφορά τις κωδικές ονομασίες των γλωσσών, στις οποίες δεν συμπεριλαμβάνεται η Πομακική, και β) οι πάρα πολλές και αμφιβόλου τελικού αποτελέσματος αλλαγές που θα έπρεπε να γίνουν στον κώδικα , λόγω του ιδιαίτερου συστήματος γραφής της Πομακικής (βλ. προηγούμενες αναρτήσεις).


Κι έτσι, μη έχοντας και πολλές επιλογές, στράφηκα προς την αυτοσχέδια λύση, η οποία θα ήταν και μια πρώτης τάξεως ευκαιρία να δοκιμάσω τις γνώσεις μου στη C++.  Το παίδεψα και με παίδεψε, είναι αλήθεια, κι έκανα σχέδια επί σχεδίων, έως ότου καταλήξω σε κάποιο σχήμα.  Στο τέλος νομίζω ότι κάτι έκανα.  Μια απλή κλάση της C++ με ελάχιστες ρουτίνες και συναρτήσεις και πολύ λίγες γραμμές κώδικα.  Οι χρόνοι είναι ικανοποιητικοί, μπορεί και καλύτεροι από άλλες αντίστοιχες υλοποιήσεις, και το τελικό αποτελέσμα το επιθυμητό• δεν έχει να ζηλέψει τίποτα από εκείνες των υπολοίπων.  Βελτιώσεις και διορθώσεις ασφαλώς και μπορούν να γίνουν τόσο στην υλοποίηση αυτή καθεαυτή όσο και στους κώδικες συλλαβισμού, ο αριθμός των οποίων μόλις που πλησιάζει τους χίλιους σε σύνολο αρκετών δεκάδων χιλιάδων τύπων λέξεων της Πομακικής.  Νομίζω ότι είναι μια πολύ καλή βάση και αρχή.


Ιδού ένα μέρος του κώδικα που αποτελεί και την κεντρική διαδικασία (ρουτίνα) της υλοποίησης.


void Hyphenator::hyphenate( wstring& wrd, int32_t idx, vector<int>& pos_indexes )
{
    if ( wrd.empty() || wrd.size() < 3 )
        return;

    wstring word, key, pat;

    map<wstring, wstring>::const_iterator it;

    UnicodeString ustr( wrd.c_str() );
    ustr.toLower();

    word += _T(".");
    word += ustr.getTerminatedBuffer();
    word += _T(".");

    wchar_t c;
    size_t p, l, r = 0, s = word.size();

    vector<int> v;
    v.reserve( s * s );

    for ( size_t pos = 0; pos < s; pos++ ) {
        for ( size_t i = s; i > pos; i-- ) {
            key = word.substr( pos, i - pos );
            it = _patterns.find( key );
            if ( it != _patterns.end() ) {
                pat = it->second;
                v.resize( v.size() + s );
                p = pos; l = 0;
                if ( p == 0 ) l = 1; else p--;
                for ( size_t j = l; j < pat.size(); j++ ) {
                    c = pat[j];
                    v[ ( r * s ) + p++ ] = _wtoi( &c );
                }
                r++;
            }
        }
    }

    int32_t n, t;

    for ( size_t i = 1; i < s -1; i++ ) {
        n = 0;
        for ( size_t j = 0; j < r; j++ ) {
            t = v[ ( j * s ) + i ];
            if ( t > n ) n = t;
        }
        if ( i < ( s - 2 ) ) {
            if ( n > 0 && n % 2 > 0 ) {
                pos_indexes.push_back( (idx + i) );
            }
        }
    }
}





Να επισημάνω εδώ ότι η μόνη αναγκαία εμπλοκή της βιβλιοθήκης ICU στην περίπτωση του συλλαβισμού συνίσταται στην μετατροπή των κεφαλαίων χαρακτήρων σε πεζούς, καθότι δεν μπόρεσα να βρω κάτι άλλο πιο αξιόπιστο.

Αυτή είναι εν ολίγοις η ιστορία με τον συλλαβισμό και δε νομίζω ότι χρειάζεται να προσθέσω ή να συμπληρώσω κάτι άλλο επί του παρόντος.  Τώρα, το ότι πονάνε λίγο τα δάχτυλα των χεριών μου από το πληκτρολόγιο και ότι δεν πρόλαβα ακόμη να υποβάλω τη φορολογική μου δήλωση ή ότι δεν βρήκα λίγο χρόνο για το αγαπημένο μου «σπορ», αυτά πια, νομίζω, δεν ενδιαφέρουν κανέναν.


Κατεβάστε το πακέτο με την εφαρμογή επίδειξης από εδώ (md5 checksum: c5149f132d15c101de1fb2baed0eb3de) για να δείτε ζωντανά το αποτέλεσμα όλων των παραπάνω στην οθόνη του υπολογιστή σας.  Μέσα στο φάκελο θα βρείτε τη γραμματοσειρά Andika, την οποία πρέπει να εγκαταστήσετε για τη σωστή προβολή του κειμένου, και το αρχείο SampleText.txt, ένα πομακικό παραμύθι από το βιβλίο της Δήμητρας Κατάκη «Ο παππούς και η γιαγιά είπαν...», γραμμένο στο αναθεωρημένο λατινικό αλφάβητο, για τις δοκιμές σας.  Το πακέτο είναι πλήρες, με όλα τα παρελκόμενα, και εκτός από λίγο χρόνο κάτι άλλο δε νομίζω ότι θα χρειαστείτε.  Δοκιμάστε το και σχολιάστε το (προαιρετικά είναι και τα δύο).


Εάν κάποιος ενδιαφέρεται να αποκτήσει το σύνολο του πηγαίου κώδικα, μπορεί να τον λάβει δωρεάν, αρκεί, απλά, να τον ζητήσει.

Σάββατο, 25 Μαΐου 2013

Σχετικά με την ταξινόμηση

Εδώ και μια δεκαετία περίπου χρησιμοποιώ το κορυφαίο ίσως από κάθε άποψη νοτιοαφρικανικής προέλευσης λεξικογραφικό υπερεργαλείο TshwaneLex για τις καθημερινές και συνηθισμένες εργασίες μου πάνω στο PomLex.  Και δεν είναι ότι το συγκεκριμένο εργαλείο δεν παρέχει τη δυνατότητα προσαρμοσμένης ταξινόμησης.  Την παρέχει και με τον καλύτερο τρόπο ίσως.  Αλλιώς τί σόι εργαλείο θα ήταν;  Απλώς η δυνατότητα αυτή παρέχεται σε επίπεδο λήμματος.   Για πολύ εξειδικευμένες εργασίες όμως, όπως η ενδολημματική ταξινόμηση σε μια δενδροειδή δομή ενός λήμματος της παρακάτω μορφής, τα πράγματα γίνονται αρκετά περίπλοκα.


Αυτό, βέβαια, μέσα από το περιβάλλον του TshwaneLex.  Αν τώρα θελήσει κανείς να μεταφέρει την εργασία του εκτός περιβάλλοντος TshwaneLex και να χρησιμοποιήσει εργαλεία δικά του ή τρίτων κατασκευαστών για περαιτέρω επεξεργασία τί γίνεται;  Στην περίπτωση της Πομακικής άμεση υποστήριξη, απλά, δεν παρέχεται από κανέναν.  Η δε έμμεση συναρτάται με την ατομική πρωτοβουλία και δυνατότητα αλλά και τους στόχους που έχει ο καθένας.

Η δωρεάν και ανοιχτού κώδικα βιβλιοθήκη ICU (International Components for Unicode) της IBM είναι μια απ’ αυτές που χρησιμοποιείται ευρέως από τους προγραμματιστές για τον χειρισμό κειμένου Unicode.  Μερική χρήση των δυνατοτήτων της βιβλιοθήκης μπορεί να κάνει και το SQLite για την ταξινόμηση, αν του το ζητήσει κανείς (μεταγλώττιση με την αντίστοιχη επιλογή - ενεργοποίηση).  Αυτή θα ήταν μια καλή λύση ομολογώ, έστω και μεσοβέζικη, αν, βεβαίως, ήμουν γκουρού της C και μπορούσα να το θέσω σε λειτουργία αυτό το πράγμα.  Η αλήθεια είναι ότι αποπειράθηκα, ασχέτως αποτελέσματος.

Η επόμενη κίνηση ήταν να δοκιμάσω την απ’ ευθείας χρήση της βιβλιοθήκης μέσα από τα δικά μου C++ εργαλεία.  Τα πρώτα αποτελέσματα δεν άργησαν να φανούν και ήταν ό,τι ακριβώς έψαχνα.  Προσαρμοσμένη ταξινόμηση, ανεξάρτητη από λειτουργικά συστήματα, λεξικογραφικά εργαλεία, επεξεργαστές κειμένου κλπ.  Να ‘ναι καλά όλοι αυτοί οι άνθρωποι που δούλεψαν για το ICU.




Κάποια άλλη φορά θα γράψω για τον συλλαβισμό και θα σας δώσω μια μίνι εφαρμογή επίδειξης των δυνατοτήτων ταξινόμησης και συλλαβισμού της Πομακικής.


Τετάρτη, 22 Μαΐου 2013

Το πρωινό "ξύπνημα" της φύσης

Απολαμβάνοντας τη μοναδική και "άγρια" αίσθηση ομορφιάς του πρωινού "ξυπνήματος" της φύσης, όπου χελιδόνια και λογής λογής δασοπούλια στήνουν ένα ξέφρενο πανηγύρι στην αυλή του σπιτιού σου με εξωτικές μουσικές και χορούς και σαν φυσικό ξυπνητήρι σε καλούν να σηκωθείς από το κρεββάτι σου και να απολαύσεις έναν υπέροχο καφέ μαζί τους, προτού ξεκινήσεις για την άσκηση της επιταγμένης σου υπηρεσίας.


Σάββατο, 18 Μαΐου 2013

Αναθεώρηση του αλφαβήτου και διατάξεις πληκτρολογίου

Καλωσορίσατε στο ιστολόγιο μου

Το PomLex μετά από μια μακρά περίοδο «ξεκούρασης» είναι και πάλι στον αέρα.  Αυτή τη φορά χωρίς επέκταση .com, .gr ή οτιδήποτε άλλο, νέτο - σκέτο.  Ο σκοπός του, φυσικά, δεν είναι άλλος από τον αρχικό, η καταγραφή, δηλαδή, η ανάδειξη και η προώθηση της Πομακικής.

Πρόσφατα σε μια δοκιμαστική προσπάθεια εξαγωγής και σελιδοποίησης του θρυλούμενου χιλιοσέλιδου λεξικού που ετοιμάζω βρέθηκα αντιμέτωπος με διάφορα προβλήματα αλλά και προκλήσεις, όπως η ταξινόμηση και ο συλλαβισμός.  Μετά από κάμποσα ξενύχτια και στην προσπάθεια μου να βρω κάποια ικανοποιητική και αποδεκτή λύση, πείστηκα για την ανάγκη της αναθεώρησης του αλφαβήτου και του συστήματος γραφής γενικότερα, στην οποία και προχώρησα.

Με τη βοήθεια του Microsoft Keyboard Layout Creator έφτιαξα τρεις προσαρμοσμένες και διαφορετικές ως προς τη γραφή διατάξεις πληκτρολογίου, μια για τη λατινική, μια για την κυριλλική και μια για την ελληνική.  Οι διατάξεις αυτές κάνουν χρήση των νέων δυνατοτήτων που παρέχουν οι γραμματοσειρές OpenType και προϋποθέτουν την ύπαρξη αυτών.  Η τεχνολογία αυτή, βέβαια, είναι σχετικά καινούργια και τυγχάνει περιορισμένης ακόμα υποστήριξης από τα διάφορα προγράμματα και συστήματα.   Αν δεν κάνω λάθος, η ίδια η Microsoft μόλις από το Office 2010 αρχίζει να παρέχει κάποια υποστήριξη για την τεχνολογία αυτή.

Να σημειώσω εδώ ότι οι μόνες γραμματοσειρές που εντόπισα με πλήρη υποστήριξη της λατινικής και της κυριλλικής ( Andika, Charis SIL, Doulos SIL ), όχι όμως και της ελληνικής, είναι μερικές απ’ αυτές που έχει σχεδιάσει και αναπτύξει μαζί με μια πληθώρα άλλων εργαλείων ο SIL International.

Έχετε υπόψη σας ότι τα διάφορα τονικά και άλλα σημάδια τοποθετούνται όπως όταν γράφουμε με το χέρι, δηλαδή γράφουμε πρώτα τον βασικό χαρακτήρα και εν συνεχεία επιθέτουμε το σημάδι ή τα σημάδια.

Παραθέτω εδώ κάποια στιγμιότυπα οθόνης (screenshots), καθώς και τα αντίστοιχα πακέτα εγκατάστασης των διατάξεων πληκτρολογίου, για όποιον θέλει να τα δοκιμάσει και να μας πει την εμπειρία του.  Είναι απαραίτητη η εγκατάσταση των προαναφερόμενων γραμματοσειρών.  Κάποιες γραμματοσειρές της Microsoft που προεγκαθίστανται μαζί με τα Windows 7, όπως η Calibri και η Cambria, παρέχουν περιορισμένη υποστήριξη μόνο.













Κατεβάστε τα πακέτα εγκατάστασης

Λατινικό (md5: a2036ba355651de95510e61060f4fcf8)
Κυριλλικό (md5: ed24c7dceaab627b983a2690ad6b1bc8)
Ελληνικό (md5: 5184ba104b5e52dc7fe10e021afc029a)


Για την ταξινόμηση και τον συλλαβισμό θα γράψω σε επόμενο άρθρο μου.




Να περνάτε καλά

Ριτβάν