Integrazione dati sul web

Slides:



Advertisements
Presentazioni simili
Tema 1: Integrazione di dati provenienti da sorgenti eterogenee
Advertisements

ESTEEM ESTEEM Scenario applicativo Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza Carola Aiello, Tiziana Catarci, Diego Milano,
SAL WP10 Bologna – CNAF – 9 Ottobre AGENDA 1.Stato deliverable per il periodo considerato 2.Stato attività descritte nel capitolato tecnico e eventuali.
Lite. FlowLine Flowline Lite e' il sistema integrato per la gestione di database di CV aziendali tramite web. Fornito in modalita' ASP (application service.
+ Common actions Nicolò Sordoni. + Azioni comuni Esistono una serie di azioni di uso comune, che vengono messe a disposizione dalla piattaforma tramite.
OR9: Realizzazione e trasformazione di servizi applicativi Infomobilità e Videosorveglianza Guido Di Pasquale Daniela Vasari OCP CTS, 05/06/2015.
FACEBOOK attualmente, è il social network più famoso al mondo dove, a disposizione dell’utente, esiste uno spazio per la creazione di IN CUI POTER INSERIRE.
Casa Digitale del Cittadino
Relazione Questionario agli studenti di Matematica sull’Information Literacy nella biblioteca del Dipartimento di Matematica «G.Castelnuovo» A cura di.
Basi di dati - Fondamenti
Smart HMS: Smart Health Management System
Metriche della comunicazione A.A. 2016/2017
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Progettazione di una base di dati relazionale
Formazione DS e DSGA Ambito 3 Rendicontazione sociale, Open Data Amministrazione digitale Sicurezza dei dati e Privacy Accessibilità del sito e dei documenti.
Progetto ‘My FOODPEDIA’
Fruit World Integrazione Dati sul Web 2016/2017
le fonti di informazione scientifica
Evolvo S.r.l..
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Report attività SEO Al 23 settembre 2016.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Integrazione dati sul web
Osservatorio Mercato Lavoro
CREAZIONE UTENTE SU ORACLE1
Bioresult S.r.l..
Primo corso per operatore ALPE NILDE hot topics
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA
YOU don’t care, since WE do (for YOU).
COME SI CREA UNA TABELLA CON UNA CHIAVE ESTERNA
REX - Istruzioni tipo IKEA
Ricercare un annuncio non è mai stato tanto semplice e veloce.
PNSD - Modulo D1A 27 aprile 2017 Piattaforme di e-­learning e cloud:​ installazione e gestione (azione #22) Prof. Rocca Marcello
Tutorial help.ebsco.com.
Universal Dependencies e treebank
La normalizzazione delle relazioni
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Frequenza di fallimento della terapia di prima linea basata su INI vs
Job Application Monitoring (JAM)
Modulo 3 Costituzione del consorzio dei partner
verifica di abilitazione all’attività di responsabile tecnico
Il Metodo Mobile
Istruzioni per il nuovo sistema di acquisizione dati
IL NUOVO SPAZIO WEB DELLA PROVINCIA CON DATI E INFORMAZIONI SULL’ORGANIZZAZIONE E IL PERSONALE DELLA PROVINCIA I dati sul personale sono stati estratti.
Direttore Generale Area Sanità e Sociale
Google ( Google propone due interfacce di ricerca:
BookingApp La tecnologia di domani – già oggi In collaborazione con.
LA PRESA IN CARICO DEL PAZIENTE DIABETICO
RSA Schede di ingresso unificate
Marzo 2017.
Biblioteca del Dip. di Biologia e Biotecnologie C. Darwin
MyMathLab La piattaforma digitale per l’apprendimento personalizzato della matematica Informatica 1 (Informatica Musicale - Informatica per la Comunicazione.
Basi di dati - Fondamenti
Pharma Language 27/12/2018.
Informatica 2 (Informatica e SSRI) Università degli Studi di Milano
Definizione delle priorità del paziente e degli obiettivi
SQL per la modifica di basi di dati
Prorettore alla Sanità Università degli Studi di Milano
MyMathLab La piattaforma digitale per l’apprendimento personalizzato della matematica Matematica a.a Università del Piemonte Orientale.
Ecografia in medicina generale
Persone di talento! La misura del talento non è ciò che vuoi ma ciò che puoi. L'ambizione indica solo il carattere dell'uomo, il sigillo del maestro è.
QUESTIONARIO PER LA RILEVAZIONE DELLE COMPETENZE DIGITALI E LINGUISTICHE DEI DOCENTI SINTESI Anno scolastico 2016/2017.
MyMathLab La piattaforma digitale per l’apprendimento personalizzato della matematica Biotecnologie Università degli Studi di Milano a.a
Introduzione ai Sistemi Informativi Geografici
Indica la sede dove stai donando
Layout titolo Sottotitolo.
Numeri indice di prezzi e quantità
FAreANCE Il registro della FA dei cardiologi del territorio
ROMA, FEBBRAIO 2019 Recupero di dati contabili da testi non strutturati di bilanci d’impresa disponibili sul sito Telemaco attraverso tecniche di text-mining.
Inserimento Curriculum
Transcript della presentazione:

Integrazione dati sul web Health Support Integrazione dati sul web A.A. 2016/2017 Christian Iodice Vincenzo Ceci

Non ti senti bene? Hai qualche disturbo? Problema - 1 Non ti senti bene? Hai qualche disturbo? Oggi la maniera più naturale è sfruttare la potenza del Web per dare una risposta immediata ai propri disturbi prima di consultare un medico

Problema - 2 Approccio classico Ricerca del sintomo

Problema - 3 Approccio classico Ricerca pareri medici

Problema - 4 Approccio classico Ricerca cliniche

Problema - 5 Approccio classico Ricerca farmacie

Problema - 6 Approccio classico - Confusionario - Complesso

Soluzione -1 Health Support è la soluzione APPLICAZIONE WEB CHE SEMPLIFICA, VELOCIZZA E RAGGRUPPA IL TUTTO Ricerca malattie da fonti affidabili tramite un semplice inserimento di sintomi Con un click vieni a conoscenza di pareri medici Ricerca le cliniche che curano la patologia individuata Ricerca le farmacie più vicine a te

Soluzione - 2

Demo

Architettura Mediator Wrapper Wrapper Wrapper Wrapper Wrapper Cache fisioterapiarubiera.com albanesi.it doveecomemicuro.it medicitalia.it Google Maps

Le fonti Nome Metodo Descrizione Grado di volatilità Fisioterapiarubiera Web Scraping sito di medicina che parla di malattie, sintomi, terapie, rimedi naturali, anatomia, diagnosi, dieta, alimentazione e sport. Aggiornamento mensile Albanesi Sito di medicina che si occupa di medicina, sintomi, farmaci ed esami, benessere e medicina alternativa. Doveecomemicuro Sito per cercare la struttura medica che meglio rispetta le tue esigenze. Confronta le strutture in base alle valutazioni istituzionali e degli utenti. Medicitalia Sito per di consulti medici online fatto da parte di medici esperti in qualsiasi ambito. Google maps API Una serie di strumenti per manipolare le mappe del globo terrestre messe a disposizione da Google Maps, con la possibilità di integrae nuovi servizi. Aggiornamento continuo

Le fonti locali - 1 Fisioterapiarubiera(FR) result(title, description, link) detail(title, images, description, paragraphs) Indirizzo di ricerca: http://www.fisioterapiarubiera.com/?s=sintomo 1 Albanesi (AL) result(title, link, description) detail(title, description, images, paragraphs) Indirizzo di ricerca: http://www.google.it/search?q=albanesi.it+sintomo 1 1 sintomo chiave

Le fonti locali - 2 Doveecomemicuro (DCMC) hospital(name, description, image, address, star, id_symptom) Indirizzo di ricerca: http://www.doveecomemicuro.it/strutture?q=sintomo1 Medicitalia (ME) result(title, link, short_description, id_symptom) detail(title, user_image, doctor_image, question, answers, user_name, doctor_name) Indirizzo di ricerca: http://www.google.it/search?q=medicitalia+sintomo1 1 sintomo chiave

Le fonti locali - 3 GoogleMaps (GM) result(name, vicinity, type, open_now, location_lat, location_lng) Per trovare l’elenco delle farmacie nelle vicinanze è stata utilizzata l’ API di Google Maps: https://maps.googleapis.com/maps/api/place/nearbysearch/xml?location=LAT,LNG&radius=R&type=T&key=API_KEY Dove: location specifica la posizione attuale dell’utente attraverso l’inserimento delle coordinate (latitudine e longitudine) Con radius si indica il raggio di ricerca Type indica il luogo di interesse da ricercare Key specifia l’API key utile per usufruire il servizio

Wrapper – fisioterapiarubiera Per la ricerca del sintomo: title: //main/article/header/h2/a[not(contains(.,"Fisioterapiarubiera.com"))] link: //main/article/header/h2/a[not(contains(.,"Fisioterapiarubiera.com"))]/@href description: //main/article[header/h2/a[not(contains(.,"Fisioterapiarubiera.com"))]]/div[@class="entry-summary"] Per lo scaricamento delle informazioni di interesse: title: //main/article/header[@class="entry-header"] [image, description, paragraph]: //main[@id="main"]/article/div[@class="entry-content"]//*[self::p or self::img or self::li]

Wrapper – albanesi Per la ricerca del sintomo: title: //div[@class="g"]/h3[@class="r" and a[contains(@href,"albanesi.it/")]] link: //div[@class="g"]/h3[@class="r"]/a[contains(@href,"albanesi.it")]/@href description: //span[@class="st" and ./../../h3[@class="r"]/a/@href[(contains(.,"albanesi.it/"))]] Per lo scaricamento delle informazioni di interesse: title: //main/article/header[@class="entry-header"] [description, images, paragraph]: //main[@class="content"]/article/div[@class="entry-content"]//*[self::p or self::img or self::li]

Wrapper – doveecomemicuro Per la ricerca delle cliniche: name: //h3[@class='underline'] description: //h4[@class='no-underline']/text() address: //i[@class='fa fa-map-marker']/../text() star: //div[@class='users-rating']/h3[1]/text() image = //div[@class='single-health-facility table-info']//img[@class[contains(.,'img-responsive')]]/@src

Wrapper – medicitalia Per la ricerca di pareri medici: title: //div[@class="g"]/h3[@class="r"]/a[contains(@href,"consulti")] link: //div[@class="g"]//h3[@class="r"]/a/@href[(contains(.,"consulti"))] Short_description: //span[@class="st" and ./../../h3[@class="r"]/a/@href[(contains(.,"consulti"))]] Per lo scaricamento delle informazioni di interesse: [question, answer]: //div[@class="content" and @itemprop="text"] [user_image, doctor_image]: //img[@class="img-rounded"]/@src [user_name, doctor_name]: //span[@itemprop="author"]/span[@itemprop="name"]

Wrapper – Google Maps Per la ricerca delle farmacie: name: .find('name').text() vicinity: .find('vicinity').text() lat: .find('location').find('lat').text() lng: .find('location').find('lng').text() open_now: .find('opening_hours').find('open_now').text()

Schema Globale symptom (title, short_description, link, images, long_description, paragraphs) hospital (name, description, image, address, star, id_symptom) consult (title, link, short_description, question, answers, user_image, doctor_image, user_name, doctor_name, id_symptom) pharmacy (name, vicinity, type, open_now, latitude, longitude)

Mapping GAV - 1 symptom (title, short_description, link, images, long_description, paragraphs) :- FR.result (title, short_description, link) , FR.detail (title, images, long_description, paragraphs) symptom (title, short_description, link, images, long_description, paragraphs) :- AL.result (title, link, short_description) , AL.detail (title, long_description, images, paragraphs) hospital (name, description, image, address, star, id_symptom) :- DCMC.hospital(name, description, image, address, star, id_symptom) , FR.result (id_symptom, v1, v2) hospital (name, description, image, address, star, id_symptom) :- DCMC.hospital(name, description, image, address, star, id_symptom) , AL.result (id_symptom, v1, v2)

Mapping GAV - 2 consult (title, link, short_description, question, answers, user_image, doctor_image, user_name, doctor_name, id_symptom) :- ME.result(title, link, short_description, id_symptom), ME.detail(title, user_image, doctor_image, question, answers, user_name, doctor_name) , FR.result (id_symptom, v1, v2) consult (title, link, short_description, question, answers, user_image, doctor_image, user_name, doctor_name, id_symptom) :- ME.result(title, link, short_description, id_symptom), ME.detail(title, user_image, doctor_image, question, answers, user_name, doctor_name) , AL.result (id_symptom, v1, v2) pharmacy (name, vicinity, type, open_now, latitude, longitude) :- GM.result(name, vicinity, type, open_now, latitude, longitude)

Mapping LAV FR.result (title, short_description, link) :- symptom (title, short_description, link, v1, v2, v3) FR.detail (title, images, long_description, paragraphs) :- symptom (title, v2, v3, images, long_description, paragraphs) AL.result (title, link, short_description) :- symptom (title, short_description, link, v1, v2, v3) AL.detail (title, long_description, images, paragraphs) :- symptom (title, v2, v3, images, long_description, paragraphs) DCMC.hospital(name, description, image, address, star, id_symptom) :- hospital (name, description, image, address, star, id_symptom), symptom (id_symptom, v1, v2, v3, v4, v5) ME.result(title, link, short_description, id_symptom) :- consult (title, link, short_description, v1, v2, v3, v4, v5, v6, id_symptom), symptom (id_symptom, v1, v2, v3, v4, v5) ME.detail(title, user_image, doctor_image, question, answers, user_name, doctor_name) :- consult (title, v1, v2, question, answers, user_image, doctor_image, user_name, doctor_name, id_symptom) , symptom (id_symptom, v1, v2, v3, v4, v5) GM.result(name, vicinity, type, open_now, latitude, longitude) :- pharmacy (name, vicinity, type, open_now, latitude, longitude)

Query - 1 Dato un sintomo, recuperare tutte le possibili diagnosi associate ad esso e gli ospedali specializzati nella cura della malattia relativa findDiseaseWithHospital(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) SELECT title, images, long_description as description, paragraphs, name as hospital_name, description as hospital_description, image as hospital_image, address, star FROM symptom, hospital WHERE symptom.title == hospital.id_symptom AND symptom.title = ‘occhi rossi’

Query - 2 Dato un sintomo, recuperare tutte le possibili diagnosi associate e i pareri medici inerenti ad esso findDiseaseWithConsults (title_symptom, images, description, paragraphs, title_consult, user_image, doctor_image, question, answers, user_name, doctor_name) :- symptom (title_symptom, v1, v2, images, description, paragraphs), consult (title_consult, v1, v2, question, answers, user_image, doctor_image, user_name, doctor_name, title) SELECT symptom.title as title_symptom, images, long_description as description, paragraphs, consult.title as title_consult, question, answers, user_image, doctor_image, user_name, doctor_name FROM symptom, consult WHERE symptom.title == consult.id_symptom AND symptom.title = ‘perdita di capelli’

Query - 3 Data una posizione espressa in latitudine e longitudine, recuperare le informazioni inerenti alle farmacie nelle vicinanze findPharmacy (name, vicinity, open_now, latitude, longitude) :- pharmacy (name, vicinity, v1, open_now, latitude, longitude) SELECT name, vicinity, open_now, latitude, longitude FROM pharmacy WHERE latitude=‘40.772108’ AND longitude=‘14.7906148’

GAV query unfolding - 1 findDiseaseWithHospital(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) symptom è una unione di due query e quindi l’unfolding produce l’ OR tra findDiseaseWithHospital’ e findDiseaseWithHospital’’ findDiseaseWithHospital’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- FR.result(title, v1, v2), FR.detail(title, images, description, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), FR.result(title, v3, v4) findDiseaseWithHospital’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- AL.result(title, v1, v2), AL.detail(title, description, images, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), AL.result(title, v3, v4)

GAV query unfolding - 2 findDiseaseWithHospital(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) hospital è una unione di due query e quindi l’unfolding produce l’ OR tra findDiseaseWithHospital’’’ e findDiseaseWithHospital’’’’ 3. findDiseaseWithHospital’’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- FR.result(title, v1, v2), FR.detail(title, images, description, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), AL.result(title, v3, v4) 4. findDiseaseWithHospital’’’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- AL.result(title, v1, v2), AL.detail(title, description, images, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), FR.result(title, v3, v4)

GAV query simplification - 1 findDiseaseWithHospital(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) findDiseaseWithHospital’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- FR.result(title, v1, v2), FR.detail(title, images, description, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), FR.result(title, v3, v4) findDiseaseWithHospital’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- AL.result(title, v1, v2), AL.detail(title, description, images, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), AL.result(title, v3, v4)

GAV query simplification - 2 findDiseaseWithHospital(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) 3. findDiseaseWithHospital’’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- FR.result(title, v1, v2), FR.detail(title, images, description, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), AL.result(title, v3, v4) 4. findDiseaseWithHospital’’’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- AL.result(title, v1, v2), AL.detail(title, description, images, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title), FR.result(title, v3, v4)

LAV bucket algorithm - 1 Query: findDiseaseWithHospital(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) Primo step: Si costruisce per ogni atomo g del corpo della query globale il suo bucket che ragruppa tutte le fonti locali da cui g può essere dedotto. Bucket(symptom (title, v1, v2, images, description, paragraphs)): FR.detail(title, images, description, paragraphs) AL.detail(title, description, images, paragraphs) Non abbiamo considerato fr.result perché non ha informazioni che devono essere mostrate in output, ovvero non ha la description, images e paragraphs. Bucket(hospital (hospital_name, hospital_description, hospital_image, address, star, title)): DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title)

LAV bucket algorithm - 2 Secondo step: Consiste nel costruire una serie di query candidate che si ottengono combinando gli atomi di ogni bucket. Sono possibili 2x1 riformulazioni: findDiseaseWithHospital’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- FR.detail(title, images, description, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title) findDiseaseWithHospital’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- AL.detail(title, description, images, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title) findDiseaseWithHospital’ non è inclusa in findDiseaseWithHospital’’ e viceversa per cui bisogna considerarle entrambe.

LAV bucket algorithm - 3 Terzo step: Checking containement: tra tutte le query candidate considerare, se presente, la query che contiene massimamente tutte le altre e verificarne il suo contenimento nella query globale. Per fare questo bisogna riscrivere le query riformulate sulle fonti locali nuovamente sullo schema globale. findDiseaseWithHospital’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- FR.detail(title, images, description, paragraphs), DCMC.hospital(hospital_name, hospital_description, hospital_image, address, star, title) findDiseaseWithHospital’’’(title, images, description, paragraphs, hospital_name, hospital_description, hospital_image, address, star) :- symptom (title, v1, v2, images, description, paragraphs), hospital (hospital_name, hospital_description, hospital_image, address, star, title) findDiseaseWithHospital’’’ è identica a findDiseaseWithHospital, quindi sicuramente la query findDiseaseWithHospital’’’ è massimamente contenuta nella query globale iniziale. Un risultato analogo si ha con findDiseaseWithHospital’’.

Tecnologie utilizzate

FINE