«Ἂν εἶδα μακρύτερα, εἶναι γιατὶ στάθηκα στοὺς ὤμους γιγάντων.»
Isaac Newton, ἐπιστολὴ στὸν Robert Hooke, 5 Φεβρουαρίου 1675 — «If I have seen further it is by standing on the shoulders of Giants.» Ἡ εἰκόνα εἶναι παλαιότερη: «νάνοι στοὺς ὤμους γιγάντων», Bernard τῆς Chartres, ὅπως τὸν παραδίδει ὁ John of Salisbury (Metalogicon, 1159).
Ἡ Βιβλιοθήκη στέκεται πάνω σὲ κείμενα ποὺ μετέγραψαν ἐθελοντές, σὲ ἐκδόσεις ποὺ ψηφιοποίησαν πανεπιστήμια, καὶ σὲ λογισμικὸ ποὺ ἄλλοι ἔγραψαν καὶ χάρισαν. Αὐτὴ ἡ σελίδα τὰ ἀπαριθμεῖ ὅλα — καὶ λέει τί φτιάξαμε ἐμεῖς καὶ θὰ μποροῦσε νὰ φανεῖ χρήσιμο σὲ ἄλλους.
Πηγές κειμένων
Κάθε ἀπόσπασμα στὸν κατάλογο κουβαλάει τὴ διεύθυνση τῆς πηγῆς του καὶ τὴν αἰτιολόγηση τῆς ἄδειάς του, ὁρατὲς στὸ κάτω μέρος κάθε σελίδας ἀνάγνωσης. Οἱ πηγὲς εἶναι αὐτές:
Ἡ κύρια πηγή τῶν νεοελληνικῶν κειμένων καὶ τῶν παλαιῶν μεταφράσεων. Μεταγραφὲς φτιαγμένες καὶ διορθωμένες ἀπὸ ἐθελοντές.
Τὰ ἀρχαῖα πρωτότυπα σὲ TEI XML, μὲ τὴν κανονικὴ ἀρίθμηση (CTS URN) ποὺ κάνει τὴν παραπομπὴ ἐλέγξιμη.
Ὅ,τι δὲν καλύπτει ὁ Perseus ἀπὸ τὴν πρώτη χιλιετία τῆς ἑλληνικῆς γραμματείας.
Παλαιὲς ἐκδόσεις καὶ μεταφράσεις, κυρίως τῆς σειρᾶς Φέξη. Οἱ ἑλληνικὲς μεταγραφὲς τοῦ PG εἶναι κατὰ κανόνα μονοτονικές — τὸ σημειώνουμε στὴν ἄδεια κάθε ἔργου.
Συμφραστικοὶ πίνακες νεοελληνικῆς ποίησης. Χρησιμοποιεῖται γιὰ ἐπαλήθευση καὶ γιὰ σύνδεσμο· τὰ κείμενά τους δὲν ἀντιγράφονται.
Φωτογραφίες παλαιῶν ἐκδόσεων. Πηγὴ ἐλέγχου γιὰ χρονολογίες καὶ ἐκδοτικὰ στοιχεῖα, καὶ ὑποψήφια ὕλη γιὰ OCR.
Νεοελληνικοὶ ὁρισμοὶ («Greek Monolingual») γιὰ τὸ λεξικὸ ποὺ ἀνοίγει μὲ κλὶκ σὲ λέξη τοῦ πρωτοτύπου. Τὸ lsj.gr δηλώνει CC BY-NC-SA γιὰ τὰ δεδομένα τοῦ Perseus, ἀλλὰ δὲν λέει ἀπὸ ποῦ προέρχεται τὸ νεοελληνικὸ κείμενο· ὥσπου νὰ ἀπαντήσει, οἱ ὁρισμοί του δὲν προβάλλονται. Ὁ ἱστότοπος εἶναι μὴ ἐμπορικός, ὅπως ἀπαιτεῖ ἡ ἄδεια.
Ἡ ἑλληνικὴ μετάφραση τοῦ Liddell–Scott ἀπὸ τὸν Ξενοφῶντα Π. Μόσχο, μὲ προσθῆκες τοῦ Μιχαὴλ Κωνσταντινίδη, ἐκδ. Ἀνέστη Κωνσταντινίδη (†1901). Οἱ ἑρμηνεῖες της (πολυτονικὴ καθαρεύουσα) εἶναι ὁ νεοελληνικὸς ὁρισμὸς τοῦ λεξικοῦ μὲ κλὶκ ὅπου δὲν ὑπάρχει ἄλλος. Κείμενο ἐκτὸς πνευματικῶν δικαιωμάτων· ἡ ψηφιακὴ μεταγραφὴ προέρχεται ἀπὸ τὴν ἑνότητα «Greek (Liddell-Scott)» τοῦ lsj.gr, στὸ ὁποῖο καὶ παραπέμπει κάθε λῆμμα.
Νεοελληνικοὶ ὁρισμοὶ ἀρχαίων λημμάτων γιὰ τὸ λεξικὸ τοῦ ἀναγνώστη — πρὸς τὸ παρὸν ἡ μόνη νεοελληνικὴ πηγὴ ποὺ προβάλλεται.
Τὸ πλῆρες ἀγγλικὸ ἄρθρο τοῦ LSJ, διπλωμένο μέσα σὲ κάθε καρτέλα λέξης. Ψηφιοποίηση Perseus Digital Library (Tufts)· ἡ μετατροπὴ ἀπὸ Beta Code σὲ Unicode τοῦ Giuseppe G. A. Celano, ποὺ εἶναι ἡ ἐκδοχὴ ποὺ χρησιμοποιοῦμε.
Ἡ γραμματικὴ ἀναγνώριση κάθε τύπου (λῆμμα, χρόνος, ἔγκλιση, πτώση) πίσω ἀπὸ τὶς καρτέλες τοῦ λεξικοῦ.
Ἄδειες χρήσης
Τὰ κείμενα. Ἕνα ἔργο μπαίνει στὸν κατάλογο μόνο ἂν εἶναι κοινὸ κτῆμα στὴν Ἑλλάδα — ὁ δημιουργὸς νὰ ἔχει πεθάνει πρὶν ἀπὸ 70 χρόνια, μὲ τὴν προθεσμία νὰ τρέχει ἀπὸ τὴν 1η Ἰανουαρίου τοῦ ἑπόμενου ἔτους (Ν. 2121/1993, ἄρ. 29) — ἢ ἂν φέρει ἄδεια CC BY / CC BY-SA. Ἡ μετάφραση ἔχει δικό της χρονόμετρο: μετράει ὁ θάνατος τοῦ μεταφραστῆ, ὄχι τοῦ συγγραφέα.
Οἱ σελίδες. Ὅ,τι προέρχεται ἀπὸ τὴ Βικιθήκη ἢ τὸν Perseus κυκλοφορεῖ μὲ τὴν ἴδια ἄδεια CC BY-SA 4.0 μὲ τὴν ὁποία τὸ πήραμε — καὶ τὸ ἴδιο ἰσχύει γιὰ τὰ ἀρχεῖα στοίχισης ποὺ παράγουμε πάνω σὲ αὐτά.
Τὸ λεξικό. Οἱ καρτέλες λέξεων συνθέτουν πηγὲς μὲ ὅρο μὴ ἐμπορικῆς χρήσης (CC BY-NC-SA)· γι᾿ αὐτὸ τὸ λεξικὸ ὡς σύνολο κυκλοφορεῖ CC BY-NC-SA καὶ ἡ Βιβλιοθήκη εἶναι μονίμως μὴ ἐμπορική. Κάθε καρτέλα ἀναγράφει ποιὰ πηγὴ ἔδωσε τί. Τὰ κείμενα καὶ οἱ στοιχίσεις μένουν CC BY-SA 4.0.
Ἡ ὀρθογραφία μένει ὅπως τὴ σερβίρει ἡ πηγή. Δὲν μετατρέπουμε πολυτονικὸ σὲ μονοτονικὸ οὔτε τὸ ἀντίστροφο, καὶ δὲν «ἀποκαθιστοῦμε» τίποτα. Ὅταν μιὰ μεταγραφὴ εἶναι μονοτονική, ἐνῶ ἡ ἔκδοση ἦταν πολυτονική, τὸ λέει ἡ ἄδεια τοῦ ἔργου.
Ὁ πλήρης ἔλεγχος ἀδειῶν — κάθε συγγραφέας καὶ κάθε μεταφραστής, μὲ τὴν αἰτιολόγηση καὶ τὴν ἡμερομηνία ἐπαλήθευσης — παράγεται αὐτόματα στὸ ἀρχεῖο content/licenses.json τοῦ ἀποθετηρίου.
Λογισμικό
Τὰ προγράμματα ἄλλων πάνω στὰ ὁποῖα δουλεύει ὁ ἱστότοπος, μὲ τὴν ἔκδοση καὶ τὴν ἄδεια ποὺ δηλώνει τὸ καθένα. Ὁ κατάλογος φτιάχνεται αὐτόματα σὲ κάθε νέα ἔκδοση τοῦ ἱστοτόπου, ὥστε νὰ μὴν ξεμείνει πίσω. Δὲν ἀπαριθμοῦνται τὰ πακέτα ποὺ χρειάζονται μὲ τὴ σειρά τους αὐτὰ — εἶναι ἑκατοντάδες.
Στὸν ἱστότοπο
Στὴν ἀνάπτυξη καὶ στὴν ἐπεξεργασία
Στὴ στοίχιση (Python)
Μοντέλα καὶ ἐνσωματωμένος κώδικας
Μοντέλο ποὺ μετράει πόσο κοντὰ στὸ νόημα εἶναι δύο προτάσεις σὲ διαφορετικὲς γλῶσσες. Μὲ αὐτὸ βρίσκουμε ποιὰ παράγραφος τῆς μετάφρασης ἀντιστοιχεῖ σὲ ποιὰ τοῦ πρωτοτύπου, ὅταν ἡ δομὴ τοῦ κειμένου δὲν βοηθάει.
Ὁ ἀλγόριθμος ποὺ, μὲ τὶς μετρήσεις τοῦ LaBSE, ἀποφασίζει ποιὲς παράγραφοι ζευγαρώνουν. Ἀντίγραφό του ζεῖ μέσα στὸ ἀποθετήριο, προσαρμοσμένο γιὰ ἀρχαῖα ἑλληνικά.
Γραμματοσειρές
Τίτλοι καὶ κατάλογος. Ἡ νεοελληνικὴ διδοτικὴ παράδοση.
Τὸ ἀρχαῖο κείμενο, κλειδωμένο στὸ βάρος 300 — καλύπτει πλήρως τὸ πολυτονικό.
Διεπαφή, καὶ ἡ προεπιλογὴ γιὰ τὴ στήλη τῆς μετάφρασης.
Τί φτιάξαμε ἐμεῖς
Ὅ,τι δὲν ὑπῆρχε ἕτοιμο καὶ τὸ γράψαμε. Εἶναι scripts μέσα στὸ ἀποθετήριο τῆς Βιβλιοθήκης — ὄχι ἀκόμη ξεχωριστὰ πακέτα (npm). Ἂν κάτι ἀπὸ αὐτὰ χρειάζεται σὲ ἄλλο ἐγχείρημα, στεῖλε γραμμὴ καὶ θὰ βγεῖ πρῶτο.
scripts/align/by-line.tsὉ Πολυλᾶς μεταφράζει τὸν Ὅμηρο στίχο πρὸς στίχο, ὁπότε ἡ στοίχιση εἶναι ἀριθμητική καὶ ὄχι σημασιολογική: τὸ script μετράει τοὺς στίχους, χωρίζει καὶ τὰ δύο κείμενα σὲ πεντάστιχα καὶ τὰ ζευγαρώνει. Ὅπου ἡ μετάφραση ἔχει λίγους στίχους παραπάνω ἢ παρακάτω, ἐντοπίζει τὴ ραφὴ ἀπὸ τὰ κύρια ὀνόματα (--reconcile) καὶ συνεχίζει ἀπὸ ἐκεῖ.
Ὁ σημασιολογικὸς aligner (LaBSE + δυναμικὸς προγραμματισμός) χωρίζει σὲ παραγράφους· ἕνα βιβλίο τῆς Ἰλιάδας δὲν ἔχει κενὲς γραμμὲς, ὁπότε τὸ ἔβλεπε ὡς ΜΙΑ παράγραφο καὶ ἔδινε μηδὲν σειρές. Πολυλᾶς: 15.690 στίχοι ἀπέναντι σὲ 15.687.
scripts/align/by-speaker.tsΣτὸ θέατρο καὶ τὸ πρωτότυπο καὶ ἡ μετάφραση σημειώνουν ποιὸς μιλάει. Τὸ script ἐξάγει τὶς δύο ἀκολουθίες ὁμιλητῶν (ΚΡ., ΑΝ., ΧΟ.) καὶ τὶς στοιχίζει μεταξύ τους, ρήση πρὸς ρήση· συγχωνεύει διαδοχικὲς ρήσεις τοῦ ἴδιου προσώπου καὶ ἀφήνει κενὸ ὅπου ἡ διασκευὴ ἔκοψε μιὰ ρήση.
Στὴν Ἀντιγόνη τοῦ Χρηστομάνου ἡ σημασιολογικὴ στοίχιση ἄφησε 519 ἀπὸ 855 σειρὲς χωρὶς μετάφραση· ἡ ἀκολουθία ὁμιλητῶν ἔπιασε τὸ 99,6 %.
scripts/align/split-spanning.tsὍταν μιὰ παράγραφος τῆς μετάφρασης καβαλικεύει δύο παραγράφους τοῦ πρωτοτύπου, τὸ script τὴν κόβει σὲ τέλος πρότασης καὶ μετακινεῖ τὸ κομμάτι στὴ γειτονικὴ σειρά. Ἀρνεῖται κόψιμο ποὺ δὲν πέφτει σὲ τελεία, ἀρνεῖται κάθε ἀλλαγὴ χαρακτήρα (round-trip guard), καὶ γράφει τὴν ἀπόφαση σὲ ἕνα log (_decisions.jsonl) κλειδωμένο στὸ κείμενο καὶ ὄχι στὸν ἀριθμὸ σειρᾶς, ὥστε νὰ ἐπιζήσει τῆς ἑπόμενης αὐτόματης στοίχισης.
Κάθε διόρθωση κατευθεῖαν στὶς σειρὲς χανόταν στὸ ἑπόμενο τρέξιμο τοῦ aligner, γιατὶ ἐκεῖνος ξαναχτίζει τὶς σειρὲς ἀπὸ τὸ μηδέν.
scripts/align/lib/status.tsὍταν ὁ ἐπιμελητὴς διαβάσει ἕνα ἔργο καὶ τὸ ἐπικυρώσει, ἡ ἐπικύρωση ἀποθηκεύεται ὡς ἀποτύπωμα (hash) τοῦ ΖΕΥΓΑΡΩΜΑΤΟΣ: ποιὲς παράγραφοι τοῦ πρωτοτύπου στέκουν ἀπέναντι σὲ ποιὸ κείμενο μετάφρασης, μόνο γράμματα. Κενά, δεῖκτες σελίδας, ἀλλαγὲς στίχου δὲν τὴν ἀκυρώνουν· κείμενο ποὺ περνάει σὲ ἄλλη σειρὰ τὴν ἀκυρώνει, καὶ τότε τὸ script ὀνομάζει μόνο τὶς σειρὲς ποὺ ἄλλαξαν (align:accept --changed).
Χωρὶς αὐτὸ ἕνα ἔργο διορθωμένο σὲ ἕνα κόμμα ἔπρεπε νὰ ξαναδιαβαστεῖ ὁλόκληρο.
scripts/qa/render-check.tsΚατεβάζει ἀπὸ τὸν dev server τὴ σελίδα κάθε στοιχισμένου ζεύγους καὶ ἐλέγχει τὸ HTML ποὺ βγῆκε, ὄχι τὸ JSON ποὺ μπῆκε: κατάλογος προσώπων ποὺ διέρρευσε μέσα στὸ κείμενο, ὄνομα ὁμιλητῆ ποὺ δὲν ἔγινε badge, ἐτικέτα κολλημένη στὸν στίχο.
«Τὸ JSON φαίνεται σωστό» ἔστειλε δύο φορὲς σὲ δύο μέρες σελίδες ποὺ ἦταν σπασμένες· ὁ ἔλεγχος πρέπει νὰ γίνεται στὴν ἔξοδο.
scripts/ingest/sources/wikisource-el.tsParser γιὰ τὸ wikitext τῆς Βικιθήκης — ποίηση, πεζό, ἀριθμημένοι κατάλογοι, σελίδες Proofread — μὲ ἐπιστροφὴ στὸ ἀποδοθὲν HTML ὅταν ἡ σελίδα εἶναι μόνο ἐνσωμάτωση (transclusion). Ξέρει τὰ πρότυπα Κεφαλίδα/Τίτλος, τὶς λίστες συλλογῶν καὶ τὶς σημάνσεις ἀποσπάσματος.
Οἱ γενικοὶ wikitext parsers δὲν ξέρουν τὶς συμβάσεις τῆς ἑλληνικῆς Βικιθήκης, καὶ τὸ HTML της χάνει τὴ δομὴ τοῦ ποιήματος.
scripts/ingest/sources/perseus.tsΦέρνει ἕνα ἀρχαῖο ἔργο ἀπὸ τὸ TEI XML τοῦ Perseus / First1KGreek μὲ τὸ CTS URN του, κρατώντας τὴν κανονικὴ ἀρίθμηση (Stephanus, βιβλίο/κεφάλαιο), τοὺς ὁμιλητές (said/who), τὰ ὁρόσημα στροφῆς (milestone) καὶ τὶς ἐπώνυμες σκηνές.
Ἡ τριαδικὴ δομὴ τοῦ Πινδάρου ζεῖ σὲ <milestone> ἀνάμεσα σὲ στίχους, ὄχι σὲ <lg> — κάθε γενικὸς ἀναγνώστης TEI τὴν πετάει.
scripts/ocr/Καθαρισμὸς καὶ ἔλεγχος τῆς ἐξόδου OCR σὲ πολυτονικὸ κείμενο: διόρθωση συστηματικῶν λαθῶν στοὺς τόνους, στὰ πνεύματα καὶ στὴν ὑπογεγραμμένη (ᾳ, ῃ, ῳ), μὲ δοκιμὲς ἀναφορᾶς (golden tests) πάνω σὲ γνωστὲς σελίδες.
Τὰ γενικὰ ἐργαλεῖα OCR (Tesseract κ.ἄ.) εἶναι ἐκπαιδευμένα σὲ μονοτονικό· τὰ πνεύματα καὶ ἡ ὑπογεγραμμένη εἴτε χάνονται εἴτε γίνονται ἄλλος χαρακτήρας.