Greek parliament information retrieval

Προαπαιτήσεις

  • Python 3.x

Εγκατάσταση

  • Πλοηγηθείτε στον φάκελο του project
  • Δημιουργήστε ένα virtual environment Python: python -m venv venv
  • Ενεργοποιήστε το virtual environment:
    • Σε Windows: .\venv\Scripts\activate
    • Σε macOS/Linux: source venv/bin/activate
  • Εγκαταστήστε τις βιβλιοθήκες του project: pip install -r requirements.txt
  • Εγκαταστήστε την επέκταση για την ελληνική γλώσσα του Spacy: python -m spacy download el_core_news_sm

Εκτέλεση του project

Όλα τα μέρη μπορούν να εκτελεστούν ανεξάρτητα μεταξύ τους

Μέρος 1 (Μηχανή αναζήτησης)

  • Αρχεία μέρους 1: dataCleanupPart1.py, inverse_index.py, search_engine.py, search.py, static/, assets/, templates/

    Το μέρος 1 υποστηρίζει την μηχανή αναζήτησης. Για την εκτέλεση του απαιτείται το original dataset να είναι στον φάκελο του προγράμματος ή οι σταθερές με όνομα FILEPATH στα αρχεία κώδικα να δείχνουν στην θέση του dataset μέσα στον υπολογιστή, διαφορετικά θα εμφανίσει κατάλληλο μήνυμα. Η εκτέλεση γίνεται με την εντολή python3 search.py. Δεν χρειάζεται να περαστεί κάποια παράμετρος. Ο καθαρισμός ομιλιών και η δημιουργία του αντεστραμμένου πίνακα σε περίπτωση που δεν έχουν δημιουργηθεί γίνεται αυτόματα μέσα από το πρόγραμμα, δηλαδή δεν χρειάζεται να τρέξει κάποια εντολή.

Μέρος 2 (λέξεις-κλειδιά)

  • Αρχεία μέρους 2: part3.py, cacheAndSaved/ speeches.db (generated) helpers/

    Το μέρος 2 υποστηρίζει όλα τα ζητούμενα της εκφώνησης και τα εκτελέι με command line arguments python part2.py --help για πληροφορίες.

    • python part2.py --process-keywords Υπολογίζει τα keywords ανά ομιλία, ομιλητή και κόμμα και λόγω όγκου τα αποθηκεύει στη βάση αντί να τα εμφανίζει.

    • python parth2.py --gather-politician-keywords "μητσοτακης κωνσταντινου κυριακος" Υπολογίζει τα keywords ανά χρονιά για το άτομο στα εισαγωγικά. Το όνομα δίνεται σε μη τονισμένη τυπική μορφή, όπως στο παράδειγμα.

    • python parth2.py --gather-party-keywords "νεα δημοκρατια" Υπολογίζει τα keywords ανά χρονιά για το κόμμα στα εισαγωγικά. Το όνομα δίνεται σε μη τονισμένη τυπική μορφή, όπως στο παράδειγμα.

    • python part2.py --gather-total-keywords Υπολογίζει τα keywords ανά ομιλία, και εμφανίζει ανά χρονιά την εξέλιξή τους.

    • python part2.py --demo Τρέχει ένα demo που εμφανίζει τη χρονική εξέλιξη των keywords για τον κ. Κυριάκο Μητσοτάκη και τη Νέα Δημοκρατία

    Επίσης παρέχονται οι παράμετροι --max-rows {number} και --output {filename.csv} ώστε η εκτέλεση να πραγματοποιηθεί με άνω φράγμα στο πλήθος των ομιλιών ή να διοχετευτεί το output σε ένα csv αρχείο.

Μέρος 3 (Ομοιότητες)

  • Αρχεία μέρους 3: part3.py, cacheAndSaved/ speeches.db (generated) helpers/

    Για το μέρος 3, αρκεί να τρέξει python part3.py που by-default θα εμφανίσει τα 5 πιο όμοια ζεύγη.

    Επίσης παρέχονται οι παράμετροι --top-k {number} και --output {filename.csv} ώστε να επιστρέψει επιθυμητό πλήθος ζευγών ή να διοχετευτεί το output σε ένα csv αρχείο.

Μέρος 4 (LSI)

  • Αρχεία μέρους 4: lsi.py, inverse_index.py, dataCleanupPart1.py
    Αρκεί να τρέξει η εντολή python3 lsi.py lsi Παράγει το αρχείο projected_documents.nzp το οποίο περιέχει τις αναπαραστάσεις των ομιλιών στον νέο χώρο. Για να εκφραστούν οι ομιλίες σε χώρο διαστάσεων από τον χρήστη αρκεί να διαγραφεί το παραπάνω αρχείο (εάν έχει δημιουργηθεί) και να αλλάξει η τιμή της σταθεράς THRESHOLD που είναι δηλωμένη στο αρχείο lsi.py. Ως default τιμή έχει 80 (με αυτήν που έγιναν τα πειράματα στο report)

Μέρος 5 (Ομαδοποίηση Ομιλιών)

  • Αρχεία μέρους 5: lsi.py, inverse_index.py, dataCleanupPart1.py
    Αρκεί να τρέξει η εντολή python3 lsi.py clustering <number1> όπου number1 ένας φυσικός αριθμός που αντιστοιχεί στο cluster του οποίου θα τυπωθούν οι ομιλίες στο τερματικό. Θα παραχθούν τα αρχεία kmeans_results.npz final_clustering_results.pkl τα οποία θα περιέχουν τα αποτελέσματα της ομαδοποίησης. Οπότε για να τυπωθούν οι ομιλίες άλλου cluster αρκεί να τρέξει η παραπάνω εντολή για διαφορετικό number1. Οι default τιμές σε THRESHOLD και CLUSTER είναι 80 και 100 αντίστοιχα. Για να εκτελεστεί ο κώδικας για διαφορετικές τιμές πρέπει να αλλάξουν οι τιμές αυτών των σταθερών που είναι δηλωμένες στην αρχή του lsi.py και φυσικά να διαγραφούν όλα τα αρχεία εάν έχουν δημιουργηθεί γιατί θα περιέχουν αποτελέσματα από την προηγούμενεη εκτέλεση. Μετά απλά εκτελείται πάλι η python3 lsi.py clustering <number1>.

Μέρος 6 (Ανάλυση Συναισθήματος)

  • Αρχεία μέρους 6: part6.py, cacheAndSaved/ speeches.db (generated) helpers/

    Το μέρος 6 υποστηρίζει command line arguments όπου δέχεται σαν όρισμα τους ομιλητές προς σύγκρηση και ένα άνω φράγμα στο πλήθος ομιλιών (default 200). python part6.py --help για πληροφορίες

    • python part6.py --demo τρέχει μια demo λειτουργία, όπου συλλέγει και εμφανίζει τη σύγκριση για δύο πολιτικούς, τους Κυριάκος Μητσοτάκης και Αλέξης Τσίπρας. Είναι αντίστοιχο της εντολής python part6.py --politicians "μητσοτακης κωνσταντινου κυριακος" "τσιπρας παυλου αλεξιος" --limit 200