ΤΕΧΝΟΛΟΓΙΕΣ ΠΟΛΥΜΕΣΩΝ Κείμενα Ν. Μ. Σγούρος (sgouros@unipi.gr)
Επεξεργασία Κειμένων Αναζήτηση Ακολουθιακή Αναζήτηση, Δομές Trie Συμπίεση Huffmann Coding, Run-Length Encoding, Burrows- Wheeler Κρυπτογράφηση Στατιστική Ανάλυση Εντοπισμός Διαφορών, Ανίχνευση Ομοιοτύπων (patterns)
Αναζήτηση Όρισε ένα σύνολο απο λέξεις-κλειδιά Κανονικές Εκφράσεις (Regular Expressions) Ανακάλυψε ποιές από τις λέξεις-κλειδιά περιέχονται στο κείμενο Επέστρεψε τις θέσεις στις οποίες καθεμία από τις λέξεις-κλειδιά εμφανίζεται στο κέιμενο
Κανονικές Εκφράσεις Μια κανονική έκφραση μπορεί να είναι:
Παραδείγματα a b* αναπαριστά {ε, "a", "b", "bb", "bbb",...} (a b)* αναπαριστά το σύνολο όλων των συμβολοσειρών που περιέχουν οποιονδήποτε συνδυασμό των συμβόλων "a" και "b" μαζί με την κενή συμβολοσειρά: {ε, "a", "b", "aa", "ab", "ba", "bb", "aaa",...} ab*(c ε) αναπαριστά το σύνολο όλων των συμβολοσειρών που αρχίζουν με "a", ακολουθούνται από μηδέν ή περισσότερα "b" και προαιρετικά μπορούν να τελειώνουν με ένα "c": {"a", "ac", "ab", "abc", "abb", "abbc",...}
Συντακτικό POSIX. Matches any single character For example, a.c matches "abc", etc., but [a.c] matches only "a", ".", or "c". [ ] Matches a single character that is contained within the brackets. For example, [abc] matches "a", "b", or "c". [a-z] specifies a range which matches any lowercase letter from "a" to "z". These forms can be mixed: [abcx-z] matches "a", "b", "c", "x", "y", or "z", as does [a-cx-z]. [^ ] Matches a single character that is not contained within the brackets. ^ Matches the starting position within the string. $ Matches the ending position of the string.
Συντακτικό POSIX ( ) Defines a marked subexpression. \n Matches what the nth marked subexpression matched, where n is a digit from 1 to 9. * Matches the preceding element zero or more times. For example, ab*c matches "ac", "abc", "abbbc", etc. [xyz]* matches "", "x", "y", "z", "zx", "zyx", "xyzzy", and so on. (ab)* matches "", "ab", "abab", "ababab", and so on. {m,n} Matches the preceding element at least m and not more than n times. For example, a{3,5} matches only "aaa", "aaaa", and "aaaaa".
Παραδείγματα.at matches any three-character string ending with "at", including "hat", "cat", and "bat". [hc]at matches "hat" and "cat". [^b]at matches all strings matched by.at except "bat". [^hc]at matches all strings matched by.at other than "hat" and "cat". ^[hc]at matches "hat" and "cat", but only at the beginning of the string or line. [hc]at$ matches "hat" and "cat", but only at the end of the string or line.
Αναγνώριση Κανονικών Εκφράσεων Μετατροπή κανονικών εκφράσεων σε ένα Μη Ντετερμινιστικό Πεπερασμένο Αυτόματο (ΜΠΑ) Σε ένα ΜΠΑ μπορεί να υπάρχουν: περισσότερες από μια μεταβάσεις που σημειώνονται με τον ίδιο χαρακτήρα κενές μεταβάσεις Παραγωγή από το ΜΠΑ ενός Ντετερμινιστικού Πεπερασμένου Αυτόματου (ΝΠΑ)
Παραδείγματα Αυτομάτων
Ακολουθιακή Αναζήτηση Για κάθε θέση του κειμένου έλεγξε αν η συμβολοσειρά που αρχίζει από αυτήν είναι ίδια με την λέξη-κλειδί Πολυπλοκότητα O(nm) στη χειρότερη περίπτωση, O(n+m) κατά μέσο όρο όπου n το μήκος του κειμένου και m το μήκος του κλειδιού.
Αναζήτηση Καταλόγου (Index Search) Αποθήκευσε το κείμενο σε μια καινούργια δομή δεδομένων που να διευκολύνει την αναζήτηση Ευρετήρια (inverted indices) Δέντρα επιθεμάτων (suffix trees) Εφάρμοσε ένα αλγόριθμο αναζήτησης στην νέα δομή.
Inverted Index Αποθήκευσε τις θέσεις στις οποίες εμφανίζεται κάθε λέξη του κειμένου Ταξινόμησε λεξικογραφικά το ευρετήριο που κατασκευάστηκε στο προηγούμενο βήμα (+) Γρήγορη εύρεση των θέσεων, (-) Μεγάλο μήκος ευρετηρίου O(n) όπου n ο αριθμός των λέξεων του κειμένου
Δέντρo Επιθεμάτων (Suffix Tree) Αποθήκευσε όλα τα επιθέματα στο κείμενο σε ένα δέντρο
Ορισμός Suffix Tree Το δέντρο έχει ακριβώς n φύλλα, όπου n το μήκος του κειμένου. Εξαιρουμένης της ρίζας καθε εσωτερικός κόμβος έχει τουλάχιστον δύο παιδιά. Κάθε ακμή αναπαριστά μια μη κενή συμβολοσειρά του κειμένου. Οποιεσδήποτε δυο ακμές που ξεκινούν από ένα κόμβο δεν μπορούν να αναπαριστούν συμβολοσειρές που αρχίζουν με τον ίδιο χαρακτήρα. Η συμβολοσειρά που σχηματίζεται ακολουθώντας ένα οποιοδήποτε μονοπάτι από τη ρίζα σε ένα φύλλο αποτελεί ένα επίθεμα του κειμένου.
Χαρακτηριστικά Suffix Tree Αφου κατασκευαστεί το δέντρο η αναζήτηση επιτυγχάνεται σε λογαριθμκό χρόνο Η κατασκευή του δέντρου έχει πολυπλοκότητα Ο(nlog(n)) Απαντά σε σύνθετα ερωτήματα όπως η εύρεση της μέγιστης κοινής συμβολοσειράς μεταξύ δυο κειμένων
Συμπίεση Η κωδικοποίηση μιας πηγής πληροφορίας με μικρότερο αιρθμό bits από την αρχική μορφή της. Η συμπίεση μπορεί να είναι μη απωλεστική (lossless) ή απωλεστική (lossy)
Ποιότητα Συμπίεσης Μέγεθος συμπιεσμένης πηγής Λόγος συμπίεσης =(μέγεθος ασυμπίεστης πηγής)/(μέγεθος συμπιεσμένης πηγής) Διάρκεια Συμπίεσης/Αποσυμπίεσης Ποιότητα Αποσυμπιεσμένης Πηγής Benchmark Archive Comparison Test (Act) - http://http://compression.ca/
Φάσεις Συμπίεσης Μοντελοποίηση Δημιουργία πιθανοτικών κατανομών στα μηνύματα της πηγής με βάση την εξέταση της δομής τους Κωδικοποίηση Δημιουργία κώδικα για κάθε μήνυμα με βάση το μοντέλο της πηγής Variable length coding
Εντροπία Αν S έιναι ένα σύνολο από πιθανά μηνύματα και p(s) η πιθανότητα εμφάνισης ενός s S τότε η ιδιοπληροφορία (self-information) του μηνύματος s και η εντροπία του S ορίζoνται ως:
Παραδείγματα Εντροπίας
Εντροπία της Αγγλικής Γλώσσας
Huffman Coding Κάθε σύμβολο κωδικοποιείται με μήκος λέξης αντιστρόφως ανάλογο της συχνότητας εμφάνισης του στο κείμενο Ο παραγόμενος κώδικας είναι ακριβής (όχι αμφίσημος) Prefix code (Καμμία συμβολοσειρά που κωδικοποιεί ένα σύμβολο δεν αποτελεί πρόθεμα κάποιας άλλης).
Prefix Code Ο κώδικας αναπαριστάται ως ένα δυαδικό δέντρο: Κάθε φύλλο αποτελεί ένα μήνυμα Ο κώδικιας για κάθε μήνυμα παράγεται ακολουθώντας ένα μονοπάτι από τη ρίζα στο φύλλο και προσθέτοντας 0 κάθε φορά που ακολουθείται ένα αριστερό κλαδί και 1 κάθε φορά που ακολουθείται ένα αριστερό κλαδί
Παράδειγμα this is an example of a huffman tree
Run-Length Encoding (RLE) Αντικατέστησε μια επαναλαμβανόμενη ακολουθία χαρακτήρων από τον αριθμό των επαναλήψεων και την ακολουθία Χρησιμοποιείται κυρίως σε εικόνες κειμένων
Lempel-Ziv (.zip,.gzip...) Η μέθοδος διατηρεί ένα ιστορικό των χαρακτήρων που έχει επεξεργαστεί και προσπαθεί να αντιστοιχήσει το επόμενο τμήμα του μηνύματος με αυτό. Αν δεν υπάρχει αντιστοίχιση επιστρέφει το επόμενο σύμβολο του μηνύματος αλλοιώς επιστρέφει ένα ζεύγος (offset, length) το οποίο δηλώνει τη θέση (offset) στην οποία έχει γίνει η αντιστόχιση στο ιστορικό αρχίζοντας απο το τέλος του ιστορικού και το μήκος (length) της συμβολοσειράς που αντιστοιχήθηκε
Παράδειγμα
Παράδειγμα