Σελίδες

Παρασκευή 13 Φεβρουαρίου 2015

PomLex Editor – Από την προφορική παράδοση στην ψηφιακή πραγματικότητα

Σε προηγούμενη ανάρτησή μου είχα υποσχεθεί ( το έχω αυτό το «ελάττωμα» και τις υποσχέσεις μου συνήθως δεν τις ξεχνώ έτσι εύκολα ) να παρουσιάσω μια δοκιμαστική έκδοση ενός απλούστατου επεξεργαστή κειμένου με δυνατότητα ορθογραφικού ελέγχου σε απλό πομακικό κείμενο και αυτό θα επιχειρήσω να κάνω εν συντομία σ’ αυτή τη δημοσίεση.

Βασικά πρόκειται για μια 32-μπιτη desktop εφαρμογή για Windows, η οποία μπορεί να τρέξει ως τέτοια και σε 64-μπιτο περιβάλλον (την 64-μπιτη αρχιτεκτονική πολλοί ειδήμονες δεν τη θεωρούν και πανάκεια για όλες τις εφαρμογές).


Ο πυρήνας της αποτελείται από  το γνωστό Scintilla ( ένα δωρεάν open source λογισμικό για την επεξεργασία πηγαίου κώδικα που απευθύνεται σε και χρησιμοποιείται από προγραμματιστές κυρίως ), το οποίο εσωτερικά χρησιμοποιεί κωδικοποιήση UTF-8, ενώ το «περίβλημα» MFC (wrapper) βασίζεται σε μια αντίστοιχη προσαρμογή - μεταφορά του για περιβάλλον Windows.  Κάποια μοναδικά χαρακτηριστικά του δε ήταν και τα κριτήρια αυτά που συνέτειναν στην επιλογή του ( Όσο κι αν παιδεύτηκα με τα στοιχεία ελέγχου CEdit και CRichEditCtrl της Microsoft ήταν αδύνατη η επίτευξη του επιθυμητού αποτελέσματος ).


Μιλάμε, βεβαίως, για μια «πειραγμένη» έκδοση του Scintilla, καθώς η πρωτότυπη όχι μόνο τα Πομακικά, αλλά ούτε και τα Ελληνικά δεν υποστήριζε καλά καλά.  Γενικά ήταν «εχθρική» σε οτιδήποτε πέραν του συνόλου χαρακτήρων ASCII και αυτό δημιουργούσε διάφορα προβλήματα.  Έπρεπε επομένως να ανασκουμπωθώ και να εντοπίσω τα σημεία – κλειδιά για να μπρέσω να κάνω τα «μαγικά» μου.  Αυτή είναι η «ομορφιά» του λογισμικού ανοιχτού κώδικα.  Δεν δικαιούμαι, δυστυχώς, να σας δείξω κάποια από τα «μαγικά» αυτά  «κόλπα», γιατί το απαγορεύει η άδεια χρήσης του λογισμικού.


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


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


Για να τεθεί σε εφαρμογή το σχέδιο, αυτό που χρειαζόταν ήταν μια αρκετά πλούσια και αξιόπιστη λίστα ελληνικών λέξεων.  Έπρεπε να βγω, λοιπόν, στη γύρα προς αναζήτηση μιας τέτοιας λίστας.  Αυτή τη φορά στάθηκα πιο τυχερός.  Με μια ολιγόλεπτη περιήγηση στο διαδίκτυο έπεσα πάνω στο ελληνικό λεξικό του OpenOffice που έχουν κατασκευάσει άνθρωποι του  Πανεπιστημίου Πατρών και το οποίο περιλαμβάνει περί τις 600.000 τύπους λέξεων.  Πολύ αξιόλογη προσπάθεια, παρά τις ελλείψεις.  Από τη στιγμή που είχε βρεθεί η λίστα με τις λέξεις, ήταν ζήτημα μερικών κλικ για να μετατραπεί στην επιθυμητή μορφή, έναν Κατευθυνόμενο Ακυκλικό Γράφο ( Directed Acyclic Graph ), και να μπορεί να «συνεργαστεί» με την εφαρμογή μας.


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


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


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


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


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


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


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



