Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Fruit World Integrazione Dati sul Web 2016/2017
Candidati: Carmine Scala , Francesco Genio Docente: Gennaro Costagliola.
2
Specifica del problema
Sei un amante della frutta e cerchi dei ricette che ti aiutino a preparare dolci e bevande con un determinato frutto. Ti interessa avere un video tutorial correlato alla ricetta scelta. Ti interessa approfondire le proprietà benefiche e nutrizionali relative al tuo frutto preferito. Problema: per avere queste informazioni devi consultare più siti dopo aver fatto ricerche capillari, inoltre i siti di ricette non filtrano correttamente le ricette relative ad un determinato frutto causando perdite di tempo.
3
Specifica del problema 2
Fruit World è una piattaforma Web che ha lo scopo di raccogliere tutte queste informazioni con una semplice veste grafica adatta a qualsiasi tipo di dispositivo.
4
Specifica del problema 3
Visualizza le proprietà benefiche di un determinato frutto estratte da diverse fonti. Visualizza le ricette su un frutto da te selezionato. Segui il video tutorial di una determinata ricetta. Su Fruit World puoi fare tutto questo con pochissimi click su qualsiasi tipo di dispositivo (pc,tablet,smartphone..).
5
Fonti 1 Alimentipedia: Dietabit:
Utilizzata per estrarre la lista dei frutti. Utilizzata per estrarre descrizione e proprietà benefiche dei frutti. Web Scraping. Dietabit: Utilizzata per estratte i valori nutrizionali dei frutti.
6
Fonti 2 Giallo Zafferano: YouTube:
Utilizzata per estrarre la lista delle ricette relative ad un determinato frutto. Utilizzata per estrarre i dettagli di una determinata ricetta. Web Scraping. YouTube: Utilizzata per estratte i video tutorial relativi alle ricette. API.
7
Architettura del sistema
Cache Mediator Wrapper Lista Frutti Wrapper Dettaglio Frutto Wrapper Valori Nutrizionali Wrapper Anteprima Ricette Wrapper Dettaglio Ricette Wrapper YT Alimentipedia Dietabit Giallo Zafferano Api YouTube
8
Architettura del sistema
L’architettura da noi usata è un architettura Ibrida. Ogni volta che viene effettuata una query la Cache viene aggiornata diventando una sorta di data warehouse. Le informazioni del dettaglio ricetta, anteprima ricetta , valori nutrizionali e lista frutti una volta inserite non vengono più eliminate(informazioni statiche). Ma controlliamo se ci sono nuove ricette e nuovi frutti. Le uniche informazioni aggiornate sono l’id del video tutorial(YouTube) e le proprietà benefiche del frutto(Alimentipedia).
9
Cache 1 Per ogni query effettuata viene salvato il risultato nella cache. Le informazioni sulla descrizione delle proprietà benefiche (Alimentipedia) vengono aggiornate ogni 40 giorni. L’id del video tutorial (YouTube) viene aggiornato ogni 2 giorni. Per quanto riguarda la lista dei frutti (Alimentipedia) i dati una volta inseriti non vengono cancellati. Ma ogni 20 giorni si controlla se è presente un nuovo frutto, in caso positivo viene inserito nella cache e mostrato all’utente.
10
Cache 2 Per quanto riguarda la lista delle ricette relative ad un determinato frutto(Giallo Zafferano) i dati una volta inseriti non vengono cancellati perché sono informazioni statiche . Viene però controllato se è presente una nuova ricetta , cosi da inserirla nel database e mostrarla all’utente. Le nuove ricette relative ad un determinato frutto vengono controllate ogni 20 giorni. Il dettaglio di una determinata ricetta(Giallo Zafferano) non ha associato un timestamp perché è un informazione statica. Anche i valori nutrizionali (Dietabit) non hanno nessun timestamp associato.
11
Query sul sistema Le query sul sistema vengono effettuate direttamente sugli schemi globali. Ognuno di essi coincide con uno script Java(Servlet), il quale riceve in input la keyword specificata dall’utente. Lo script controlla prima se la richiesta può essere soddisfatta dalla cache , se l’informazione non è presente allora si interrogano le sorgenti(tramite scraping o api). Possiamo distinguere le sorgenti utilizzate in due modi: Sorgenti che permettono di ricercare tramite una keyword. Sorgenti che restituiscono tutti i contenuti.
12
Preleva dati dalla Cache Wrapper Alimentipedia
Query sul sistema Lo script estrazione <<lista frutti>> segue questa logica: Cache contiene dati cercati ? Script Java SI Preleva dati dalla Cache NO Wrapper Alimentipedia NO Aggiorna Cache Invia Risultati
13
Query sul sistema Lo script «dettaglio frutto» segue questa logica:
Cache contiene dati cercati ? La Cache ha dati obsoleti? Script Java SI Preleva dati dalla Cache Keyword NO NO SI Wrapper Alimentipedia Wrapper Giallo Zafferano (statico) Wrapper Dietabit (statico) Wrapper Alimentipedia Aggiorna Cache Aggiorna Cache Invia Risultati
14
Performance Sistema 1 Per aumentare le performance del sistema, nello script che estrae il dettaglio del frutto i tre Wrapper vengono chiamati in parallelo . Il risultato viene poi combinato e restituito all’utente. Gli inserimenti all’interno della cache sono stati fatti usando dei Thread. Tutti i metodi di inserimento sono sincronizzati. NB: gli inserimenti in cache sono fatti al primo accesso a quel determinato frutto. Successivamente verranno inserite nuove ricette o nuovi frutti se sono presenti.
15
Performance Sistema 2 Inoltre la fonte Giallo Zafferano ha una ricerca non perfetta quando restituisce le ricette relative ad un determinato frutto. Su molti frutti restituisce anche ricette non inerenti. Es: la ricerca su Mirtillo produce molti risultati non corretti:
16
Performance Sistema 2 Problemi di performance: (step di sviluppo)
1. Siamo partiti da uno schema logico che in fase di 1° Scraping scaricava i dati da tutte le fonti(Dietabit,Alimentipedia), e che in particolare scaricava anche tutte le anteprime delle ricette di Giallo Zafferano correlate al frutto. Risultato : LENTO SU ALCUNI FRUTTI: Limone,Lampone ecc. aventi molte ricette correlate. L’utente rimane bloccato per qualche secondo: non sempre accettabile!!!! Abbiamo ideato anche il filtro con stemming del passo 3 visto che molte ricette erano scorrelate. (ovviamente non è stato aggiunto causa prestazioni pessime, in quanto per vedere se il nome del frutto è presente nella lista degli ingredienti c’è bisogno di fare Scraping sulla pagina dettaglio ricetta di quel frutto). 2. Abbiamo ideato uno schema che attinge in fase di 1° Scraping i dati da tutte le fonti , e che in particolare aggiunge inizialmente 5 ricette per ogni frutto. Le restanti ricette vengono caricate da un’operazione silenziosa successiva che accoda le nuove ricette a quelle già presenti nella pagina. Risultato: MIGLIORAMENTO ELEVATO DELLE PRESTAZIONI. L’utente non viene bloccato in fase di scraping per molto tempo. 3. Abbiamo aggiunto all’idea precedente un filtro sulle ricette di Giallo Zafferano mediante stemming. Risultato: MIGLIORAMENTO DELLA QUALITA’ DEI RISULTATI RESTITUTI.
17
Performance Sistema 3 Mostriamo con uno schema la logica descritta prima Server Server Il Server ritorna almeno 5 ricette al Client. Il Client effettua la prima richiesta al Server. Client Client
18
Performance Sistema 4 Mostriamo con uno schema la logica descritta prima Il Server controlla prima da quanto tempo non cerca nuove ricette di quel determinato frutto. Se non controlla le ricette di quel frutto da 20 giorni allora va a cercare nuove ricette che sono conformi al frutto cercato. Usiamo la libreria Lucene per effettuare lo stemming sul nome del frutto. Server Server Il Client effettua una nuova richiesta per controllare la presenza di altre ricette. Tutto questo avviene in maniera non bloccante. Client Client
19
Performance Sistema 5 Mostriamo con uno schema la logica descritta prima Server Quando la ricerca delle nuove ricette termina vengono inserite nella Cache. E vengono inviate anche all’utente se si trova ancora nella pagina che ha effettuato la richiesta. Client
20
Performance Sistema 6 Quando nella Cache il dettaglio del frutto è già presente la prima fase viene saltata (perché le anteprima delle ricette vengono lette da database) , e viene contattato il Server solo per verificare la presenza di nuove ricette. Lo script che gestisce questo non può eseguire più di cinque Thread in contemporanea. I Thread che trovano già 5 Thread in esecuzione si mettono in attesa. Inoltre prima di controllare nuove ricette si controlla se sono passati 20 giorni dall’ultima ricerca su quel determinato frutto.
21
Query sul sistema Lo Script Java «ricerca nuove ricette» segue questa logica: Sono trascorsi 20 giorni da quando ho controllato le ricette di quel frutto? Script Java NO Esci Keyword SI Wrapper Giallo Zafferano Sono in esecuzione molti thread? NO Estrai Ricette salvate dalla Cache SI Resta in attesa fino a quando non vieni svegliato Ci sono nuove ricette? SI Aggiorna Cache Invia Risultati
22
Query sul sistema Lo script «dettaglio ricetta» segue questa logica:
Cache contiene dati cercati ? La Cache ha l’id video obsoleto? Script Java SI Keyword NO Preleva dati dalla Cache NO SI Wrapper Giallo Zafferano Api YouTube API YouTube Aggiorna Cache Aggiorna Cache Invia Risultati
23
Collegamento Fonti 1 Sono stati implementati i seguenti collegamenti:
Visualizzazione lista frutti Visualizzazione dettaglio frutto. Visualizzazione dettaglio ricetta con video tutorial se presente.
24
Collegamento Fonti 1 La visualizzazione del dettaglio frutto viene effettuata usando il nome del frutto selezionato dall’utente dalla lista iniziale. Grazie al nome del frutto estraiamo la descrizione e le proprietà benefiche del frutto da Alimentipedia , i valori nutrizionali da Dietabit e l’anteprima delle ricette da Giallo Zafferano. La visualizzazione del dettaglio della ricetta viene effettuata usando il nome della ricetta selezionato dall’utente. Grazie al nome della ricetta estraiamo i dettagli relativi alla ricetta da Giallo Zafferano, inoltre usiamo il titolo della ricetta per estrarre il video tutorial da YouTube.
25
Descrizione Schemi Locali -1
Alimentipedia: Lista_frutti(nomeFrutto,anticipazione,urlImageFrutto). Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto). Dietabit: Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqu a,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vit aminaE,vitaminaD,vitaminaK).
26
Descrizione Schemi Locali -2
Giallo Zafferano: Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,link Ricetta,linkImmagine,difficolta, preparazione ,cottura). Dettaglio_ricetta_frutto(titolo_ricetta,presentazione,titlePresentazione,ingredientiR icetta,preprazioneRicetta, UrlimmaginiPreparazioneRicetta). YouTube(titolo_ricetta,id_video,canale_video).
27
Wrapper Dietabit
28
Wrapper Dietabit I restanti valori vengono estratti generalizzando l’Xpath: Per ogni riga uso il DOM per estrarre le informazioni: Caso speciale per la frutta secca(castagna e pistacchi) ma il ragionamento è molto simile.
29
Wrapper Alimentipedia Lista Frutti:
30
Wrapper Alimentipedia Dettaglio_frutto:
Il seguente Wrapper ha creato delle difficoltà perché le pagine presentano solo una parte di struttura uguale ,mentre il resto non segue una logica uniforme. La parte conforme a tutte le pagine è stato estratto in questo modo:
31
Wrapper Alimentipedia Dettaglio_frutto: Ecco le difficoltà trovate :
Le proprietà benefiche di alcuni frutti si presentano in questo modo: In alcuni casi le proprietà sono descritte appena dopo il titolo Nutrizione e nel paragrafo che contiene la parola Proprietà.
32
Wrapper Alimentipedia Dettaglio_frutto:
Altre si presentano in questo modo: In alcuni casi le proprietà sono rappresentate come lista di valori.
33
Wrapper Alimentipedia Dettaglio_frutto:
Altre si presentano in questo modo: in alcuni le proprietà benefiche si trovanoappena dopo il titolo Nutrizione.
34
Wrapper Alimentipedia Dettaglio_frutto:
Altre si presentano in questo modo: Non è detto che il paragrafo proprietà sia il primo
35
Wrapper Alimentipedia Dettaglio_frutto:
In questo modo andiamo a prelevare(Se ci sono) le proprietà benefiche che si trovano subito dopo il titolo Nutrizione
36
Wrapper Alimentipedia Dettaglio_frutto:
In questo modo andiamo a prelevare(Se ci sono) le proprietà benefiche che si trovano nel paragrafo «Valori Nutrizionali» oppure «Proprietà»
37
Wrapper Alimentipedia Dettaglio_frutto:
Non è stato possibile generalizzare tutti i frutti . Mango e Mirtillo presentano un codice di estrazione differente: Mirtillo:
38
Wrapper Giallo Zafferano Lista_ricette_frutto:
39
Wrapper Giallo Zafferano Lista_ricette_frutto:
40
Wrapper Giallo Zafferano
Lista_ricette_frutto: (Pagina con lista di articoli )
41
Wrapper Giallo Zafferano
Lista_ricette_frutto: (Pagina con lista di articoli )
42
Wrapper Giallo Zafferano Lista_ricette_frutto: (Analisti Tag Article)
43
Wrapper Giallo Zafferano Lista_ricette_frutto: (Analisti Tag Article)
44
Wrapper Giallo Zafferano Dettaglio_ricetta_frutto GENERALE:
45
Wrapper Giallo Zafferano Dettaglio_ricetta_frutto GENERALE:
46
Wrapper Giallo Zafferano Dettaglio_ricetta_frutto GENERALE:
47
Wrapper Giallo Zafferano Dettaglio_ricetta_frutto GENERALE:
48
Wrapper Giallo Zafferano Dettaglio_ricetta_frutto SPECIALE:
49
Wrapper Giallo Zafferano Dettaglio_ricetta_frutto SPECIALE:
50
Cerca il Video in globale + Lucene Ritorna Video Non Trovato
Wrapper YouTube (API) Titolo Ricetta Video trovato in GZ? NO Cerca il Video in globale + Lucene SI Video trovato? Restituisci ID Video SI NO Ritorna Video Non Trovato
51
Wrapper YouTube (API) – Giallo Zafferano
52
Wrapper YouTube (API) – Giallo Zafferano
53
Wrapper YouTube (API) – Ricerca Globale
54
Wrapper YouTube (API) – Utilizzo Lucene
55
Wrapper YouTube (API) – Utilizzo Lucene
56
Schema Globale Frutto(nomeFrutto,abstract,urlImageFrutto).
Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEne rgetico,zuccheri,grassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferr o,magnesio,potassio,vitaminaA,vitaminaE,vitaminaD,vitaminaK,urlImmagin e). Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicet ta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura). Dettaglio_Ricetta(titolo_ricetta,presentazione,titlePresentazione,ingredientiR icetta,preprazioneRicetta, UrlimmaginiPreparazioneRicetta, idVideo).
57
Mapping GAV Frutto(nomeFrutto,abstract,urlImageFrutto):- Lista_frutti(nomeFrutto,anticipazione,urlImageFrutto) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’.
58
Mapping GAV Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergeti co,grassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potas sio,vitaminaA,vitaminaE,vitaminaD,vitaminaK,urlImmagine):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto) ^ Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acq ua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA, vitaminaE,vitaminaD,vitaminaK).
59
Mapping GAV Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,lin kRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,link Ricetta,linkImmagine,difficolta, preparazione ,cottura) ^ (categoriaRicetta=‘Dolci’ || categoriaRicetta=‘Bevande’ || categoriaRicetta=‘Salsa e Sughi’ || categoriaRicetta=‘Marmellata e conserve’ ).
60
Mapping GAV Dettaglio_Ricetta(titolo_ricetta,presentazione,titlePresentazione,ingredientiRicett a,preprazioneRicetta, UrlimmaginiPreparazioneRicetta, idVideo):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,_,_,_,_,_,_) ^ (categoriaRicetta=‘Dolci’ || categoriaRicetta=‘Bevande’ || categoriaRicetta=‘Salsa e Sughi’ || categoriaRicetta=‘Marmellata e conserve’ ) ^ Dettaglio_ricetta_frutto(titolo_ricetta,presentazione,titlePresentazione,ingredienti Ricetta,preprazioneRicetta, UrlimmaginiPreparazioneRicetta) ^ YouTube(titolo_ricetta,id_video,_).
61
Mapping LAV Lista_frutti(nomeFrutto,anticipazione,urlImageFrutto) :- Frutto(nomeFrutto,abstract,urlImageFrutto). Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto):- Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,urlImmagine). Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibr e,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vi taminaD,vitaminaK):- Dettaglio_Frutto(nomeFrutto,_,_,proteine,carboidrati,valoreEnergetico,grassi,acqua,fib re,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,v itaminaD,vitaminaK,_).
62
Mapping LAV Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicett a,linkImmagine,difficolta, preparazione ,cottura):- Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicet ta,linkImmagine,difficoltà, preparazione ,cottura). Dettaglio_ricetta_frutto(titolo_ricetta,presentazione,titlePresentazione,ingredientiRicett a,preprazioneRicetta, UrlimmaginiPreparazioneRicetta) :- Dettaglio_Ricetta(titolo_ricetta,_,presentazione,titlePresentazione,ingredientiRicetta,pr eprazioneRicetta, UrlimmaginiPreparazioneRicetta, _). YouTube(titolo_ricetta,id_video,_):- Dettaglio_Ricetta(titolo_ricetta,_,_,_,_,_, _, idVideo).
63
Query 1 Estrazione lista frutti (Datalog)
q(nomeFrutto,abstract,urlImageFrutto):- Frutto(nomeFrutto,abstract,urlImageFrutto). Estrazione lista frutti (Sql) select * from frutto order by nomeFrutto asc
64
Query 2 Estrazione dettaglio di un determinato frutto (Datalog)
q(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,gras si,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vit aminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRicetta,abst ractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,grassi, acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vita minaE,vitaminaD,vitaminaK,urlImmagine) ^ Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,l inkImmagine,difficoltà, preparazione ,cottura). Estrazione dettagli di un determinato frutto (SQL) select * from dettaglio_frutto as d LEFT JOIN anteprimaricette as a on (d.nomeFrutto = a.nomeFrutto ) where d.nomeFrutto = ‘Ananas’.
65
Query 3 Estrazione dettaglio di una determinata ricetta (Datalog)
q(titolo_ricetta,presentazione,titlePresentazione,ingredientiRicetta,preprazioneRicetta, UrlimmaginiPreparazioneRicetta, idVideo):- Dettaglio_Ricetta(titolo_ricetta,presentazione,titlePresentazione,ingredientiRicetta,prepra zioneRicetta, UrlimmaginiPreparazioneRicetta, idVideo). Estrazione dettaglio di una determinata ricetta (SQL) select * from dettaglioricetta where titoloRicetta = ‘Mele Caramellate’.
66
GAV Query Unfolding (Query 2)
q(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,g rassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamin aA,vitaminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRic etta,abstractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,gr assi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamina A,vitaminaE,vitaminaD,vitaminaK,urlImmagine) ^ Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicet ta,linkImmagine,difficoltà, preparazione ,cottura).
67
GAV Query Unfolding (Query 2)
q(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,g rassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamin aA,vitaminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRic etta,abstractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto) ^ Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibr e,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vi taminaD,vitaminaK) ^ Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicet ta,linkImmagine,difficoltà, preparazione ,cottura).
68
GAV Query Unfolding (Query 2)
q(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,g rassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamin aA,vitaminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRic etta,abstractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto) ^ Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibr e,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vi taminaD,vitaminaK) ^ Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicet ta,linkImmagine,difficoltà, preparazione ,cottura).
69
GAV Query Unfolding (Query 2)
q(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,g rassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamin aA,vitaminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRic etta,abstractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto) ^ Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibr e,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vi taminaD,vitaminaK) ^ Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicett a,linkImmagine,difficolta, preparazione ,cottura) ^ (categoriaRicetta=‘Dolci’ || categoriaRicetta=‘Bevande’ || categoriaRicetta=‘Salsa e Sughi’ || categoriaRicetta=‘Marmellata e conserve’ ).
70
GAV Query Semplificazione (Query 2)
q(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,g rassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamin aA,vitaminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRic etta,abstractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImageFrutto) ^ Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibr e,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vi taminaD,vitaminaK) ^ Lista_frutti(nomeFrutto,_,_) ^ nomeFrutto != ‘Baby Kiwi’ ^ nomeFrutto != ‘Bacche di Goji’ ^ nomeFrutto != ‘Alkekengi’ ^ nomeFrutto != ‘Carambola’ ^ nomeFrutto != ‘Feijoa sellowiana’ ^ nomeFrutto != ‘Melone di Mantova’ ^ nomeFrutto != ‘Pistacchi di Bronte’ ^ nomeFrutto != ‘Rambutan’ ^ Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicett a,linkImmagine,difficolta, preparazione ,cottura) ^ (categoriaRicetta=‘Dolci’ || categoriaRicetta=‘Bevande’ || categoriaRicetta=‘Salsa e Sughi’ || categoriaRicetta=‘Marmellata e conserve’ ).
71
LAV Bucket Algorithm (Query 2)
q2Test(nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergeti co,grassi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vit aminaA,vitaminaE,vitaminaD,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categor iaRicetta,abstractRicetta,linkRicetta,linkImmagine,difficoltà, preparazione ,cottura):- Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,gr assi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamina A,vitaminaE,vitaminaD,vitaminaK,urlImmagine) ^ Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicet ta,linkImmagine,difficoltà, preparazione ,cottura).
72
LAV Bucket Algorithm (Query 2)
Buket[Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,gr assi,acqua,fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitamina A,vitaminaE,vitaminaD,vitaminaK,urlImmagine)] : Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImmagine). Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibre,vitami naC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitaminaD,vitami naK). Buket[ Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicet ta,linkImmagine,difficoltà, preparazione ,cottura)] : Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,linkIm magine,difficolta, preparazione ,cottura)
73
LAV Bucket Algorithm (Query 2)
Sono possibili 2 riformulazioni: Risolviamo la prima combinazione: q1 (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,grassi,acqua, fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitamina D,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,li nkImmagine,difficoltà, preparazione ,cottura):- Info_frutto(nomeFrutto,descrizione,proprietaBenefiche, urlImmagine) and Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,linkImm agine,difficolta, preparazione ,cottura).
74
LAV Bucket Algorithm (Query 2)
UNFOLDING q1’ (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,grassi,acqua, fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitamina D,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,li nkImmagine,difficoltà, preparazione ,cottura):- Dettaglio_Frutto (nomeFrutto,descrizione,proprietàBenefiche,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,urlImmagine) and Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,linkImm agine,difficoltà, preparazione ,cottura). q1’ ⊆ q2Test
75
LAV Bucket Algorithm (Query 2)
Risolviamo la seconda combinazione: q2 (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,grassi,acqua, fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitamina D,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,li nkImmagine,difficoltà, preparazione ,cottura):- Valori_Nutrizionali(nomeFrutto,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibre,vitamina C,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitaminaD,vitaminaK) and Lista_ricette_frutto(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,linkImm agine,difficolta, preparazione ,cottura)
76
LAV Bucket Algorithm (Query 2)
UNFOLDING q2’ (nomeFrutto,descrizione,proprietàBenefiche,proteine,carboidrati,valoreEnergetico,grassi,acqua, fibre,vitaminaC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitamina D,vitaminaK,urlImmagine,nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,li nkImmagine,difficoltà, preparazione ,cottura):- Dettaglio_Frutto(nomeFrutto,_,_,proteine,carboidrati,valoreEnergetico,grassi,acqua,fibre,vitamin aC,vitaminaB1,fosforo,calcio,ferro,magnesio,potassio,vitaminaA,vitaminaE,vitaminaD,vitaminaK, _) and Anteprima_Ricetta(nomeFrutto,titoloRicetta,categoriaRicetta,abstractRicetta,linkRicetta,linkImm agine,difficoltà, preparazione ,cottura). q2’ ⊆ q2Test
77
LAV Buket Algorithm LA Riformulazione LAV di q2Test è: q1’ or q2’
78
Tecnologie Utilizzate
Java Jsoup Bootstrap Apache Tomcat JavaScript phpMyAdmin JDOM Lucene API YouTube CanvasJs MySql
79
Divisione del lavoro Carmine Scala: Francesco Genio Entrambi:
Wrapper relativi ad Alimentipedia e Dietabit (JSOUP). Gestione Cache Sistema (Query scrittura , lettura ecc). Gestione Concorrenza. Francesco Genio Wrapper relativi a Giallo Zafferano e API YouTube (JSOUP). Interfaccia grafica(Jsp,CSS,JS,Bootstrap,HTML,CanvasJs). Entrambi: Creazione XML tramite libreria JDOM e gestione Script lato Server(Servlet).
80
Sviluppi Futuri Inserire qualche nuova fonte per integrare nuovi tipi di frutti. Inserire qualche nuova fonte per attingere nuove ricette. Inserire nel dettaglio della ricetta un form per acquistare frutti\ingredienti direttamente online. Raffinare le perfomance su ricerca nuove ricette.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.