/shaka

NTUA-ECE Internet and Applications 2020 Project

Primary LanguageJavaScript

Διαδίκτυο και Εφαρμογές

Φοίβος Καλεμκερής (03116010) Συνοπτική παρουσιάση της εφαρμογής:

  • intapp.odp (OpenDocument Presentation, παραμορφώνεται αν ανοίξει με PowerPoint) και
  • intapp.pdf
  • Βίντεο παρουσίασης της εφαρμογής

Θέμα

Η υλοποίηση της εφαρμογής βασίστηκε στην ιδέα COVID-02 που περιγράφεται στην ιστοσελίδα του μαθήματος και έχει τίτλο: Εύρεση Άρθρων που αναφέρουν ένα συγκεκριμένο Φάρμακο είτε στην συνοπτική τους περιγραφή είτε μέσα στο πλήρες κείμενο.

Ειδικότερα, πρόκειται για μια διαδικτυακή εφαρμογή που εντοπίζει τα άρθρα που αφορούν ένα συγκεκριμένο Φάρμακο ψάχνοντας τόσο στον τίτλο της δημοσίευσης και το abstract όσο και στο πλήρες κείμενο. Το input είναι το όνομα του φαρμάκου, το οποίο δίνεται από το χρήστη μέσω search bar και το output οι δημοσιεύσεις που αφορούν το φάρμακο αυτό, ενώ τα άρθρα κατατάσσονται σε σειρά συνάφειας, ανάλογα με τον αριθμό των εμφανίσεων της αναζητούμενης λέξης, τη μορφή (παράγωγη ή σύνθετη της αναζητούμενης λέξης), αλλά και το πεδίο (πλήρες κείμενο, τίτλος, abstract) στα οποία αυτή βρίσκεται. Η έξοδος περιλαμβάνει, τέλος, το κατά πόσο το πλήρες κείμενο του άρθρου ήταν διαθέσιμο (με link για το κείμενο αν αυτό υπάρχει), καθώς επίσης και τα ονόματα των συντακτών της αντίστοιχης δημοσίευσης. Επιπλέον, η εφαρμογή περιλαμβάνει ιστογράμματα που εμφανίζουν τον αριθμό των άρθρων που αφορούν το αναζητούμενο φάρμακο ανά χρόνο και ανά μήνα.

Για τη λειτουργία της εφαρμογής απατείται το dataset με όλα τα διαθέσιμα άρθρα, από το οποίο αντλούνται η συνοπτική παρουσίαση των άρθρων (Τίτλος, Συγγραφείς, Ημερομηνία Δημοσίευσης, Abstract από το CSV αρχείο), αλλά και το πλήρες κείμενο (δίνεται προτεραιότητα στα αρχεία pmc έναντι των pdf για το σκοπό αυτό, ως πιο "καθαρά", σύμφωνα με το FAQ του CORD19).

Τεχνολογίες

Η εφαρμογή βασίζεται σε ένα REST API υλοποιημένο σε NodeJS, με χρήση του ExpressJS για τη διαχείριση του routing, μέσω του οποίου γίνεται η επικοινωνία με τη βάση, και υλοποιείται το business logic της εφαρμογής. Για τη βάση επιλέχθηκε η χρήση της MongoDB και η οργάνωση των δεδομένων σε μία συλλογή (Collection) που περιλαμβάνει τα πεδία title, abstract, publish_time, authors και text. Το front-end της εφαρμογής υλοποιήθηκε με χρήση του ReactJS και δίνει τη δυνατότητα πλοήγησης στα διάφορα μέρη της εφαρμογής, αναζήτησης βάσει του φαρμάκου από το χρήστη, εμφάνισης των ζητούμενων αποτελεσμάτων, καθώς και των προαναφερθέντων διαγραμμάτων. Τα περισσότερα components είναι επιφορτισμένα με το κομμάτι της παρουσίασης, ενώ μόνο στο container SearchPage υπάρχει λογική, σχετική με το φιλτράρισμα των αποτελεσμάτων, αλλά και την παραγωγή των διαγραμμάτων.

Οδηγίες εγκατάστασης

Προτού ξεκινήσει η εγκατάσταση της εφαρμογής θα πρέπει να έχουν εγκατασταθεί τα παρακάτω:

  • NodeJS
  • Npm (συμπεριλαμβάνεται στην εγκατάσταση του Node)
  • MongoDB

Για να γίνει το import των δεδομένων θα πρέπει να είναι ενεργή η υπηρεσία mongod.

Προκειμένου να κατέβουν τα dependencies:

  • npm install μέσα στο φάκελο back-end
  • npm install μέσα στο φάκελο front-end

Για το import των δεδομένων:

  • node ./import/import.js

ΣΗΜΑΝΤΙΚΟ: Για μεγάλα dataset θα πρέπει να αυξήσουμε το όριο μνήμης που διαθέτουμε στο Node (ακόμα και με τη χρήση του stream, χρειάστηκα περίπου 5GB RAM προκειμένου να φορτώσω το dataset των 200.000 εγγραφών) ως εξής:

node --max-old-space-size=5120 ./import/import.js

Εντός του φακέλου import συμπεριλαμβάνεται δοκιμαστικό dataset (περίπου 1500 εγγραφές από το metadata.csv και περίπου 60 αρχεία .json για τα πλήρη κείμενα). Για το συγκεκριμένο δοκιμαστικό dataset προτείνονται προς αναζήτηση τα εξής φάρμακα: paracetamol, dexamethasone, hydroxychloroquine. Σε περίπτωση που είναι επιθυμητή η χρήση του πλήρους dataset, θα πρέπει πριν το import να έχει τοποθετηθεί χειροκίνητα εντός του φακέλου διατηρώντας την υπάρχουσα δομή φακέλων:

back-end
├── ...
├── import                   
│   ├── import.js          
│   ├── metadata.csv         
│   └── document_parses
│         ├── pdf_json
│         └── pmc_json
└── ...

Για εκκίνηση της εφαρμογής:

  • node server εντός του φακέλου back-end
  • npm start εντός του φακέλου front-end