Το κεντρικό παράθυρο της εφαρμογής ( MFC Single Document Document / View architecture )

Παράθυρο διαλόγου ορθογραφικού ελέγχου



Παράθυρο διαλόγου με τις επιλογές εύρεσης / αντικατάστασης κειμένου


Παράθυρο διαλόγου με τις επιλογές συλλαβισμού


Παράθυρο διαλόγου με κάποιες πληροφορίες για το κείμενο


Παράθυρο διαλόγου ρυθμίσεων


Επιλογές χρωμάτων διαφόρων στοιχείων - λειτουργιών


Υπόδειξη – υπογράμμιση ορθογραφικών λαθών


Λειτουργίες επεξεργασίας – διόρθωσης με το δεξί κλικ


Λειτουργία αύξουσας – φθίνουσας ταξινόμησης


Δυνατότητα εκτύπωσης

Η εφαρμογή για να τρέξει χρειάζεται κάποιες βιβλιοθήκες (αρχεία .dll) της Microsoft.  Σε περίπτωση που αυτές δεν υπάρχουν εγκατεστημένες στον υπολογιστή σας, το λειτουργικό σας θα σας "ενημερώσει" για το τί ακριβώς χρειάζεται.  Αν χρειαστεί να τις κατεβάσετε από το internet, αυτές μπορούν να τοποθετητούν (με απλή αντιγραφή) στον υπολογιστή σας ως εξής: α) στον ίδιο φάκελο που έχετε αντιγράψει την εφαρμογή PomLex (εφ' όσον δεν θα τις χρειαστούν και άλλες εφαρμογές) β) στον φάκελο συστήματος του λειτουργικού (αυτός συνήθως είναι ο "System32" σε 32-bit λειτουργικό) και γ) οπουδήποτε στο σκληρό δίσκο, εφ' όσον έχει οριστεί η διαδρομή τους στη μεταβλητή συστήματος "Path".

Την εφαρμογή μπορείτε να την κατεβάσετε από εδώ
MD5 Checksum: 82bb8048ca69bc921210279f6f9583ad

Σας εύχομαι καλές δοκιμές

Ριτβάν


Σάββατο 11 Οκτωβρίου 2014

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

Από μικρός θυμάμαι ότι είχα μια έφεση στην ορθογραφία της Ελληνικής (είχα την "ατυχία" να μην διδαχθώ Τουρκικά στο Δημοτικό αλλά και στο, πεντατάξιο τότε, Ιεροσπουδαστήριο του Εχίνου αργότερα). Δεν είχα φανταστεί ποτέ όμως ότι θα έφτανα στο σημείο να ασχολούμαι με την ορθογραφία της Πομακικής και μάλιστα σε επίπεδο προγραμματισμού.  Είναι, φαίνεται, το “τυχερό” μου.

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


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


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


Αρκετά "τολμηρό" το εγχείρημα, βεβαίως, και σίγουρα όχι μια απλή άσκηση προγραμματισμού, για τις επίσημες και αναγνωρισμένες σπουδές μου τουλάχιστον.  Τα προβλήματα και οι δυσκολίες αρκετές.  Οι λύσεις περιορισμένες και η προσαρμογή τους στα Πομακικά αρκετά επίπονη.  Το τελικό αποτέλεσμα;  Άκρως ενθαρρυντικό.  Δικαιώνει, πιστεύω, τους κόπους και τις προσπάθειες σε πολύ υψηλό βαθμό.


Έχοντας ως σύμμαχο τη μηχανή αναζήτησης της Google μαζί με τα "άθλια" Αγγλικά μου (στα Ελληνικά δυστυχώς λίγα πράγματα κυκλοφορούν στο διαδίκτυο πάνω στο θέμα αυτό) και ως πρώτη επιλογή, λοιπόν, ανάμεσα στα "ευρήματα" είπα να δοκιμάσω την πολύ καλή και τεκμηριωμένη λύση – πρόταση ηλεκτρονικού ορθογραφικού ελέγχου του Peter Kankowski στο, επίσης, πολύ ενδιαφέρον και αναλυτικό άρθρο του στο CodeProject, το οποίο συνοδεύεται και από μια εφαρμογή επίδειξης  (για την Αγγλική Γλώσσα στην προκειμένη περίπτωση, αλλά αυτό δεν έχει και μεγάλη σημασία).


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


Πέρα από τις όποιες μικροδιορθώσεις και τροποποιήσεις που ήταν αναγκαίες, κυρίως σε ό,τι αφορά τους τύπους δεδομένων, εκεί που "χωλαίνει" αισθητά, όπως τονίζει και ο αρθρογράφος και προσδοκά σε προτάσεις βελτίωσης, είναι ο αλγόριθμος της κατά προσέγγιση (fuzzy) αναζήτησης για την υπόδειξη ορθογραφικών προτάσεων στον έλεγχο ενός κειμένου.  Ο ίδιος στην  εφαρμογή επίδειξης χρησιμοποιεί απόσταση edit 1 και τα αποτελέσματα που αυτή δίνει για τα Αγγλικά ίσως δεν είναι και τόσο άσχημα.  Για τα Πομακικά όμως, όπως ενδεχομένως και για άλλες γλώσσες, νομίζω ότι χρειάζεται τουλάχιστον μια απόσταση edit 2 για μια πληρέστερη και εγκυρότερη λίστα υποδείξεων.


Στην εφαρμογή επίδειξης που συνοδεύει το άρθρο, για παράδειγμα, και με τις μεθόδους που χρησιμοποιεί ο δημιουργός της στον αλγόριθμό του, αν πληκτρολογήσει κανείς τη λέξη matherland (αντί της σωστής motherland που υπάρχει στο λεξικό), θα διαπιστώσει έκπληκτος ότι για κάποιον "περίεργο" λόγο δεν εμφανίζεται καμιά ορθογραφική πρόταση – υπόδειξη και αυτό, αν μη τί άλλο, είναι λίγο προβληματικό.  Ο λόγος είναι ότι προφανώς δεν χρησιμοποιείται η διαδικασία της αντικατάστασης χαρακτήρων (substitution), το “o”, δηλαδή, στη θέση του “a” στην προκειμένη περίπτωση, ή ότι η χρήση της διαδικασίας αυτής είναι κατά κάποιο τρόπο περιορισμένη. Στην πραγματικότητα αν εξετάσει κανείς τον  κώδικα της διαδικασίας “fuzzy_match” που αρχίζει στη γραμμή 218 του αρχείου “spellchecker.c”, θα δει ότι, όντως, ισχύει η δεύτερη περίπτωση και η εξήγηση είναι η χρήση της συνάρτησης “similar_letters”, η οποία, ελλείψει υποστήριξης της φωνητικής γραφής (sound-like) στην παρούσα υλοποίηση, περιορίζει τη λειτουργία της αντικατάστασης μεταξύ των "ομοίων" φωνητικά και "γειτονικών" στο πληκτρολόγιο χαρακτήρων μόνο.  Η συγκεκριμένη επιλογή σαφώς και έχει κάποια λογική, πλην όμως δεν είναι η διαδικασία της αντικατάστασης όπως αυτή περιγράφεται στον αρχικό ορισμό της.  Στα Πομακικά, φυσικά, σε αντίθεση με την Αγγλική ή την Ελληνική, εκτός από την απουσία των δίψηφων φθόγγων (καταργήθηκαν με την αναθεώρηση του αλφαβήτου), η προφορά όλων των γραμμάτων είναι μοναδική ανεξάρτητα από τη θέση ή τη σειρά τους μέσα στη λέξη και οι όποιες μεταβολές στους φθόγγους αποδίδονται με αντίστοιχους εναλλακτικούς χαρακτήρες (σε κάποιες περιπτώσεις π.χ. τα τελικά άηχα σύμφωνα αντικαθίστανται από τα αντίστοιχα ηχηρά τους όπως στις λέξεις hläp – hlä́bos, plačlı́f – plačlı́va).  Αυτό σημαίνει ότι για τα Πομακικά δεν τίθεται θέμα υποστήριξης φωνητικής γραφής, ενώ η περίπτωση της μεταβολής των φθόγγων καλύπτεται πλήρως από τη διαδικασία της γνωστής απλής αντικατάστασης.
 


Εικόνα 1: Η εφαρμογή επίδειξης του P. Kankowski όπου φαίνεται η αδυναμία του αλγορίθμου να υποδείξει ορθογραφική πρόταση στη θέση της λανθασμένης λέξης “matherland”.


 


Εικόνα 2: Η εφαρμογή επίδειξης του P. Kankowski και η εύρεση της λέξης “motherland” στο λεξικό.

Ύστερα από επίμονη και επίπονη προσπάθεια τροποποίησης και βελτίωσης του εν λόγω αλγορίθμου μετά πολλών δοκιμών κι ελέγχων, το γενικό συμπέρασμα που προκύπτει είναι ότι η εκτεταμένη σάρωση μιας δομής Ternary DAG (με δεκάδες ή εκατοντάδες χιλιάδες κόμβους) στην αναζήτηση μιας λέξης με εφαρμογή του αλγορίθμου Damerau – Levenshtein για τον έλεγχο της επιθυμητής απόστασης edit είναι ασύμφορη από άποψη υπολογιστικού κόστους και επιδόσεων.  Αντ’ αυτού, μια πολύ πιο περιορισμένη και ελεγχόμενη σάρωση με εξίσου καλά αποτελέσματα μπορεί να επιτευχθεί με τη χρήση μιας προκατασκευασμένης λίστας υποψήφιων ορθογραφικών προτάσεων – υποδείξεων προσαρμοσμένων στις επιθυμητές διαδικασίες και αποστάσεις edit.  Μια τέτοια λίστα, φυσικά, με τους συνδυασμούς όλων των γραμμάτων του όποιου αλφαβήτου, πεζών και κεφαλαίων ενδεχομένως, θα ήταν τεράστια σε μέγεθος και η κατασκευή της θα είχε αρκετά μεγάλο υπολογιστικό κόστος, ενώ μια ικανοποιητική λύση στο πρόβλημα φαίνεται ότι αποτελεί η χρήση χαρακτήρων μπαλαντέρ με τον κατάλληλο χειρισμό τους.  Ωστόσο ένα μικρό ζήτημα που φαίνεται ότι υπάρχει ακόμα με μια τέτοια λίστα είναι ότι σε ορισμένες διαδικασίες edit κάποιες υποψήφιες προτάσεις – υποδείξεις επικαλύπτονται, ευτυχώς σε πολύ μικρό ποσοστό – της τάξεως του 5% με μια πρόχειρη εκτίμηση, με αποτέλεσμα την ύπαρξη διπλών τιμών, επομένως και διπλών αποτελεσμάτων, και άρα περιττών αναζητήσεων.  Από την άλλη όμως η μοναδικοποίηση των τιμών της λίστας θα είχε αμφίβολα ή πενιχρά αποτελέσματα και εκτιμάται ότι θα επιβράδυνε μάλλον τον αλγόριθμο παρά θα τον επιτάχυνε.  Σε ό,τι αφορά δε την ταξινόμηση των υποδεικνυόμενων ορθογραφικών προτάσεων με σειρά από τις περισσότερο στις λιγότερο πιθανές ή κοντινές, αυτή μπορεί να υλοποιηθεί με τη  χρήση μιας απλής κλάσης της C++ με τις κατάλληλες οδηγίες και τη χρήση του τελεστή σύγκρισης "<" (μικρότερο).  Στη σύγκριση αυτή εξετάζεται πρώτα η προϋπολογισμένη και αποθηκευμένη απόσταση edit και ακολούθως η αλφαβητική σειρά, ενώ για την επίτευξη ακόμα μεγαλύτερης προσέγγισης θα μπορούσαν να χρησιμοποιηθούν ίσως περισσότερο σύνθετοι υπολογισμοί.

 

Εικόνα 3: Η κλάση CSug όπου φαίνεται η χρήση του τελεστή σύγκρισης "<" (μικρότερο) που χρησιμεύει στην ταξινόμηση.
 


Εικόνα 4: Εφαρμογή επίδειξης κατασκευής λίστας υποψήφιων ορθογραφικών προτάσεων – υποδείξεων (* = εισαγωγή, ? = αντικατάσταση)


Εικόνα 5: Η ρουτίνα της διαδικασίας edit για την αντικατάσταση 1 +  την εισαγωγή 1 χαρακτήρα

Στην παρούσα υλοποίηση, λοιπόν, με απόσταση edit 2 και το ίδιο ακριβώς αγγλικό λεξικό που συνοδεύει την εφαρμογή επίδειξης του Peter Kankowski (περίπου 100.000 λέξεις) ο τροποποιημένος και βελτιωμένος αλγόριθμος υποδεικνύει 5 ορθογραφικές προτάσεις στη θέση της λανθασμένης λέξης “matherland”, όσες δηλαδή θα πρότεινε και ο αλγόριθμος Damerau – Levenshtein σε περιβάλλον δυναμικού προγραμματισμού με ασύγκριτα μεγαλύτερο κόστος.
Το αποτέλεσμα που εμφανίζεται στην εικόνα 6 προκύπτει από τη χρήση των εξής διαδικασιών edit:
 
  • εισαγωγή 1 και 2 χαρακτήρων, 
  • αντικατάσταση 1 και 2 χαρακτήρων, 
  • διαγραφή 1 και 2 χαρακτήρων, 
  • αντικατάσταση 1 χαρακτήρα σε συνδυασμό με την εισαγωγή 1 χαρακτήρα και, τέλος, 
  • αντιμετάθεση 2 χαρακτήρων.
Είναι δυνατή, φυσικά, η χρήση ("κατάχρηση" πιθανόν με αποτέλεσμα να προκύπτει απόσταση edit μεγαλύτερη του 2 ίσως κάποιες φορές) και άλλων διαδικασιών edit, όπως
  • διαγραφή + αντικατάσταση,
  • διαγραφή + εισαγωγή,
  • αντιμετάθεση + αντικατάσταση και
  • αντιμετάθεση + εισαγωγή,
με το ανάλογο κόστος αναζήτησης, το οποίο, σημειωτέον, ανεβαίνει αισθητά μεν, ειδικά για τις μεγάλες λέξεις, κυμαίνεται όμως σε ανεκτά επίπεδα κατά τη γνώμη μου.


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




Εικόνα 7: Η κεντρική διαδικασία του αλγορίθμου ορθογραφικών προτάσεων – υποδείξεων

Κατά τη διάρκεια των δοκιμών κι ελέγχων και για λόγους σύγκρισης κρίθηκε αναγκαία η εξέταση και άλλων μοντέλων υπολογιστικής ορθογραφίας.  Ανάμεσα στις υποψήφιες λύσεις, λοιπόν, με τα πολύ ενδιαφέροντα χαρακτηριστικά της και τους προηγμένους αλγορίθμους που χρησιμοποιεί, δε θα μπορούσε να λείπει η υψηλών επιδόσεων βιβλιοθήκη PATL (Practical Algorithm Template Library), με πεδίο χρήσης στην επεξεργασία φυσικού λόγου και όχι μόνο, η οποία και επελέγη τελικά ως μοντέλο σύγκρισης.  Τα κριτήρια για την επιλογή της ήταν η παραπλήσια δομή δεδομένων PATRICIA που χρησιμοποιεί κατά πρώτο λόγο και κατά δεύτερο τα συμβατά με την STL πρότυπά της.  Στις συγκριτικές δοκιμές που έκανα με χρήση του αλγορίθμου Αυτομάτων Levenshtein των  Schulz και Mihov μου άφησε άριστες εντυπώσεις σε ό,τι αφορά τους χρόνους και όπως φάνηκε μέσα από τη διαδικασία αυτή ορισμένες τουλάχιστον φορές έδειχνε ότι είναι κατά τι γρηγορότερη.  Εκεί που υστερεί σημαντικά όμως έναντι της λύσης του Kankowski είναι στη συμπίεση των δεδομένων με αποτέλεσμα την αυξημένη χρήση πόρων της μνήμης RAM.  Ψευτολεξικό που κατασκέυασα προγραμματιστικά για τις ανάγκες των δοκιμών 800.000 λέξεων, χρησιμοποιώντας ως βάση λίγες πραγματικές λέξεις, μεγέθους 13 Megabytes σε ασυμπίεστη μορφή (έτοιμο πραγματικό λεξικό αυτού του μεγέθους δεν μπόρεσα να βρω), για να τρέξει με τη βιβλιοθήκη PATL απαιτούνται περίπου 70 Megabytes μνήμης RAM, συμπεριλαμβανομένων των πόρων που χρησιμοποιεί η ίδια η εφαρμογή, ενώ με τη λύση που προτείνει ο Kankowski απαιτείται κάτι λιγότερο από το το 1/10 αυτής στη συμπιεσμένη του μορφή που δεν υπερβαίνει το μισό Megabyte στο σκληρό δίσκο.  Η διαφορά αυτή είναι αναμφισβήτητα μια σημαντική παράμετρος που δεν μπορεί να αγνοηθεί.  Σε περιβάλλοντα συστημάτων υψηλών επιδόσεων όμως με εξασφαλισμένη επάρκεια μνήμης RAM και υπολογιστική ισχύ θα μπορούσε να χρησιμοποιηθεί ανεπιφύλακτα και με ιδιαίτερη άνεση, εξαιρουμένης ίσως της συχνής φόρτωσης ενός υπερλεξικού αρκετών εκατομμυρίων λέξεων.




Εικόνα 8: Στιγμιότυπο από τη δοκιμή της βιβλιοθήκης PATL (Practical Algorithm Template Library) με χρήση του αλγορίθμου Αυτομάτων Levenshtein και απόσταση edit 2.

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


Μέχρι τότε να περνάτε εσείς καλά κι εμείς καλύτερα.


Τις εφαρμογές επίδειξης θα τις βρείτε εδώ (md5 checksum: 8e8fceed00a5fcbecd9314f71abbfe75).  Για τον έλεγχο της ακεραιότητας του αρχείου μπορείτε να χρησιμοποιήσετε τη δωρεάν εφαρμογή που θα βρείτε στη διεύθυνση http://www.winmd5.com/).


Υπενθυμίζεται ότι το σύνολο του πηγαίου κώδικα μπορεί να διατεθεί δωρεάν σε οποιονδήποτε ενδιαφερόμενο με ένα απλό αίτημα στη ηλεκτρονική διεύθυνση ritvank@gmail.com


Κάθε καλόπιστη κριτική, υπόδειξη λάθους ή πρόταση βελτίωσης είναι ευπρόσδεκτη.



Σημείωση σχετικά με το λεξικό που συνοδεύει τις εφαρμογές επίδειξης:

Copyright 2000-2004 by Kevin Atkinson
Permission to use, copy, modify, distribute and sell these word lists, the associated scripts, the output created from the scripts, and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Kevin Atkinson makes no representations about the suitability of this array for any purpose. It is provided "as is" without express or implied warranty.


http://wordlist.sourceforge.net/
 

Κυριακή 10 Αυγούστου 2014

Περιμένοντας τους βαρβάρους

Σε μια κατ' ιδίαν συνάντηση που είχα πέρυσι το καλοκαίρι με τον κ. Георги Митринов (Υφηγητής στο Τμήμα Ιστορίας της Βουλγαρικής Γλώσσας της Ακαδημίας Επιστημών της Βουλγαρίας) μετά από δική μου επιδίωξη και με αφορμή ένα βιβλίο του σχετικά με τα Πομακικά που ομιλούνται στην Ξάνθη και στην Κομοτηνή με τίτλο "Южнородопските български говори в Ксантийско и Гюмюрджинско", βασισμένο κυρίως στο υλικό που εξέδωσε περί το 1995 αν θυμάμαι καλά η Μηχανική Α.Ε και κυρίως στο Πομακικό - Ελληνικό Λεξικό του Πέτρου Δ. Θεοχαρίδη (υλικό από τα λεξικά του Δ' Σ.Σ. λίγο δύσκολο να έχει), όπου κάνει "σκληρή" κριτική  στην όλη προσπάθεια που έγινε τότε (και συνεχίζεται και σήμερα ακόμα από κάποιους) τόσο από τον πρόεδρο της εν λόγω κατασκευαστικής εταιρείας αλλά και συνολικά από την ελληνική πολιτεία, προφανώς ενοχλημένος κι αυτός, όπως και τόσοι άλλοι, από τον όρο "Πομακικός", και όταν η φιλική κατά τα άλλα συζήτηση περιπλέχτηκε λίγο και ανακατεύτηκαν και οι ελληνοβουλγαρικές σχέσεις κατά τη διάρκεια του Α' ψυχρού πολέμου (νομίζω πως οδεύουμε ολοταχώς για τον Β' Ψ.Π., αν δεν έχουμε μπει ήδη), αυτός αστειευόμενος μου είπε να μεταφέρω στους συμπατριώτες μου το μήνυμα ότι "βάρβαροι" πλέον δεν υπάρχουν, θυμίζοντάς μου τους "βαρβάρους" του Καβάφη.

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

