Virginio Desktop Analisi

12

Click here to load reader

Transcript of Virginio Desktop Analisi

Page 1: Virginio Desktop   Analisi

A.A 2005/2006 C.D.L ITPS Alunni Centrone Sergio, Gadaleta FabioGruppo BaelSoft Production Corso di Studio : Programmazione Analisi, progettazione, codifica e test di un caso di studio.

È stata commissionata la realizzazione del seguente programma :

Realizzare attraverso opportune classi (>1) le seguenti funzionalità di un micro motore di ricerca personale

VIRGINIO Desktop

1. indicizzazione delle parole presenti nei file contenuti in una cartella indicata dall'utente (txt o testo di

pagine html).

per ogni parola dovrà essere associata la lista delle posizioni (path) dei file

tali info risiederanno in un opportuno file indice del motore.

a scelta è possibile trascurare le parole troppo comuni (stopword) di cui esistono liste

2. ricerca OR: su input di una o più stringhe, vanno restituite le posizioni di tutti i file in cui compaia

almeno una delle stringhe.

3. ricerca AND: su input di una o più stringhe, vanno restituite le posizioni di tutti i file in cui compaiano

tutte le stringhe.

1. Analisi Per una realizzazione efficiente del progetto sono stati chiesti al committente alcuni esempi

dell’utilizzo del micro motore di ricerca :

Data la cartella in cui sono presenti 2 file che contengono le seguenti stringhe

• File1 conterrà “ciao come va”

• File 2 conterrà “va tutto bene “

Dopo l’indicizzazione il file indice di Virginio Desktop conterrà :

ciao percorso file 1

come percorso file1

va percorso file1 percorso file 2

tutto percorso file 2

bene percorso file 2

Page 2: Virginio Desktop   Analisi

nel caso in cui nel file siano presenti articoli, preposizioni o simboli vari di punteggiatura, saranno

considerati come stopword e saranno ignorate al momento dell’indicizzazione.

Quando verrà eseguita una nuova indicizzazione il contenuto del file sarà soprascritto.

Per le 2 ricerche richieste si agirà circa allo stesso modo :

si prende in input una o piu parole da trovare separate dalla virgola e le si ricercheranno in tutti i

file della directory specificata. La differenza tra le ricerche e che una restituisce la posizione di tutti

i file che contengano almeno una delle parole inserite (se viene chiesto di ricercare più di una

parola), mentre la seconda, restituisce tutte le posizioni dei file che contengono tutte le parole

inserite.

Esempio fornito dal committente :

Ricerca or

Inserisci la stringa da ricercare : come ,va

La stringa è presente nel file : percorso file 1 percorso file 2

Ricerca and

Inserisci la stringa da ricercare : come, va

La stringa è presente nel file : percorso file 1.

Dopo un’attenta analisi della traccia commissionata sono risultati i seguenti dati di input :

• Il precorso della directory che contiene i file

• Le stringhe da ricercare

I dati di output saranno

• Il file indice del micro motore

• I risultati delle ricerche effettuate

Per quel che riguarda i casi limite, ne sono stati identificati i seguenti:

Riguardo all’acquisizione del percorso della directory

• Il percorso della directory inserito non è valido perché la cartella specificata non esiste

• Il percorso della directory inserito non è valido perché la cartella specificata è in realtà un

file di testo o un file html

• Il percorso della directory inserito non contiene file txt o html o non vi e' nessun file al suo

interno

• I file contenuti all’interno della directory sono entrambi vuoti

Riguardo la parola da cercare

• La parola o le parole cercate non sono presenti in nessun file

Riguardo altri aspetti:

Page 3: Virginio Desktop   Analisi

• All’inizio dell’esecuzione del programma il file di indice non esiste; viene creato dopo

l’indicizzazione

• Nel file ci sono 2 parole uguali

Progettazione Per l’implementazione del programma e stata scelta una tecnica ibrida che usa sia lo sviluppo top-

down che quello bottom-up .

Una prima scomposizione del problema individua le seguenti parti :

Virgilio Desktop (main)

Indicizzazione Ricerca boolena

AND OR

Da questo schema sono state poi individuate le classi base per l’organizzazione del programma:

• Classe Virgilio Desktop • Classe Indicizzazione • Classe Ricerca Booleana

Queste sono legate tra loro tramite le seguenti relazioni:

Virginio Desktop (main)

Ricerca Booleana

Indicizzazione

Percorso File

Parole[ ]

Stringa da cercare Parole [ ]

File Trovati [ ]

Page 4: Virginio Desktop   Analisi

Il main avrà il compito di interfacciarsi con l’utente, quindi presenterà un piccolo menù da cui

scegliere l’operazione da effettuare.

Provvede inoltre ad effettuare il salvataggio dell’indicizzazione sul file indice del motore di ricerca.

Le variabili principali utilizzate da questa classe saranno:

• Percorso (Stringa): memorizza il percorso di un file

• Scelta (Stringa) : memorizza la scelta del menù

• Index (File) : file in cui sono memorizzate tutte le parole dei file nella cartella specificata

Da qui saranno inoltre lanciate tutte le stampe a video (indicizzazione e ricerca ) e gestite tutte le

eccezioni lanciate dai vari metodi e costruttori della altri classi.

La classe indicizzazione si occuperà invece di aprire e leggere uno alla volta tutti i file presenti nella

directory specificata.

Per ogni file controllerà se la parola letta sarà gia contenuta nell’ hashmap di appoggio usato per

contenere le parole lette.

Se non lo è aggiungerà la nuova parola con il percorso del file, altrimenti aggiungerà solo il

percorso.

E previsto anche il caso in cui ci siano più parole uguali nello stesso file e viene gestito prendendo

in considerazione solo la prima parola e ignorando tutte le altre.

