Αναγνώριση Λεξικών Μονάδων (Tokenization)


Μετά την συγκέντρωση των κειμένων και τον καθαρισμό τους έπεται η λεξική και μορφολογική τους ανάλυση. Το καθάρισμα των κειμένων περιλαμβάνει απλές διαδικασίες, όπως, την αφαίρεση των HTML επισημειώσεων την αφαίρεση άλλων στοιχείων που δεν ανήκουν στο κυρίως κείμενο π.χ. οριζόντιων γραμμών, χαρακτήρων αλλαγής σελίδας (page-break) ή φατσούλες σε ηλεκτρονικά μηνύματα ή εισαγωγικά (quotation, >>) στην αρχή κάθε γραμμής, την αφαίρεση μαθηματικών ή χημικών παραστάσεων κ.ά. Ένα κείμενο περιέχει λευκούς χαρακτήρες ενδεχομένως markup χαρακτήρες που δηλώνουν αλλαγή των γραμματοσειρών (fonts), αλλαγές στο μορφότυπο του κειμένου, ειδικούς χαρακτήρες και πολλά άλλα. Αν και όλα αυτά έχουν κάποια πληροφορία εν τούτοις τα απομακρύνουμε από το κείμενο. Οι διαδικασίες αυτές οι οποίες διαδέχονται η μια την άλλη απεικονίζονται στο σχήμα 5.

preprocessing1
Σχήμα 5 Μετασχηματισμοί των κειμένων πριν την δημιουργία ευρετηρίων