Αυτό είναι κοντολογίς το παρασκήνιο για το πώς "έμπλεξα" με τους "βαρβάρους", γιατί μπορεί να νομίσει κανείς ότι ήρθαν ουρανοκατέβατοι και - ακόμα χειρότερα - κάποιοι να το πιστέψουν κιόλας.

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


VARVÁRENE ČÁKAVA

— Kaná čákame na platı́yeso / pazárese / fóroso svı́tı (/skupnénı / zbrátı)?

Búgün še da dóydot varvárene (/dı́vıne).

— Ótı faf Senátase uvótre ısélkus sedénye (nı́kana ne právenye)?

Kaná sedö́t Senatóryeso ı na ızkáravot nı́kakvı̈ kanúnove?

Ótı še varvárene búgün da fpröt.
Kakvı̈́ kanúnove Senatóryeso da ızkárot?
Varvárene agá dóydot še ızkárot tı́ye.

— Ótı ye ımparatóros ısı̈́y ráno stánal

ı sedı́ na kasabóskokne nay gulä́ma bı́le
varhú trónane, artósan ı sas korónono na glavóno?

Ótı še varvárene da fpröt búgün
ı ımparatóros čáka da pasrö́šne tä́hnokne goleméca.
Nagadı́l ye bılé ı annók pergaménta da mu dadé.
Faf tóga mu ye napı́sal tı́tlı̈ mlógo ı ı́meta.

