2009/6/12 Simos Xenitellis <simos.li...@googlemail.com>: > Καλησπέρα, > Υπάρχει η ανάγκη για να μετατρέψουμε ένα αρχείο κειμένου σε ένα πίνακα, > http://bugs.freedesktop.org/show_bug.cgi?id=22145#c16 > > Η δουλειά είναι: > 1. Ανάγνωση του ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt > Θέλει κατανόηση των πεδίων για να εντοπίσουμε ποιοι χαρακτήρες είναι > αλφαβητικοί. > Αλφαβητικοί εδώ είναι τα γράμματα που είναι είτε πεζά ή κεφαλαία. > 2. Κάθε χαρακτήρας Unicode έχει ένα αύξων αριθμό, από 1-χχχχ. Εδώ μάς > αρκεί μέχρι 65535. > 3. Το αποτέλεσμα θέλουμε να είναι κάτι σαν > > 1 όχι > 2 όχι > 3 όχι > ... > 65 ναι > 66 ναι > ... > κτλ > > 4. Όταν το φτιάξουμε αυτό, μετά μπορούμε να το βελτιστοποιήσουμε διότι > οι περισσότεροι χαρακτήρες > δεν είναι αλφαβητική. Ωστόσο ας φτάσουμε στο σημείο αυτό. > > Η όλη δουλειά γίνεται για το ς (σίγμα τελικό). > > Σίμος > -- > Ubuntu-gr mailing list > Ubuntu-gr@lists.ubuntu.com > > If you do not want to receive any more messages from the ubuntu-gr mailing > list, please follow this link and choose unsubscribe: > https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr >
Κοιτώντας στο ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt βλέπω γραμμές σαν τις παρακάτω (παραθέτω ενδεικτικά ένα τμήμα που αφορά ελληνικούς χαρακτήρες): [...] 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 [...] 03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; 03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9; [...] αν έχω καταλάβει καλά και αυτό που χρειάζεσαι είναι να ξεχωρίσεις ποιες γραμμές αφορούν αλφαβητικούς χαρακτήρες, τότε παρατηρώ ότι για τους αλφαβητικούς χαρακτήρες αναφέρεται η λέξη "LETTER", οπότε είναι εύκολο να ξεχωριστούν. Παρατηρώντας πιο προσεκτικά βλέπω όμως και γραμμές όπως η 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 το οποίο απ' ότι καταλαβαίνω μιλάει για το ύψηλον με διαλυτικά και "hook" (τι είναι αυτό άραγε;) ... Το ερώτημα είναι θέλουμε και αυτό; το θεωρούμε και αυτό αλφαβητικό; Γενικά πες μας ποιους χαρακτήρες θεωρούμε αλφαβητικούς. Αν είναι μόνο τα γράμματα Α-Ω, α-ω , τότε μαζεύουμε ότι περιέχει τη λέξη "LETTER" και τελειώσαμε. Αν θέλουμε όλα τα γράμματα A-Ω, α-ω μαζί με όλους τους συνδυασμούς τους με τα σημεία στίξης (καθένα με τόνο, με διαλυτικά, ... με δεν ξέρω τι άλλο) τότε είναι λίγο πιο περίπλοκα τα πράγματα. Μια πρώτη σκέψη είναι το parsing να γίνει ως εξής: 1. Μαζεύουμε όλες τις γραμμές που περιέχουν τη συμβολοσειρά "LETTER". 2. Για καθεμία από αυτές βρίσκουμε το όνομα του γράμματος μέσα της (π.χ. η λέξη που βρίσκεται ακριβώς μετά το "GREEK CAPITAL LETTER", και ξανασαρώνουμε τις γραμμές που έχουν απομείνει ψάχνοντας για το όνομα. Δεν ξέρω αν το έχω καταλάβει καλά, και ότι προτείνω είναι με μια γρήγορη επισκόπηση του αρχείου. Πάντως πρέπει να ξέρουμε ακριβώς τι ψάχνουμε και μετά να βρούμε κάποια patterns μέσα στο κείμενο και κάποιο αλγόριθμο για να το βρούμε. Απο κεί και πέρα το να γραφτεί ο parser σε μια perl ή python είναι το ευκολότερο κομμάτι. Αν έχω χρόνο ίσως ασχοληθώ κάποια από τις επόμενες ημέρες πιο μεθοδικά... Αν έχω κάτι θα σας ενημερώσω. Μέχρι τότε ας προσπαθήσουν ή ας ρίξουν ιδέες και άλλοι. -- Konstantinos Togias Dipl.-Math., M.Sc. Hellenic Open University and Research Academic Computer Technology Institute Ubuntu-gr LoCo team member -- Ubuntu-gr mailing list Ubuntu-gr@lists.ubuntu.com If you do not want to receive any more messages from the ubuntu-gr mailing list, please follow this link and choose unsubscribe: https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr