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

Απαντηση