— Ótı so dvomı́nasa nu kónsula ı pretórese ızlä́lı
s červénı̈ne kendı́sanı̈ tógı̈·
ótı so belehčé nadénalı sas ınélkus ametı́ste
ı pórstene sas svétlı̈, leskátı̈ zmarágdove·
ótı da zö́mot / fátet (f rakı̈́ne) búgün skópı̈ne dekenı́kove
s gümǘše ı altóna ápayrı̈ ızrábatenı̈ (/ızkı̈́čenı̈)?

Ótı še varvárene da fpröt búgün
ı varvárene gı ınakvı̈́zne rábatı̈ ableštä́vot.

— Ótı ı kadórnıse (/dostóynıse) rı́tore (/hatı́pye) na dahódet kákna na sä́kutro
da ızkárot dúmo (/nútı̈ka) ı da sı kážot tä́hnono?

Ótı še varvárene da fpröt búgün
ı tı́ye na gálet mlógo mlógo dúmenye ı ızkázavanye.

— Ótı da so yevı́ ısı̈́y bırdén ısázı sı̈kıntı̈́ye (ısazı́ strah)
ı ısázı konfúzya (Lıcáta kakvı̈́ seryóznı̈ / papárenı̈ / mráčenı̈ stánaho).
Ótı so práznet bóržo pótevese (/sakáčyeso) ı platı́yese,
ı vrı́tsı so vráštot f kóštene ınélkus začúdenı?

