τεχνογλωσσια viii λογικος προγραμματισμος διδασκοντες: μαϊστρος

Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
ΤΕΧΝΟΓΛΩΣΣΙΑ VIII
ΛΟΓΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΔΙΔΑΣΚΟΝΤΕΣ: ΜΑΪΣΤΡΟΣ ΓΙΑΝΗΣ, ΠΑΠΑΚΙΤΣΟΣ
ΕΥΑΓΓΕΛΟΣ
ΑΣΚΗΣΗ: ΔΙΟΡΘΩΣΗ ΕΚΦΡΑΣΕΩΝ (Β’)
ΣΚΟΠΟΣ
Σκοπός της άσκησης είναι ο σχεδιασμός και η υλοποίηση συστήματος
διόρθωσης εκφράσεων βασισμένου στην Prolog και δη στο εξειδικευμένο για
ενοποιητικές γραμματικές σύστημα Gulp4. Το σύστημα καλείται να διαβάζει
κείμενο από αρχείο ή πληκτρολόγιο, να ελέγχει την ορθότητα ή μη της
πρότασης ως προς ορισμένες παραμέτρους και στην περίπτωση εντοπισμού
λάθους, να προτείνει την σωστή πρόταση. Επίσης, το σύστημα καλείται να
δώσει τα χαρακτηριστικά (features) των συντακτικών όρων, με βάση την
δοθείσα γραμματική.
ΥΛΟΠΟΙΗΣΗ
Για την υλοποίηση του άνωθε συστήματος, σχεδιάστηκε ενοποιητική
γραμματική βασισμένη στον φορμαλισμό της Prolog και συγκεκριμένα στο
Gulp4. Δημιουργήθηκαν κανόνες με συγκεκριμένα κατηγορήματα(predicates)
και ορίσματα (arguments), οι οποίοι συχνά εμπλουτίζονται με χαρακτηριστικά
(features) γραμματικού και συντακτικού περιεχομένου, τα οποία λειτουργούν
ως περιορισμοί (constraints) για την πιθανή πραγμάτωση των ζητούμενων
προτάσεων. Επιπλέον, δόθηκε λεξικό με αντίστοιχους περιορισμούς, ώστε να
επιτευχθεί η ενοποίηση.
Το δοθέν λεξικό είναι το εξής :
Οι, η, ο, τους
Επιβάτες, αεροσυνοδός, πιλότος
Ελέγχει, κοιμάται, κοιμούνται
Οι δοθέντες αρχικοί συντακτικοί κανόνες είναι οι εξής:
S  np vp
Np det n
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
Vp v np
Vp v
Οι πιθανές πραγματώσεις προτάσεων με βάσει τους προκείμενους
συντακτικούς κανόνες,
το λεξικό και τους σημασιολογικούς
περιορισμούς είναι οι κάτωθι:
-
Οι επιβάτες κοιμούνται
Η αεροσυνοδός ελέγχει (τους) επιβάτες
Η αεροσυνοδός κοιμάται
Ο πιλότος ελέγχει (τους) επιβάτες [ θεωρήθηκε ως αποδεκτή
σημασιολογικά πρόταση]
Ο πιλότος κοιμάται
ΑΡΧΙΚΗ ΔΟΜΗ ΠΡΟΤΑΣΗΣ
Για να αναλύσει συντακτικά τους παραπάνω κανόνες το σύστημα , δόθηκε
ένας γενικός κανόνας S, ο οποίος αναλύεται σε ονοματική (np) και ρηματική
(vp) φράση. Το κατηγόρημα (ρήμα), περιβάλλεται από ένα όρισμα στην
περίπτωση των αμετάβατων ρημάτων(Υποκείμενο) και δύο ορίσματα στην
περίπτωση των μεταβατικών μονόπτωτων (Υποκείμενο, Αντικείμενο). Σε αυτό
το στάδιο δίνουμε προσοχή στην προσθήκη χαρακτηριστικών ίδιων τιμών
τόσο στο ονοματικό όσο και στο ρηματικό μέρος ,ώστε να επιτευχθεί
συμφωνία μεταξύ υποκειμένου και ρήματος. Σημαντική κατά την διαδικασία
του parsing είναι η απόδοση κατηγορίας των όρων, η οποία θα δίνεται με τη
γενική δήλωση των χαρακτηριστικών που μας ενδιαφέρουν
g_features([gender,number,case,person,tense])
και τη συνάρτηση
try(String) :- writeln([String]),
phrase(s(Features),String),
display_feature_structure(Features).
η οποία αποδίδει την f-structure της εκάστοτε οντότητας και αποδέχεται ή όχι
την ορθότητα μιας πρότασης , προβάλλοντας την ένδειξη True ή False
αντίστοιχα
π.χ
?- try([o,pilotos,koimatai]).
[o, pilotos, koimatai]
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
sem: pred : KOIMAMAI
arg1 : PILOTOS
True.
ΠΕΡΙΟΡΙΣΜΟΙ
ΡΗΜΑ
Πέρα από τα χαρακτηριστικά που αποδίδονται στα ορίσματα των
κατηγορημάτων, έπρεπε να υπάρξει επιπρόσθετος περιορισμός στις
ρηματικές φράσεις, για να αποδοθεί η μεταβατικότητα των ρημάτων
(βλ.Επέκταση ρηματικού μέρους). Έτσι καταλήγουμε στον σχηματισμό δύο
ρηματικών φράσεων (vp).
a) Vp με ένα όρισμα  αμετάβατο ρήμα. (π.χ ο πιλότος κοιμάται)
vp(sem:(pred:X1..arg1:Y..number:B1)) --> v(sem:X1..number:B1).
b) Vp με δύο ορίσματα  μεταβατικό (μονόπτωτο) ρήμα (π.χ η
αεροσυνοδός ελέγχει τους επιβάτες).
vp(sem:(pred:X..arg1:Y..arg2:Z..number:B)) --> v(sem:X..number:B),
np(sem:Z..gender:G..number:N..case:acc).
ΌΝΟΜΑ
Δεχόμαστε εξ΄αρχής την παρουσία άρθρου μπροστά από όλα τα ουσιαστικά
του λεξικού μας (π.χ ο πιλότος, η αεροσυνοδός, οι επιβάτες, τους επιβάτες).
Για το λόγο αυτό, εξομοιώνοντας τα χαρακτηριστικά του άρθρου ως προς το
γένος, τον αριθμό και την πτώση με τα αντίστοιχα του ουσιαστικού που
προσδιορίζει, επιτυγχάνουμε συμφωνία μεταξύ τους (βλ. Επέκταση
Ονοματικού Μέρους).
np(sem:Y..number:B1..case:C1) --> det(gender:A1..number:B1..case:C1),
n(sem:Y..gender:A1..number:B1..case:C1).
Λόγω της πιθανής σύγχισης της χρήσης του πληθυντικού του ουσιαστικού
«επιβάτης» τόσο ως υποκείμενο («οι επιβάτες κοιμούνται»), όσο και ως
αντικείμενο («η αεροσυνοδός ελέγχει τους επιβάτες»), δίνουμε δύο φορές στο
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
λεξικό το λήμμα, διαφοροποιώντας το ως προς τα χαρακτηριστικά της
πτώσης.
n(sem:'EPIVATIS'..gender:m..number:pl..case:nom) --> [epivates]
n(sem:'EPIVATIS'..gender:m..number:pl..case:acc) --> [epivates]
ΛΑΘΗ ΚΑΙ ΔΙΟΡΘΩΣΗ ΠΡΟΤΑΣΗΣ
Θα θεωρήσουμε εξ’αρχής πως το σύστημά μας αντιλαμβάνεται και διορθώνει
ένα λάθος τη φορά. Για περισσότερα λάθη στην ίδια πρόταση, ο διορθωτής
εκφράσεων θα πρέπει να επεκταθεί με τους κατάλληλους κανόνες.
Τα λάθη που μπορεί να εντοπίζει το σύστμα, σύμφωνα με τη γραμματική που
το δόθηκε, είναι τα εξής:
a) Σε περίπτωση που μία λέξη βρίσκεται σε λάθος θέση (αντιμετάθεση
γειτονικών λέξεων), την εντοπίζει και προτείνει σε μήνυμα την ορθή της
έκφραση. Η απόσταση στην παρούσα άσκηση αφορά το μέγιστο δύο λέξεις
και δεν καλύπτει αντιμετάθεση λέξεων σε μεγαλύτερη απόσταση (πχ.
διορθώνει έκφραση της μορφής«η αεροσυνοδός τους ελέγχει επιβάτες», αλλά
όχι «η ελέγχει τους αεροσυνοδός επιβάτες»)
Η παραπάνω ενέργεια ικανοποιείται με τους εξής κανόνες που αφορούν και
τις πιθανές προτάσεις μας και οι οποίοι διακρίνονται με βάση την
μεταβατικότητα του ρήματος:
Αντιμετάθεση γειτονικών λέξεων:
Αμετάβατο:
Αντιμετάθεση άρθρου με ουσιαστικό (στο υποκείμενο)
try([Y,X,koimatai]) :- writeln([X, ' ', Y, ' ', koimatai]).
Αντιμετάθεση ρήματος με ουσιαστικό υποκειμένου
try([X, koimatai, Y]) :- writeln([X, ' ', Y, ' ', koimatai]).
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
Μεταβατικό:
Αντιμετάθεση άρθρου με ουσιαστικό στο υποκείμενο
try([Y,h,E,W,Z]) :- writeln([h, ' ', Y, ' ', E, ' ', W, ' ', Z, ' ']).
try([Y,o,E,W,Z]) :- writeln([o, ' ', Y, ' ', E, ' ', W, ' ', Z, ' ']).
Αντιμετάθεση άρθρου με ουσιαστικό στο αντικείμενο
try([X,Y,E,Z,tous]) :- writeln([X, ' ', Y, ' ', E, ' ', tous, ' ', Z, ' ']).
Αντιμετάθεση ρήματος με υποκείμενο
try([X,elegxei,Y,W,Z]) :- writeln([X, ' ', Y, ' ', elegxei, ' ', W, ' ', Z, ' ']).
Αντιμετάθεση ρήματος με άρθρο αντικειμένου
try([X,Y,tous,E,Z]) :- writeln([X, ' ', Y, ' ', E, ' ', tous, ' ', Z, ' ']).
Παρατηρείται πως κάθε φορά ίσως παρθούν κάποιες σταθερές(π.χ ρήμα ή
άρθρο), γύρω από τις οποίες εξετάζονται όλες οι πιθανές μεταβλητές που
μπορεί να τοποθετηθούν δορυφορικά σε λανθασμένες θέσεις γύρω από
αυτές. Η ορθή έκφραση τυπώνεται, ώστε να αποκαταστήσει το λάθος.
b) Σε περίπτωση που υπάρχει μία «επιπλέον λέξη» αμέσως μετά , ή
ισοδύναμα πριν από την ίδια λέξη, το σύστημα καλείται να την εντοπίσει και
να προτείνει διορθωμένο μήνυμα στo οποίo το επιπλέον στοιχείο έχει
διαγραφεί. Μία τέτοιας μορφής λάθος είναι, για παράδειγμα, η έκφραση «ο ο
πιλότος κοιμάται». Σε αυτή την περίπτωση, ενώ χρησιμοποιήθηκε ξανά η
ενέργεια του ρήματος και η εξέταση όλων των πιθανών ενδεχομένων, ωστόσο
δεν χρειάστηκαν σταθερές.
Επανάληψη ίδιας λέξης
Αμετάβατα:
Επανάληψη άρθρου υποκειμένου
try([X,X,Y,K]) :- writeln([X, ' ', Y, ' ', K]).
Επανάληψη υποκειμένου
try([X,Y,Y,K]) :- writeln([X, ' ', Y, ' ', K]).
Επανάληψη ρήματος
try([X,Y,K,K]) :- writeln([X, ' ', Y, ' ', K]).
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
Μεταβατικά:
Επανάληψη άρθρου υποκειμένου
try([X,X,Y,E,W,Z]) :- writeln([X, ' ', Y, ' ', E, ' ',W, ' ', Z, ' ']).
Επανάληψη υποκειμένου
try([X,Y,Y,E,W,Z]) :- writeln([X, ' ', Y, ' ', E, ' ',W, ' ', Z, ' ']).
Επανάληψη ρήματος
try([X,Y,E,E,W,Z]) :- writeln([X, ' ', Y, ' ', E, ' ',W, ' ', Z, ' ']).
Επανάληψη άρθρου αντικειμένου
try([X,Y,E,W,W,Z]) :- writeln([X, ' ', Y, ' ', E, ' ',W, ' ', Z, ' ']).
Επανάληψη αντικειμένου
try([X,Y,E,W,Z,Z]) :- writeln([X, ' ', Y, ' ', E, ' ',W, ' ', Z, ' ']).
ΕΠΕΚΤΑΣΗ ΣΥΣΤΗΜΑΤΟΣ
Επέκταση ως προς την προαιρετικότητα
Φράσεις όπως «ο πιλότος κοιμάται» και «κοιμάται ο πιλότος» είναι εξίσου
συντακτικά και σημασιολογικά ορθές. Το σύστημα ως τώρα δεχόταν ως
σωστή μόνο την πρώτη εκδοχή. Επειδή η αντιστροφή των όρων δεν μπορεί
να πραγματοποιηθεί στην Prolog, για να γίνει δυνατή η αποδοχή και των δύο
περιπτώσεων (εναλλαγή ονοματικού-ρηματικού μέρους στην αρχή της S),
διαμορφώθηκε μία νέα S , στην οποία δίνεται η δυνατότητα να εμφανιστεί
πρώτα το ρηματικό και ύστερα το ονοματικό μέρος(υποκείμενο).
s(sem:(pred:X..arg1:Y..arg2:Z))-->p(sem:(arg1:Y..pred:X..arg2:Z..number:B1)),
np(sem:Y..number:B1..case:nom).
Επέκταση συστήματος ως προς τη χρήση άρθρου στο ονοματικό μέρος
της ρηματικής φράσης
Η έκφραση «η αεροσυνοδός ελέγχει επιβάτες» είναι εξίσου ορθή, όπως
ακριβώς και η έκφραση «η αεροσυνοδός ελέγχει τους επιβάτες». Για να
γίνονται και οι δύο εκδοχές αποδεκτές, δημιουργήθηκαν δύο ονοματικές
φράσεις (np), στις οποίες έχουμε εμφάνιση ουσιαστικού με άρθρο και χωρίς
άρθρο. Η συμφωνία άρθρου-ουσιαστικού και η συντάξη πραγματώθηκαν
ορθά με την ανάλογη χρήση των κατάλληλων χαρακτηριστικών στις οντότητες
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
np(sem:G..number:B1..case:acc) --> n(sem:G..gender:nt..number:B1..case:acc).
np(sem:Y..number:B1..case:C1)-->det(gender:A1..number:B1..case:C1),
n(sem:Y..gender:A1..number:B1..case:C1).
Επέκταση συστήματος ως προς τη μεταβατικότητα του ρήματος
Οι περιπτώσεις που ως τώρα εξετάστηκαν αφορούν ρήματα αμετάβατα
(κοιμάμαι) και μεταβατικά- μονόπτωτα (ελέγχω). Η περίπτωση των δίπτωτων
ρημάτων στη νέα ελληνική έχει πιο σύνθετη φορμαλιστική απόδοση.
Χρησιμοποιήθηκε ως γνώμονας το παράδειγμα «Η αεροσυνοδός έδωσε
φαγητό σε επιβάτες», για να μπορέσουμε με τα περισσότερα στοιχεία του
υπάρχοντος λεξικού να ελέγξουμε την συντακτική ανάλυση ενός δίπτωτου
ρήματος , το οποίο εμπλέκει τρία ορίσματα, όπως το ρήμα δίνω.
Η μορφή της σύνταξης κατά την χρήση του δίνω έχει ως εξής: δίνω κάτι σε
κάποιον. Για τον λόγο αυτό χρειάστηκε η πρόσθεση μιας προθετικής φράσης,
για να αποδοθεί ο θεματικός ρόλος του σκοπού(goal) που συνδέεται με
ρήματα όπως το δίνω, δωρίζω, χαρίζω κ.α.
pp(sem~H1..gender~m..case~acc)--> p(prop~goal),n(sem~H1..gender~A1..case~acc).
Το ουσιαστικό που ακολουθεί την πρόθεση δίνεται σε πτώση αιτιατική ως
αντικείμενο (object) της πρόθεσης.
Εδώ πια παρεισφρύει και ο σημασιολογικός περιορισμός της οντότητας που
ακολουθεί το «δίνω» ως άμεσο αντικείμενο. Έτσι, έπρεπε να προστεθεί στα
χαρακτηριστικά της λέξης «φαγητό» μία ακόμα ιδιότητα που θα επέτρεπε στο
σύστημα να το επιλέξει ως άμεσο αντικείμενο. Σε αντίθετη περίπτωση, θα
γίνονταν αποδεκτές μη σημασιολογικά ορθές προτάσεις όπως «η
αεροσυνοδός έδωσε επιβάτες σε φαγητό»κ.ο.κ
ΠΡΟΒΛΗΜΑΤΑ- ΔΥΣΚΟΛΙΕΣ
-
-
-
-
Ένα βασικό πρόβλημα αποτέλεσε η αδυναμία χρήσης ελληνικών
χαρακτήρων στο περιβάλλον του Gulp4 ,ενδεχομένως λόγω της
κωδικοποίησης του συστήματος, πράγμα που οδήγησε αποκλειστικά
στην χρήση λατινικών χαρακτήρων.
Η προαιρετικότητα στην Prolog πρέπει να δηλωθεί εξ’αρχής με νέες
συντακτικές δομές, οι οποίες δεν μπορούν να ενοποιηθούν με τις
υπάρχουσες.
Η καταγραφή όλων των πιθανών λαθών και η δήλωσή τους, για την
δημιουργία ενός διορθωτή έκφρασης είναι ένα ζήτημα χρονικά
ασύμφορο και όχι οικονομικό.
Το συγκεκριμένο σύστημα φτιάχτηκε με βάση πολύ μικρές δομές
προτάσεων. Οι περιορισμοί για μεγαλύτερες δομές ,ώστε να είναι
Εργασία Β΄ εξαμήνου στο μάθημα του Λογικού Προγραμματισμού
Φοιτητές : Κεραμιτζή Χαρά, Κορασίδη Ανδριάνα, Κωτσακόπουλος Χρήστος
δυνατή η συντακτική τους ανάλυση, θα μπορούσε να οδηγήσει σε
πολυάριθμες περιπτώσεις.