Virginio Desktop Analisi

266 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
266
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Virginio Desktop Analisi

  1. 1. A.A 2005/2006 C.D.L ITPSAlunni Centrone Sergio, Gadaleta FabioGruppo BaelSoft Production Corso di Studio : ProgrammazioneAnalisi, 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 personaleVIRGINIO Desktop 1. indicizzazione delle parole presenti nei file contenuti in una cartella indicata dallutente (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. AnalisiPer una realizzazione efficiente del progetto sono stati chiesti al committente alcuni esempidell’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 1come percorso file1va percorso file1 percorso file 2tutto percorso file 2bene percorso file 2
  2. 2. nel caso in cui nel file siano presenti articoli, preposizioni o simboli vari di punteggiatura, sarannoconsiderati 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 ifile della directory specificata. La differenza tra le ricerche e che una restituisce la posizione di tuttii file che contengano almeno una delle parole inserite (se viene chiesto di ricercare più di unaparola), mentre la seconda, restituisce tutte le posizioni dei file che contengono tutte le paroleinserite.Esempio fornito dal committente :Ricerca orInserisci la stringa da ricercare : come ,vaLa stringa è presente nel file : percorso file 1 percorso file 2Ricerca andInserisci la stringa da ricercare : come, vaLa 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 ricercareI dati di output saranno • Il file indice del micro motore • I risultati delle ricerche effettuatePer 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 vuotiRiguardo la parola da cercare • La parola o le parole cercate non sono presenti in nessun fileRiguardo altri aspetti:
  3. 3. • All’inizio dell’esecuzione del programma il file di indice non esiste; viene creato dopo l’indicizzazione • Nel file ci sono 2 parole ugualiProgettazionePer 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 ORDa questo schema sono state poi individuate le classi base per l’organizzazione del programma: • Classe Virgilio Desktop • Classe Indicizzazione • Classe Ricerca BooleanaQueste sono legate tra loro tramite le seguenti relazioni: Parole[ ] Virginio Desktop Indicizzazione (main) Percorso File Stringa da cercare File Trovati [ ] Parole [ ] Ricerca Booleana
  4. 4. Il main avrà il compito di interfacciarsi con l’utente, quindi presenterà un piccolo menù da cuiscegliere 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 specificataDa qui saranno inoltre lanciate tutte le stampe a video (indicizzazione e ricerca ) e gestite tutte leeccezioni 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 nelladirectory specificata.Per ogni file controllerà se la parola letta sarà gia contenuta nell’ hashmap di appoggio usato percontenere le parole lette.Se non lo è aggiungerà la nuova parola con il percorso del file, altrimenti aggiungerà solo ilpercorso.E previsto anche il caso in cui ci siano più parole uguali nello stesso file e viene gestito prendendoin 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 ditempo. Infatti con essa non è necessario passare in rassegna un eventuale vettore usato per questoscopo 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 nelhashmap presente in memoria sono presenti file che contengono almeno una delle parole digitate.Se non viene trovata alcuna parola viene restituito il valore null.
  5. 5. Nella ricerca AND vengono trovati tutti i file che contengono tutte le parole digitate anche qui nelcaso 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 lanciodelle eccezione dove possibile o attraverso messaggi all’utente.
  6. 6. Raffinamento dell’algoritmoIndicizzazione - 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) - FineRicerca 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
  7. 7. scorre tutto il dizionario (risultatoRicerca tipo ArrayList<String>) o Stampa il vettore dei risultati a video o Ritorna al menù principaleo 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
  8. 8. Torna al menù principale o Scelta di uscita dal programma Termina il programma chiudendo il file Indice.txt - FineCodificaLa codifica avverrà in linguaggio java per permettere una maggiore portabilità del software.Per il codice leggere l’allegato cartaceo o digitale.TestIl programma è stato analizzato con il metodo della scatola nera.
  9. 9. CASI TIPICI:(i dati immessi sono tutti validi)I file contengono le seguenti parole:file1 : tutto a posto nn preoccupartifile2 : ciao come va la il lo laMostra indicizzazione :
  10. 10. Effettuare la ricerca OREffettuare la ricerca AND
  11. 11. CASI LIMITE:Il percorso della directory inserito non è valido perché la cartella specificata non esiste: IIl percorso della directory inserito non è valido perché la cartella specificata è in realtà un file ditesto o un file html
  12. 12. Il percorso della directory inserito non contiene file txt o html o non vi e nessun file al suo internoLa parola o le parole cercate non sono presenti in nessun file

×