Ótı so smračı́ ı varvárete na dóydaho.
I annı́ so vórnaho at sı́narı̈ne (/hudútane),
ı kázaho če varváre néma yéšte.

I kaná še stáneme (/právıme) 'sä prez varváre?
Itézı ınsán sı svóršavaho za nä́ko (rábato).



(WN)
Da móžašo badı́n nä́kak da káža Kaváfıs'u kólko húbavı, kultúrnı, nazı́k amá ı strášnı so ısä́šnıse varváre, alá kak.
Na znom prez kugána ye žı̈vál toy at kutrı̈́ sı́narı̈ gı so čákalı da vlézot varvárene, lä́ykım nášıse modérnı so addávno yéšte vlä́lı ad zánıčnı̈se sı́narı̈ bez da gı ye rǘkal ı čákal badı́n, prezö́lı so sı́čkoso, réžot, krayót, sı̈́yet ı narö́dot kanúnove durgá da nu "naredö́t" vırtsä́h.
Ta ı Mıtrı́nof kólkoto ı da so ıprattı́sava če néma varváre, tı́ye so ıtúzı ı pa sä́kade, če ı faf tä́hnono stráno ı yéšte po adudávno.



Το πρωτότυπο κείμενο

ΠΕΡΙΜΕΝΟΝΤΑΣ ΤΟΥΣ ΒΑΡΒΑΡΟΥΣ