In questa classe si è preferito l’uso dell’ Hashmap perché c’e un risparmio notevole di codice e di

tempo. Infatti con essa non è necessario passare in rassegna un eventuale vettore usato per questo

scopo e si risparmia anche la scrittura del codice corrispondente.

Inoltre questa classe prevede il controllo delle stopword.

Le variabili e le strutture dati principali usate in questa classe sono :

• Files[] (File) : è un array che contiene i nomi di tutti i file presenti nella directory

specificata

• Parola [] : un vettore formato da una piccola classe secondaria che è composta da un campo

che contiene la parola (String), e da un altro che contiene i percorsi dei file (ArrayList

<String>)

• Percorso : variabile stringa ricevuta dal main

• Index : hashmap che contiene l’indicizzazione dei file e viene restituita al main.

La classe ricerca si occupa di eseguire le 2 ricerche booleane.

Prendendo in input le parole da ricercare separate da una virgola, per la ricerca OR controlla se nel

hashmap presente in memoria sono presenti file che contengono almeno una delle parole digitate.

Se non viene trovata alcuna parola viene restituito il valore null.

Page 5: Virginio Desktop   Analisi

Nella ricerca AND vengono trovati tutti i file che contengono tutte le parole digitate anche qui nel

caso non ce ne siano sarà restituito il risultato null.

Le variabili usate saranno:

• Indice (Hashmap ) : rappresenta la struttura su cui saranno eseguite le ricerche

• Parole [] (String) : Array ottenuto con il metodo split della classe String per separare le

parole da ricercare

• Risultato ricerca [] (String): Contiene tutti i percorsi dei file su cui sono presenti le parole.

I casi limite trovati nell’analisi del progetto sono stati tutti considerati e gestiti attraverso il lancio

delle eccezione dove possibile o attraverso messaggi all’utente.

Page 6: Virginio Desktop   Analisi

Raffinamento dell’algoritmo Indicizzazione

- Inizio

Indicazione della directory con i file da indicizzare (percorso tipo String)

o Indicizzazione dei file

Controllo se il percorso è una directory

Controllo se la directory non è vuota

Controllo se la directory contiene file txt o file html

o In caso negativo (in uno dei tre casi): lancio un eccezione

Fine del programma con messaggio di errore

o In caso affermativo (soddisfo le tre condizioni)

Apro i file contenuto nella cartella

Memorizzo ogni parola in un dizionario (indice tipo HashMap)

Salvo i dati in un file (Indice.txt tipo File documento di testo)

- Fine

Ricerca e visualizzazione

- Inizio

Tipo di scelta da effettuare nel menù principale

o Scelta della visualizzazione dell’indicizzazione

Scorre tutto il dizionario con le parole indicizzato precedentemente

Stampa ad uno ad uno tutte le parole fintanto che il dizionario non è arrivato

alla fine

Ritorna al menù principale

o Scelta della Ricerca binaria OR

Chiede in input la stringa di parole da ricercare (separate da “,”)

Divide la stringa di parole in singole parole (frase.split)

Controlla per ogni parola data in input se ci sono le corrispondenti parole nel

dizionario

• In caso negativo

o Torna al menù principale con una segnalazione di errore

• In caso affermativo

o Per ogni parola trovata memorizza in un vettore dei risultati il

percorso del file in cui si trova la parola fintanto che non

Page 7: Virginio Desktop   Analisi

scorre tutto il dizionario (risultatoRicerca tipo

ArrayList<String>)

o Stampa il vettore dei risultati a video

o Ritorna al menù principale

o Scelta della Ricerca binaria AND

Chiede in input la stringa di parole da ricercare (separate da “,”)

Divide la stringa di parole in singole parole (frase.split)

Trova per la prima parola le occorrenza nel dizionario

• In caso negativo

o Torna al menù principale con segnalazione di errore

• In caso affermativo

o Mette nel vettore dei risultati i percorsi dei file in cui la parola

occorre

Continua con le altre parole da ricercare nel caso ci fossero

• In caso negativo

o Stampa a video i risultati della ricerca e torna al menù

principale

• In caso affermativo

o Continua con la ricerca della parola nel dizionario

In caso negativo

• Torna al menù principale con una segnalazione

di errore

In caso affermativo

• Controlla se il percorso della parola è uguale ad

uno (o più) percorsi che si trova nel vettore dei

risultati

o In caso negativo

Torna al menù principale con

segnalazione di errore

o In caso affermativo

Aggiorna il vettore dei risultati

(Si continua come per il punto precedente fino al termine delle parole da

ricercare date in input)

Stampa a video del vettore dei risultati

Page 8: Virginio Desktop   Analisi

Torna al menù principale

o Scelta di uscita dal programma

Termina il programma chiudendo il file Indice.txt

- Fine

Codifica La codifica avverrà in linguaggio java per permettere una maggiore portabilità del software.

Per il codice leggere l’allegato cartaceo o digitale.

Test Il programma è stato analizzato con il metodo della scatola nera.

Page 9: Virginio Desktop   Analisi

CASI TIPICI:

(i dati immessi sono tutti validi)

I file contengono le seguenti parole: file1 : tutto a posto nn preoccuparti file2 : ciao come va la il lo la Mostra indicizzazione :

Page 10: Virginio Desktop   Analisi

Effettuare la ricerca OR

Effettuare la ricerca AND

Page 11: Virginio Desktop   Analisi

CASI LIMITE: Il percorso della directory inserito non è valido perché la cartella specificata non esiste:

I

Il percorso della directory inserito non è valido perché la cartella specificata è in realtà un file di

testo o un file html

Page 12: Virginio Desktop   Analisi

Il percorso della directory inserito non contiene file txt o html o non vi e' nessun file al suo interno

La parola o le parole cercate non sono presenti in nessun file