Με τον όρο Tokenization (αναγνώριση λέξεων) εννοούμε την διαδικασία του χωρίσματος ενός κειμένου σε τμήματα με νόημα. Το μικρότερο τμήμα (συμβολοσειρά) με νόημα είναι μια λέξη. Ο όρος λεξικό στοιχείο (lexical items, lexical chunks) δηλώνει μια οντότητα που αποτελείται από μία ή περισσότερες λέξεις και έχει ένα νόημα. Όλα τα λεξικά στοιχεία μιας γλώσσας αναφέρονται γενικά ως λέξεις (lexis). Τέτοια στοιχεία είναι: οι απλές λέξεις, ρηματικές εκφράσεις, σύνθετες λέξεις, collocations, ιδιωματισμοί. Ο όρος λέξημα (lexeme) είναι μια θεωρητική μονάδα στη μορφολογική ανάλυση που αντιστοιχεί σε ένα σύνολο μορφών που μπορεί να έχει μια λέξη, π.χ. στην αγγλική οι λέξεις, run, runs, ran, running, είναι όλες μορφές του ίδιου λεξήματος, RUN. Τα λεξήματα συνήθως αποτελούνται από μικρότερες μονάδες με ιδιαίτερο νόημα που ονομάζονται μορφήματα (morphemes). Τα tokens είναι συμβολοσειρές που κατηγοριοποιούνται σύμφωνα με κάποιους κανόνες ως έννοιες, αριθμοί, ημερομηνίες, σημεία στίξεως, κλπ. Η διαδικασία του tokenization δεν είναι μια καθαρά γλωσσολογική και τυπική διαδικασία αλλά εξαρτάται από την εφαρμογή. Οι tokenizers μπορούν να ταξινομηθούν με διάφορα κριτήρια όπως: Ένας tokenizer μπορεί να αποτελείται από μια σειρά πολύ εξειδικευμένων ενοτήτων σε αλληλουχία (pipe-lineώστε να έχει μεγάλη ευελιξία για βελτιώσεις. Τέτοιες ενότητες είναι: 1. Η αποκοπή του κειμένου στους λευκούς χαρακτήρες, 2. Η απομόνωση των σημείων στίξεως, 3. Η αναγνώριση των tokens, 4. Η αναγνώριση των συντομεύσεων, 5. Η συγχώνευση σύνθετων λέξεων, 6. Η αναγνώριση tokens με κανονικές εκφράσεις (ημερομηνίες), 7. Η αναγνώριση τέλους περιόδου Ένας tokenizer μπορεί να είναι γενικός ή να είναι στενά συνδεδεμένος με μια θεματική περιοχή, όπως για παράδειγμα ιατρικά κείμενα, νομικά κείμενα. H αξιολόγηση ενός tokenizer συνήθως εντάσσεται στην αξιολόγηση ενός συστήματος ανάκτησης με τα γνωστά κριτήρια. Μια άλλη προσέγγιση αξιολόγησης είναι αυτή που ακολουθεί ο Grefenstette κατά την οποία ο tokenizer δοκιμάζεται πάνω σε μια συλλογή συγκρίνοντας τα διαδοχικά αποτελέσματα του με βάση τα πραγματικά που προκύπτουν από την επισημειωμένη συλλογή (annotated corpus). Συνήθως ο σχεδιασμός και ο συντονισμός ενός καλού tokenizer βασίζεται σε διαδοχικές δοκιμασίες και διορθώσεις (trials and errors). Το αποτέλεσμα του tokenization είναι δύο τύποι tokens. Ο ένας αντιστοιχεί σε μονάδες των οποίων η δομή των χαρακτήρων είναι αναγνωρίσιμη όπως για παράδειγμα τα σημεία στίξεως, αριθμοί, ημερομηνίες κλπ και ο άλλος τύπος είναι μονάδες (συμβολοσειρές) οι οποίες θα πρέπει να υποστούν κάποια μορφολογική ανάλυση. Στη πράξη το tokenization είναι μια δύσκολη διαδικασία στην οποία δεν έχει δοθεί η προσοχή που της αναλογεί από τις μηχανές αναζήτησης. Δύο παράγοντες μπορούν να εξηγήσουν το ανανεωμένο ενδιαφέρον για τη διαδικασία του tokenization. Ο μεγάλος όγκος των δεδομένων και για ορισμένες εφαρμογές που απαιτούν υψηλή επίδοση όπως η ιατρική, υπάρχει μεγάλη διαφοροποίηση στον τρόπο που αναφέρονται κάποια ονόματα π.χ. γονιδίων οπότε χρειάζεται οπωσδήποτε κάποια διαδικασία κανονικοποίησης. H αναγνώριση των tokens προϋποθέτει την αποσαφήνιση των σημείων στίξεως. Ορισμένα δομικά αναγνωρίσιμα tokens περιέχουν σημεία στίξεως τα οποία είναι αμφίσημα στοιχεία, όπως για παράδειγμα είναι οι αριθμοί, αλφαριθμητικές αναφορές , (α-3), ημερομηνίες (2/3/99), ακρώνυμα, (Α.Σ.Ο.Ε.Ε., ΣτΕ), και συντομογραφίες (συν.) Ορισμένα από αυτά μπορεί να αναγνωριστούν με κανονικές εκφράσεις. Οι προτάσεις τελειώνουν με τελεία ερωτηματικό ή θαυμαστικό. Τα δύο τελευταία σημεία είναι αρκετά σαφή ότι δηλώνουν τέλος πρότασης αν και το ερωτηματικό ορισμένες φορές μπορεί να χρησιμοποιηθεί ως διαχωριστικό μιας λίστας στοιχείων, α1; α2; α3;...Το περισσότερο αμφίσημο σημείο στίξεως είναι η τελεία. Δεν είναι καθόλου προφανές να διακρίνει κανείς πότε δηλώνει τελεία, και πότε συντόμευση. Θα μπορούσαν να χρησιμοποιηθούν λίστες από συντομεύσεις αλλά είναι πολύ μεγάλες και μη πεπερασμένες αφού μπορεί να περιέχουν κύρια ονόματα, ή ονόματα εταιρειών. Συντομογραφίες μπορούμε να έχουμε : • σε μια ακολουθία από κεφαλαίο χαρακτήρα που ακολουθείται από τελεία, • σε μια ακολουθία από γράμμα,τελεία, γράμμα, τελεία κλπ. • Ένα κεφαλαίο γράμμα ακολουθούμενο από μια ακολουθία από σύμφωνα και ακολουθούμενο από τελεία, Μr. Γενικά το πρόβλημα της αποσαφήνισης των σημείων στίξεως μπορεί να αντιμετωπιστεί ως ένα πρόβλημα δυαδικής κατηγοριοποίησης. Οι αριθμοί είναι οι λιγότερο αμφίσημοι από τους δομημένους τύπους. Στην αγγλική η τελεία χωρίζει το δεκαδικό από το ακέραιο μέρος ενός αριθμού και το κόμμα χωρίζει τον αριθμό κατά χιλιάδες ενώ στην ελληνική συμβαίνει το αντίθετο. Στον πίνακα 2-1 περιγράφουμε συνοπτικά μερικά από τα προβλήματα που πρέπει να αντιμετωπίσει μια διαδικασία αναγνώρισης όρων (tokenizer) σε ένα σύστημα ανάκτησης.

Ενέργεια Προβλήματα
Aποκοπή του κειμένου στους λευκούς χαρακτήρες
  • Space, tab, CR (carriage return), NL (New line), LF (line feed), FF (Form feed).
  • Τί κάνουμε στη περίπτωση σύνθετων όρων, π.χ. New York, Νέα Σμύρνη;
Αποσαφήνιση των σημείων στίξεως Το hyphen μπορεί να χωρίζει δύο φωνήεντα, co-occurrence ή να ενώνει δύο λέξεις () ή να σημαίνει απόσταση (Αθήνα-Πάτρα) ή όταν είναι στο τέλος γραμμής χωρίζει τη λέξη για λόγους ευθυγράμμισης του περιθωρίου.
Αναγνώριση των tokens
  • Οι χαρακτήρες που απομακρύνονται εξαρτώνται από τα κείμενα. Για παράδειγμα σε κείμενα σχετικά με πληροφορική δεν πρέπει να αφαιρέσουμε τα συν από το token C++ ή C#.
  • Πολλές λέξεις είναι μικρές (2-3 γράμματα)
Αναγνώριση των συντομεύσεων/td> RACE -- Research and development in Advanced Communications technologies for Europe WHO -- World Health Organization
Συγχώνευση σύνθετων λέξεων ή φράσεων Βλέπε παρακάτω ενότητα
Αναγνώριση tokens με κανονικές εκφράσεις e-mails, URL διευθύνσεις, ημερομηνίες κλπ.
Κανονικοποίηση σε πεζούς χαρακτήρες The Associated Press (Θέλουμε τα κεφαλαία) Μετάτρεψε σε πεζά όλες τις λέξεις στην αρχή πρότασης και στον τίτλο. Άφησε όπως είναι τις λέξεις στη μέση μιας πρότασης

Πίνακας 1. Εξαιρέσεις κατά τη διαδικασία αναγνώρισης όρων

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

Tokenizers στη Java

Η μέθοδος String.split(string, reg_exp) της Java επιτρέπει τη χρήση κανονικών εκφράσεων για τον καθορισμό των ορίων των tokens. Οι κανονικές εκφράσεις είναι ένας τρόπος να περιγράψουμε ένα σύνολο συμβολοσειρών οι οποίες έχουν κάποια κοινά χαρακτηριστικά. Οι κανονικές εκφράσεις μπορούν να χρησιμοποιηθούν για αναζήτηση συμβολοσειρών και γενικά στην επεξεργασία κειμένων. Οι τάξεις κανονικών εκφράσεων (Pattern, Matcher και PatternSyntaxException) είναι στη βιβλιοθήκη java.util.regex package. Η Java διαθέτει επίσης τρεις τάξεις tokenizer: StringTokenizer για συμβολοσειρές Αντικείμενα της τάξης αυτής μπορούν να δημιουργηθούν με τρεις διαφορετικούς κατασκευαστές (constructor methods) ανάλογα με το πλήθος των παραμέτρων. Οι παράμετροι καθορίζουν τους χαρακτήρες (delimiters) που θα χρησιμοποιηθούν για τον ορισμό των ορίων των tokens. Η τάξη StringTokenizer διαθέτει τις μεθόδους:
int countTokens(),
boolean hasMoreTokens() και
String nextToken().
StreamTokenizer για αρχεία. Η τάξη αυτή διαβάζει tokens κατ’ ευθεία από ένα αρχείο.

Ο Αναλυτής της Μηχανής Αναζήτησης Lucene

Ένας αναλυτής περιέχει ένα ή περισσότερους tokenizers και διάφορα φίλτρα. Τα φίλτρα εκτελούν διεργασίες μετά το tokenization όπως, αγνούν τα σημεία στίξεως, αφαιρούν τετριμμένες λέξεις. Το lucene διαθέτει μια αφηρημένη τάξη, Analyzer, με τρεις υλοποιήσεις. SimpleAnalyzer Απλά χρησιμοποιεί ένα Tokenizer ο οποίος μετατρέπει το input σε πεζά γράμματα. StopAnalyzer Περιλαμβάνει το φίλτρο μετατροπής σε πεζά και αφαιρεί τις τετριμμένες λέξεις οι οποίες είναι αποθηκευμένες σε ένα αρχείο. StandardAnalyzer Ομοίως μετατρέπει σε πεζά αφαιρεί τις τετριμμένες λέξεις και επιπλέον κάνει κάποιο απλοϊκό καθάρισμα των λέξεων, π.χ. αφαιρεί αποστρόφους και αφαιρεί τις τελείες από ακρώνυμα.

Αναφορές

  1. Gregory Grefenstette, and Pasi Tapanainen. (1994). "What is a Word, What is a Sentence? Problems of Tokenization." In: Proceedings of 3rd Conference on Computational Lexicography and Text Research (COMPLEX 1994).
  2. LT TTT- A flexible Tokenization Tool, Claire Grover, Colin Matheson, Andrei Mikheev, Marc Moens, Language Technology Group, University of Edinburgh
  3. Lucene Tutorial, By Steven J. Owens, http://www.darksleep.com/lucene/