Κωνσταντίνος Π. Καβάφης

— Τι περιμένουμε στην αγορά συναθροισμένοι;

Είναι οι βάρβαροι να φθάσουν σήμερα.

— Γιατί μέσα στην Σύγκλητο μια τέτοια απραξία;
Τι κάθοντ’ οι Συγκλητικοί και δεν νομοθετούνε;

Γιατί οι βάρβαροι θα φθάσουν σήμερα.
Τι νόμους πια θα κάμουν οι Συγκλητικοί;
Οι βάρβαροι σαν έλθουν θα νομοθετήσουν.

— Γιατί ο αυτοκράτωρ μας τόσο πρωί σηκώθη,
και κάθεται στης πόλεως την πιο μεγάλη πύλη
στον θρόνο επάνω, επίσημος, φορώντας την κορώνα;

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

— Γιατί οι δυο μας ύπατοι κ’ οι πραίτορες εβγήκαν
σήμερα με τες κόκκινες, τες κεντημένες τόγες·
γιατί βραχιόλια φόρεσαν με τόσους αμεθύστους,
και δαχτυλίδια με λαμπρά, γυαλιστερά σμαράγδια·
γιατί να πιάσουν σήμερα πολύτιμα μπαστούνια
μ’ ασήμια και μαλάματα έκτακτα σκαλιγμένα;

Γιατί οι βάρβαροι θα φθάσουν σήμερα·
και τέτοια πράγματα θαμπώνουν τους βαρβάρους.

—Γιατί κ’ οι άξιοι ρήτορες δεν έρχονται σαν πάντα
να βγάλουνε τους λόγους τους, να πούνε τα δικά τους;

Γιατί οι βάρβαροι θα φθάσουν σήμερα·
κι αυτοί βαρυούντ’ ευφράδειες και δημηγορίες.

— Γιατί ν’ αρχίσει μονομιάς αυτή η ανησυχία
κ’ η σύγχυσις. (Τα πρόσωπα τι σοβαρά που εγίναν).
Γιατί αδειάζουν γρήγορα οι δρόμοι κ’ η πλατέες,
κι όλοι γυρνούν στα σπίτια τους πολύ συλλογισμένοι;

Γιατί ενύχτωσε κ’ οι βάρβαροι δεν ήλθαν.
Και μερικοί έφθασαν απ’ τα σύνορα,
και είπανε πως βάρβαροι πια δεν υπάρχουν.

Και τώρα τι θα γένουμε χωρίς βαρβάρους.
Οι άνθρωποι αυτοί ήσαν μια κάποια λύσις.

Και για να "γνωριστείτε" καλύτερα με τους βαρβάρους (του Καβάφη εννοώ, με τους σύγχρονους θα γνωριστείτε καλύτερα στο κοντινό μέλλον, για όσους "ατύχησαν" μέχρι τώρα), παραθέτω συνδέσμους με μεταφράσεις του ποιήματος στη Βουλγαρική και την Τουρκική.

http://www.litclub.com/library/prev/kavafis/varvarite.html

http://www.siir.gen.tr/siir/c/constantino_kavafis/barbarlari_beklerken_1.htm

Να μην ξεχνάτε βεβαίως την πασίγνωστη ρήση του Γάλλου συγγραφέα Edmond Jaloux:
"Οι μεταφράσεις είναι σαν τις γυναίκες. Όταν είναι ωραίες δεν είναι πιστές και όταν είναι πιστές δεν είναι ωραίες."

Εις το επανιδείν