SlideShare a Scribd company logo
1 of 11
Download to read offline
VIRGINIO.CLASS
/**
 * Questo programma gestisce un piccolo motore di ricerca denominato
 * Virginio Desktop. Esso indicizza una lista di parole presente
 * nei file di una cartella e, a seconda della scelta fatta in un
 * apposito menù, può eseguire una ricerca booleana per OR o per AND
 * ed esegue automaticamente l'indicizzazione delle parole nei file
 * nella directory indicata in input dall'utente.
 */


// Importazione del pacchetto di utilità delle libreria di Java

import   java.io.FileNotFoundException;
import   java.io.FileOutputStream;
import   java.io.IOException;
import   java.io.ObjectOutput;
import   java.io.ObjectOutputStream;
import   java.util.*;


/**
 * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio
 * Classe principale del programma
 */
public class Virginio
{
      /**
       * Metodo per richiamare la stampa dell'indice
       * @param indice dizionario HashMap contenente le parole indicizzate
       */
      private static void stampaIndice(HashMap<String, Parola> indice)
      {
            //il parametro valori sara' uguale al valore presente nel dizionario in quella
posizione
            Collection<Parola> valori = indice.values();
            //ciclo for che serve per visualizzare tutte le parole con i relativi file in
cui è presente la parola
            for(Iterator<Parola> iterator = valori.iterator(); iterator.hasNext();)
            {
                  Parola parola = iterator.next();
                  System.out.println("nparola: " + parola.getParola());
                  ArrayList<String> paths = parola.getPath();
                  for(int i = 0; i < paths.size(); i++)
                  {
                        //Stampa di tutte le paths
                        System.out.println("t" + paths.get(i));
                  }
            }
      }

     /**
      * Metodo per richiamare la stampa dei risultati delle ricerche
      * @param risultati ArrayList che contiene le paths
     */
     private static void stampaRisultati(ArrayList<String> risultati)
     {
           System.out.println("La ricerca ha restituito i seguenti files:");
           //Fintanto che l'ArrayList non e' finito ...
           for(int i = 0; i < risultati.size(); i++)
           {
//... stampa i risultati nella posizione indicata dall'indice i
                  System.out.println((i+1) + ") " + risultati.get(i));
            }
       }

       /**
        * Main della classe Virginio
        */
       public static void main(String[] args)
       {
             //Costruzione dell'input
             Scanner in = new Scanner(System.in);
             //dare in input la cartella da indicizzare
             System.out.println("Inserisci il percorso della cartella");
             String percorso = in.next();
             //Inizio dell'indicizzazione
             System.out.println("Indicizzazione in corso");
             //HashMap dichiarato "null"
             HashMap<String,Parola> indice = null;
             //Provare e se il programma prosegue verso un errore cattura l'eccezione
             try
             {
                   //Costruiamo un indicizzatore dando come parametro il percorso
                   Indicizzazione indexer = new Indicizzazione(percorso);
                   //Mettiamo nel dizionario il risultato dell'indicizzazione
                   indice = indexer.indicizza();
                   System.out.println("Indicizzazione completata e salvata sul file.");
                   //Salva l'indicizzazione su un file di nome indice
                   FileOutputStream f = new FileOutputStream("Indice.txt");
                   ObjectOutput s = new ObjectOutputStream(f);
                   s.writeObject(indice);
                   //Costruzione del nuovo oggetto Ricerca dando in input l'HashMap indice
                   Ricerca ricerca = new Ricerca(indice);
                   // Costruzione del menù con le varie scelte
                   boolean done = false;
                   while (!done)
                   {

                        System.out.println("**********************************************
                        **************");
                        System.out.println("*
*");
                        System.out.println("*                  VIRGINIO DESKTOP
*");
                        System.out.println("*               by BaelSoft Production
*");
                        System.out.println("*
*");
                        System.out.println("**********************************************
                  **************");
                        System.out.println("
");
                        System.out.println("
__________________________________________________________ ");
                        System.out.println("|
|");
                        System.out.println("| Cosa vuoi fare?
                  |");
                        System.out.println("| Inserisci: 1 per eseguire la visualizzazione
dell'indicizzazione |");
                        System.out.println("|            2 per eseguire la ricerca
booleana OR                 |");
System.out.println("|            3 per eseguire la ricerca
booleana AND                 |");
                         System.out.println("|
|");
                         System.out.println("|            Q (quit) per uscire
|");
                       System.out.println("|_____________________________________________
                 _____________|");
                       String scelta =in.next();

                         //Caso di scelta = "1"
                         if (scelta.equals("1"))
                         {
                               //Visualizzazione dell'indicizzazione
                               stampaIndice(indice);

                         }

                         //Caso di scelta = "2"
                         else if (scelta.equals("2"))
                         {
                               //Inserimento delle parole da ricercare
                               System.out.print("Inserisci le parole da ricercare separate
da ' , ': ");
                              String frase = in.next();
                              //Effettuare la ricerca OR e inserire i risultati
nell'ArrayList omonima
                              ArrayList<String> risultati = ricerca.ricercaOR(frase);
                              //Caso in cui non ha trovato nessun risultato
                              if(risultati == null)
                              {
                                    System.out.println("Le parole cercate non hanno
prodotto risultati");
                              }

                              //Stampa dei risultati
                              else
                                    stampaRisultati(risultati);
                         }

                         //Caso di scelta = "3"
                         else if (scelta.equals("3"))
                         {
                               //Inserimento delle parole da ricercare
                               System.out.print("Inserisci le parole da ricercare separate
da ',': ");
                              String frase = in.next();
                              //Effettuare la ricerca OR e inserire i risultati
nell'ArrayList omonima
                              ArrayList<String> risultati = ricerca.ricercaAND(frase);
                              //Caso in cui non ha trovato nessun risultato
                              if(risultati == null)
                              {
                                    System.out.println("Le parole cercate non hanno
prodotto risultati");
                              }

                              //Stampa dei risultati
                              else
                                    stampaRisultati(risultati);                       }
                         }
                         //Caso di scelta = "q"
                         else if (scelta.equalsIgnoreCase("q"))
{
                         //Terminazione del programma
                         s.close();
                         System.out.println("Programma Terminato");
                         done = true;
                   }

                   //Caso in cui la scelta non sia una delle proposte precedenti
                   else
                   {
                         //Segnalazione di errore
                         System.out.println("Scelta sbagliata. Riprova per favore");
                   }
              }
        }
        //Cattura l'eccezione in caso il file non è trovato
        catch (FileNotFoundException e)
        {
              System.out.println(e.getMessage());
        }
        //Cattura l'eccezione in caso ci sono errori di Input/Output
        catch (IOException e)
        {
              System.out.println(e.getMessage());
        }

    }
}
INDICIZZAZIONE.CLASS

//Importazione dei vari pacchetti
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

/**
 * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio
 * Classe Indicizzazione
 */
public class Indicizzazione
{
      /**
       * Costruttore con lancio dell'eccezione in caso di file non trovato
       * @param per percorso della directory da indicizzare
       * @throws FileNotFoundException eccezione lanciata in caso di directory non trovata
       */
      public Indicizzazione(String per) throws FileNotFoundException
      {
            percorso = new File(per);
            //Casi limite:
            //1 - se il percorso esiste
            if(!percorso.exists())
                  throw new FileNotFoundException("La cartella non esiste");
            //2 - se il percorso e' una directory
            if (!percorso.isDirectory())
                  throw new FileNotFoundException("Il percorso inserito non e' una
directory");
            //3 - se la directory contiene file txt o html
            files = percorso.listFiles(new ValidFileFilter());
            if(files.length == 0)
                  throw new IllegalArgumentException("La cartella non contiene file txt o
html");
            //in questo caso si accettano solo file txt o file html

     }

     /**
      * Creazione di un indicizzatore/dizionario di tipo HashMap
      * @return ritorna l'hashMap indicizzato
      * @throws IOException lancio dell'eccezione in caso di errori nei dati
      */
     public HashMap<String, Parola> indicizza() throws IOException
     {
           //costruzione dell'indice
           HashMap<String, Parola> indice = new HashMap<String, Parola>();
           //scorre tutta la directory fino a che non controlla tutti i file
           for (int i = 0; i < files.length; i++)
           {
                 System.out.println("indicizzazione parole del file: " + files[i]);
                 File file = files[i];
                 //FileReader fr = new FileReader(file);
                 Scanner in = new Scanner(file);
                 while (in.hasNext())
                 {
                       String parola = in.next();
                       //Verifica se la parola è una stopWord.
                       if(!Ricerca.isStopword(parola))
{
                            //Verifica che la parola sia gia presente nell'indice
                            if (indice.containsKey(parola))
                            {
                                  Parola word = (Parola) indice.get(parola);
                                  //Recupera la lista dei path che contengono la parola
                                  ArrayList<String> listaPath = word.getPath();
                                  if(!listaPath.contains(file.getCanonicalPath()))
                                        word.AggiungiFile(file.getCanonicalPath());

                            }
                            else
                            {
                                   //Inseriamo la nuova parola nel dizionario
                                   Parola word = new Parola(parola,
file.getCanonicalPath());
                                   indice.put(parola, word);
                            }
                       }

                 }

           }
           return indice;

     }

     //Parametri della classe Indicizzazione
     private File[] files;
     private File percorso;
}
RICERCA.CLASS

//Importazione delle librerie necessarie per la classe
import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio
 * Classe Ricerca
 */
public class Ricerca
{
      /**
       * Costruzione delle stopwords
       */
      public static String[] stopwords =
      {
            "il","lo","la","i","gli","le",
            "di","a","da","in","con","su","per","tra","fra",
            "non","no","si",
            "della","delle","dei","degli",
            "alla","alle","ai","agli",
            "dalla","dalle","dai","dagli",
            "sulla","sulle","sui","sugli",
            ".",",",":",";","_","<",">","^","?","'",")","=","(","/",""",""
      };

     /**
      * Costruttore della classe Ricerca
      */
     public Ricerca(HashMap<String, Parola> index)
     {
           indice = index;
     }

      /**
       * Metodo per la ricerca OR
       * @param frase stringa di caratteri per la ricerca data in input
       * @return restituisce "null" se non trova risultati altrimenti il risultato della
ricerca
       */
      public ArrayList<String> ricercaOR(String frase)
      {
            //Divide la frase data in parole separate da " , "
            String[] parole = frase.split(",");
            ArrayList<String> risultatoRicerca = new ArrayList<String>();
            //Inizio della ricerca OR
            for(int i = 0; i < parole.length; i++)
            {
                  String parola = parole[i];
                  //Controllo se la parola è una stopword
                  if(!isStopword(parola))
                  {
                        //Controllo se l'HashMap contiene la parola
                        if(indice.containsKey(parola))
                        {
                              Parola word = (Parola) indice.get(parola);
                              addPathsOR(risultatoRicerca,word.getPath());
                        }
                  }
            }
            //Restituisco "null" se il risultato della ricerca è vuoto
if(risultatoRicerca.size() == 0)
                 return null;
           //altrimenti restituisco il risultato della ricerca
           return risultatoRicerca;
     }

      /**
       * Questo metodo aggiunge (per la ricerca OR) i percorsi dei file al risultato della
ricerca
       * @param risultatoRicerca risultato delle parole cercate
       * @param paths percorso del file in cui si trova la parola ricercata
       */
      private void addPathsOR(ArrayList<String> risultatoRicerca, ArrayList<String> paths)
      {
            for(int i = 0; i < paths.size(); i++)
            {
                  String path = paths.get(i);
                  if(!risultatoRicerca.contains(path))
                        risultatoRicerca.add(path);
            }
      }

      /**
       * Metodo per la ricerca AND
        * @param frase stringa di caratteri per la ricerca data in input
       * @return restituisce "null" se non trova risultati altrimenti il risultato della
ricerca
       */
      public ArrayList<String> ricercaAND(String frase)
      {
             String[] parole = frase.split(",");
             ArrayList<String> risultatoRicerca = new ArrayList<String>();
             boolean trovato = false;
             int i;
             for(i = 0; i < parole.length && !trovato; i++)
             {
                   String parola = parole[i];
                   if(!isStopword(parola))
                   {
                         if(indice.containsKey(parola))
                         {
                               Parola word = (Parola) indice.get(parola);
                               risultatoRicerca.addAll(word.getPath());
                               trovato = true;
                         }
                         else
                         /**
                          * nella ricerca AND tutte le parole devono essere contenute
                          * almeno in un file. Se questo nn avviene, il risultato della
ricerca
                          * è "null", cioè la ricerca fallisce.
                          */
                               return null;
                   }
             }

           for(; i < parole.length; i++)
           {
                 String parola = parole[i];
                 if(!isStopword(parola))
                 {
                       if(indice.containsKey(parola))
                       {
Parola word = (Parola) indice.get(parola);
                             addPathsAND(risultatoRicerca, word.getPath());
                       }
                       else
                       /**
                        * nella ricerca AND tutte le parole devono essere contenute
                        * almeno in un file. Se questo nn avviene, il risultato della
ricerca
                        * è "null", cioè la ricerca fallisce.
                        */
                             return null;
                 }
                 if(risultatoRicerca.size() == 0)
                       return null;
           }
           return risultatoRicerca;
     }

      /**
       * Questo metodo aggiunge (per la ricerca AND) i percorsi dei file al risultato
della ricerca
       * @param risultatoRicerca risultato delle parole cercate
       * @param paths percorso del file in cui si trova la parola ricercata
       */
      private void addPathsAND(ArrayList<String> risultatoRicerca, ArrayList<String>
paths)
      {
            for (int i=0; i < risultatoRicerca.size();)
            {
                  if (!paths.contains(risultatoRicerca.get(i)))
                        risultatoRicerca.remove(i);
                  else
                        i++;
            }
      }


     /**
      * dichiarazione metodo privato per le stopwords che controlla
      * se la stringa contiene stopwords o se non le contiene.
      * In caso affermativa esso restituisce un valore boolean true
      * che gli dice che la parola fa parte del vettore stopwords
      * altrimenti continua la ricerca fino alla fine del vettore e non
      * restituisce solo
      * @param parola
      * @return
      */
     public static boolean isStopword(String parola)
     {
           boolean trovato = false;
           for(int j= 0; j < stopwords.length && !trovato; j++)
           {
                 if(parola.equalsIgnoreCase(stopwords[j]))
                       trovato = true;
           }
           return trovato;
     }

     //Parametri della classe Ricerca
     private HashMap<String, Parola> indice;

}
VALIDFILEFILTER.CLASS

//Importazione dei vari pacchetti
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;


/**
 * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio
 * Costruzione della classe per verificare se i file sono file txt o html
 */
public class ValidFileFilter implements FileFilter
{
      public boolean accept(File file)
      {
            //Tentare le istruzioni senno restituisce un'eccezione
            try
            {
                  //Controlla se i file sono txt o html
                  if(file.getCanonicalPath().endsWith("txt") ||
file.getCanonicalPath().endsWith("htm") || file.getCanonicalPath().endsWith("html"))
                        return true;
            }

            //Cattura l'eccezione in caso l'Input o l'Output sono errati (o non trova file
di quel genere)
            catch (IOException e)
            {
                  e.printStackTrace();
            }
            //Senno' ritorna falso
            return false;

     }

}
PAROLA.CLASS

//importazione dei pacchetti che serviranno alla classe
import java.io.Serializable;
import java.util.ArrayList;

/**
 * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio
 * Costruzione della classe Parola con serializzazione (per il salvataggio nel file)
 */
public class Parola implements Serializable
{
      // Costruttori della classe Parola
      public Parola(String parola)
      {
            this.parola = parola;
      }

     /**
      * @param parola stringa dei file
      * @param filePath percorso in cui si trova la stringa
      */
     public Parola(String parola, String filePath)
     {
           this(parola);
           files = new ArrayList<String>();
           files.add(filePath);
     }

     //Metodi della classe Parola
     public ArrayList<String> getPath()
     {
           return files;
     }

     /**
      * Aggiunge il percorso del file
      * @param filePath percorso del file
      */
     public void AggiungiFile(String filePath)
     {
           files.add(filePath);
     }

     /**
      * Questo metodo serve a restituire parola
      * @return ridà ciò che contiene parola
      */
     public String getParola()
     {
           return parola;
     }

     //Parametri della classe Parola
     public String parola;
     private ArrayList<String> files;
}

More Related Content

Viewers also liked

Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, ProgettoAlartzero
 
Ingegneria Del Software Schedule, Analisi
Ingegneria Del Software   Schedule, AnalisiIngegneria Del Software   Schedule, Analisi
Ingegneria Del Software Schedule, AnalisiAlartzero
 
Riprogettazione Dellinterfaccia
Riprogettazione DellinterfacciaRiprogettazione Dellinterfaccia
Riprogettazione DellinterfacciaAlartzero
 
Programmazione Doc Gest, Analisi
Programmazione   Doc Gest, AnalisiProgrammazione   Doc Gest, Analisi
Programmazione Doc Gest, AnalisiAlartzero
 
Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di StudioAlartzero
 
Ingegneria Del Software Schedule, Test
Ingegneria Del Software   Schedule, TestIngegneria Del Software   Schedule, Test
Ingegneria Del Software Schedule, TestAlartzero
 
Analisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione DellinterazioneAnalisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione DellinterazioneAlartzero
 
Valutazione Dellinterazione
Valutazione DellinterazioneValutazione Dellinterazione
Valutazione DellinterazioneAlartzero
 
Programmazione per il web - WebWord
Programmazione per il web - WebWordProgrammazione per il web - WebWord
Programmazione per il web - WebWordAlartzero
 

Viewers also liked (9)

Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, Progetto
 
Ingegneria Del Software Schedule, Analisi
Ingegneria Del Software   Schedule, AnalisiIngegneria Del Software   Schedule, Analisi
Ingegneria Del Software Schedule, Analisi
 
Riprogettazione Dellinterfaccia
Riprogettazione DellinterfacciaRiprogettazione Dellinterfaccia
Riprogettazione Dellinterfaccia
 
Programmazione Doc Gest, Analisi
Programmazione   Doc Gest, AnalisiProgrammazione   Doc Gest, Analisi
Programmazione Doc Gest, Analisi
 
Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di Studio
 
Ingegneria Del Software Schedule, Test
Ingegneria Del Software   Schedule, TestIngegneria Del Software   Schedule, Test
Ingegneria Del Software Schedule, Test
 
Analisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione DellinterazioneAnalisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione Dellinterazione
 
Valutazione Dellinterazione
Valutazione DellinterazioneValutazione Dellinterazione
Valutazione Dellinterazione
 
Programmazione per il web - WebWord
Programmazione per il web - WebWordProgrammazione per il web - WebWord
Programmazione per il web - WebWord
 

Similar to Virginio Desktop Codifica

20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]Francesco Cirillo
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQueryXeDotNet
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeSergio Porcu
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)FLT.lab
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla PiazzaFabiano Dalla Piazza
 
EcmaScript 6 & 7
EcmaScript 6 & 7EcmaScript 6 & 7
EcmaScript 6 & 7BENTOSA
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mockyuroller
 
Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewFrancesco Sciuti
 

Similar to Virginio Desktop Codifica (12)

20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
 
Sqlite And Java
Sqlite And JavaSqlite And Java
Sqlite And Java
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Ese01 java
Ese01 javaEse01 java
Ese01 java
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQuery
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, code
 
iContract
iContractiContract
iContract
 
Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)Corso Iphone in 48h (parte 2)
Corso Iphone in 48h (parte 2)
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla Piazza
 
EcmaScript 6 & 7
EcmaScript 6 & 7EcmaScript 6 & 7
EcmaScript 6 & 7
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mock
 
Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript Overview
 

More from Alartzero

Economia Dellinnovazione Caso Di Studio Nintendo
Economia Dellinnovazione   Caso Di Studio   NintendoEconomia Dellinnovazione   Caso Di Studio   Nintendo
Economia Dellinnovazione Caso Di Studio NintendoAlartzero
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N AriAlartzero
 
Algoritmi E Strutture Dati Liste
Algoritmi E Strutture Dati   ListeAlgoritmi E Strutture Dati   Liste
Algoritmi E Strutture Dati ListeAlartzero
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop AnalisiAlartzero
 
Algoritmi E Strutture Dati Code
Algoritmi E Strutture Dati   CodeAlgoritmi E Strutture Dati   Code
Algoritmi E Strutture Dati CodeAlartzero
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati PileAlartzero
 

More from Alartzero (6)

Economia Dellinnovazione Caso Di Studio Nintendo
Economia Dellinnovazione   Caso Di Studio   NintendoEconomia Dellinnovazione   Caso Di Studio   Nintendo
Economia Dellinnovazione Caso Di Studio Nintendo
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N Ari
 
Algoritmi E Strutture Dati Liste
Algoritmi E Strutture Dati   ListeAlgoritmi E Strutture Dati   Liste
Algoritmi E Strutture Dati Liste
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop Analisi
 
Algoritmi E Strutture Dati Code
Algoritmi E Strutture Dati   CodeAlgoritmi E Strutture Dati   Code
Algoritmi E Strutture Dati Code
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati Pile
 

Virginio Desktop Codifica

  • 1. VIRGINIO.CLASS /** * Questo programma gestisce un piccolo motore di ricerca denominato * Virginio Desktop. Esso indicizza una lista di parole presente * nei file di una cartella e, a seconda della scelta fatta in un * apposito menù, può eseguire una ricerca booleana per OR o per AND * ed esegue automaticamente l'indicizzazione delle parole nei file * nella directory indicata in input dall'utente. */ // Importazione del pacchetto di utilità delle libreria di Java import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.util.*; /** * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio * Classe principale del programma */ public class Virginio { /** * Metodo per richiamare la stampa dell'indice * @param indice dizionario HashMap contenente le parole indicizzate */ private static void stampaIndice(HashMap<String, Parola> indice) { //il parametro valori sara' uguale al valore presente nel dizionario in quella posizione Collection<Parola> valori = indice.values(); //ciclo for che serve per visualizzare tutte le parole con i relativi file in cui è presente la parola for(Iterator<Parola> iterator = valori.iterator(); iterator.hasNext();) { Parola parola = iterator.next(); System.out.println("nparola: " + parola.getParola()); ArrayList<String> paths = parola.getPath(); for(int i = 0; i < paths.size(); i++) { //Stampa di tutte le paths System.out.println("t" + paths.get(i)); } } } /** * Metodo per richiamare la stampa dei risultati delle ricerche * @param risultati ArrayList che contiene le paths */ private static void stampaRisultati(ArrayList<String> risultati) { System.out.println("La ricerca ha restituito i seguenti files:"); //Fintanto che l'ArrayList non e' finito ... for(int i = 0; i < risultati.size(); i++) {
  • 2. //... stampa i risultati nella posizione indicata dall'indice i System.out.println((i+1) + ") " + risultati.get(i)); } } /** * Main della classe Virginio */ public static void main(String[] args) { //Costruzione dell'input Scanner in = new Scanner(System.in); //dare in input la cartella da indicizzare System.out.println("Inserisci il percorso della cartella"); String percorso = in.next(); //Inizio dell'indicizzazione System.out.println("Indicizzazione in corso"); //HashMap dichiarato "null" HashMap<String,Parola> indice = null; //Provare e se il programma prosegue verso un errore cattura l'eccezione try { //Costruiamo un indicizzatore dando come parametro il percorso Indicizzazione indexer = new Indicizzazione(percorso); //Mettiamo nel dizionario il risultato dell'indicizzazione indice = indexer.indicizza(); System.out.println("Indicizzazione completata e salvata sul file."); //Salva l'indicizzazione su un file di nome indice FileOutputStream f = new FileOutputStream("Indice.txt"); ObjectOutput s = new ObjectOutputStream(f); s.writeObject(indice); //Costruzione del nuovo oggetto Ricerca dando in input l'HashMap indice Ricerca ricerca = new Ricerca(indice); // Costruzione del menù con le varie scelte boolean done = false; while (!done) { System.out.println("********************************************** **************"); System.out.println("* *"); System.out.println("* VIRGINIO DESKTOP *"); System.out.println("* by BaelSoft Production *"); System.out.println("* *"); System.out.println("********************************************** **************"); System.out.println(" "); System.out.println(" __________________________________________________________ "); System.out.println("| |"); System.out.println("| Cosa vuoi fare? |"); System.out.println("| Inserisci: 1 per eseguire la visualizzazione dell'indicizzazione |"); System.out.println("| 2 per eseguire la ricerca booleana OR |");
  • 3. System.out.println("| 3 per eseguire la ricerca booleana AND |"); System.out.println("| |"); System.out.println("| Q (quit) per uscire |"); System.out.println("|_____________________________________________ _____________|"); String scelta =in.next(); //Caso di scelta = "1" if (scelta.equals("1")) { //Visualizzazione dell'indicizzazione stampaIndice(indice); } //Caso di scelta = "2" else if (scelta.equals("2")) { //Inserimento delle parole da ricercare System.out.print("Inserisci le parole da ricercare separate da ' , ': "); String frase = in.next(); //Effettuare la ricerca OR e inserire i risultati nell'ArrayList omonima ArrayList<String> risultati = ricerca.ricercaOR(frase); //Caso in cui non ha trovato nessun risultato if(risultati == null) { System.out.println("Le parole cercate non hanno prodotto risultati"); } //Stampa dei risultati else stampaRisultati(risultati); } //Caso di scelta = "3" else if (scelta.equals("3")) { //Inserimento delle parole da ricercare System.out.print("Inserisci le parole da ricercare separate da ',': "); String frase = in.next(); //Effettuare la ricerca OR e inserire i risultati nell'ArrayList omonima ArrayList<String> risultati = ricerca.ricercaAND(frase); //Caso in cui non ha trovato nessun risultato if(risultati == null) { System.out.println("Le parole cercate non hanno prodotto risultati"); } //Stampa dei risultati else stampaRisultati(risultati); } } //Caso di scelta = "q" else if (scelta.equalsIgnoreCase("q"))
  • 4. { //Terminazione del programma s.close(); System.out.println("Programma Terminato"); done = true; } //Caso in cui la scelta non sia una delle proposte precedenti else { //Segnalazione di errore System.out.println("Scelta sbagliata. Riprova per favore"); } } } //Cattura l'eccezione in caso il file non è trovato catch (FileNotFoundException e) { System.out.println(e.getMessage()); } //Cattura l'eccezione in caso ci sono errori di Input/Output catch (IOException e) { System.out.println(e.getMessage()); } } }
  • 5. INDICIZZAZIONE.CLASS //Importazione dei vari pacchetti import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; /** * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio * Classe Indicizzazione */ public class Indicizzazione { /** * Costruttore con lancio dell'eccezione in caso di file non trovato * @param per percorso della directory da indicizzare * @throws FileNotFoundException eccezione lanciata in caso di directory non trovata */ public Indicizzazione(String per) throws FileNotFoundException { percorso = new File(per); //Casi limite: //1 - se il percorso esiste if(!percorso.exists()) throw new FileNotFoundException("La cartella non esiste"); //2 - se il percorso e' una directory if (!percorso.isDirectory()) throw new FileNotFoundException("Il percorso inserito non e' una directory"); //3 - se la directory contiene file txt o html files = percorso.listFiles(new ValidFileFilter()); if(files.length == 0) throw new IllegalArgumentException("La cartella non contiene file txt o html"); //in questo caso si accettano solo file txt o file html } /** * Creazione di un indicizzatore/dizionario di tipo HashMap * @return ritorna l'hashMap indicizzato * @throws IOException lancio dell'eccezione in caso di errori nei dati */ public HashMap<String, Parola> indicizza() throws IOException { //costruzione dell'indice HashMap<String, Parola> indice = new HashMap<String, Parola>(); //scorre tutta la directory fino a che non controlla tutti i file for (int i = 0; i < files.length; i++) { System.out.println("indicizzazione parole del file: " + files[i]); File file = files[i]; //FileReader fr = new FileReader(file); Scanner in = new Scanner(file); while (in.hasNext()) { String parola = in.next(); //Verifica se la parola è una stopWord. if(!Ricerca.isStopword(parola))
  • 6. { //Verifica che la parola sia gia presente nell'indice if (indice.containsKey(parola)) { Parola word = (Parola) indice.get(parola); //Recupera la lista dei path che contengono la parola ArrayList<String> listaPath = word.getPath(); if(!listaPath.contains(file.getCanonicalPath())) word.AggiungiFile(file.getCanonicalPath()); } else { //Inseriamo la nuova parola nel dizionario Parola word = new Parola(parola, file.getCanonicalPath()); indice.put(parola, word); } } } } return indice; } //Parametri della classe Indicizzazione private File[] files; private File percorso; }
  • 7. RICERCA.CLASS //Importazione delle librerie necessarie per la classe import java.util.ArrayList; import java.util.HashMap; /** * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio * Classe Ricerca */ public class Ricerca { /** * Costruzione delle stopwords */ public static String[] stopwords = { "il","lo","la","i","gli","le", "di","a","da","in","con","su","per","tra","fra", "non","no","si", "della","delle","dei","degli", "alla","alle","ai","agli", "dalla","dalle","dai","dagli", "sulla","sulle","sui","sugli", ".",",",":",";","_","<",">","^","?","'",")","=","(","/",""","" }; /** * Costruttore della classe Ricerca */ public Ricerca(HashMap<String, Parola> index) { indice = index; } /** * Metodo per la ricerca OR * @param frase stringa di caratteri per la ricerca data in input * @return restituisce "null" se non trova risultati altrimenti il risultato della ricerca */ public ArrayList<String> ricercaOR(String frase) { //Divide la frase data in parole separate da " , " String[] parole = frase.split(","); ArrayList<String> risultatoRicerca = new ArrayList<String>(); //Inizio della ricerca OR for(int i = 0; i < parole.length; i++) { String parola = parole[i]; //Controllo se la parola è una stopword if(!isStopword(parola)) { //Controllo se l'HashMap contiene la parola if(indice.containsKey(parola)) { Parola word = (Parola) indice.get(parola); addPathsOR(risultatoRicerca,word.getPath()); } } } //Restituisco "null" se il risultato della ricerca è vuoto
  • 8. if(risultatoRicerca.size() == 0) return null; //altrimenti restituisco il risultato della ricerca return risultatoRicerca; } /** * Questo metodo aggiunge (per la ricerca OR) i percorsi dei file al risultato della ricerca * @param risultatoRicerca risultato delle parole cercate * @param paths percorso del file in cui si trova la parola ricercata */ private void addPathsOR(ArrayList<String> risultatoRicerca, ArrayList<String> paths) { for(int i = 0; i < paths.size(); i++) { String path = paths.get(i); if(!risultatoRicerca.contains(path)) risultatoRicerca.add(path); } } /** * Metodo per la ricerca AND * @param frase stringa di caratteri per la ricerca data in input * @return restituisce "null" se non trova risultati altrimenti il risultato della ricerca */ public ArrayList<String> ricercaAND(String frase) { String[] parole = frase.split(","); ArrayList<String> risultatoRicerca = new ArrayList<String>(); boolean trovato = false; int i; for(i = 0; i < parole.length && !trovato; i++) { String parola = parole[i]; if(!isStopword(parola)) { if(indice.containsKey(parola)) { Parola word = (Parola) indice.get(parola); risultatoRicerca.addAll(word.getPath()); trovato = true; } else /** * nella ricerca AND tutte le parole devono essere contenute * almeno in un file. Se questo nn avviene, il risultato della ricerca * è "null", cioè la ricerca fallisce. */ return null; } } for(; i < parole.length; i++) { String parola = parole[i]; if(!isStopword(parola)) { if(indice.containsKey(parola)) {
  • 9. Parola word = (Parola) indice.get(parola); addPathsAND(risultatoRicerca, word.getPath()); } else /** * nella ricerca AND tutte le parole devono essere contenute * almeno in un file. Se questo nn avviene, il risultato della ricerca * è "null", cioè la ricerca fallisce. */ return null; } if(risultatoRicerca.size() == 0) return null; } return risultatoRicerca; } /** * Questo metodo aggiunge (per la ricerca AND) i percorsi dei file al risultato della ricerca * @param risultatoRicerca risultato delle parole cercate * @param paths percorso del file in cui si trova la parola ricercata */ private void addPathsAND(ArrayList<String> risultatoRicerca, ArrayList<String> paths) { for (int i=0; i < risultatoRicerca.size();) { if (!paths.contains(risultatoRicerca.get(i))) risultatoRicerca.remove(i); else i++; } } /** * dichiarazione metodo privato per le stopwords che controlla * se la stringa contiene stopwords o se non le contiene. * In caso affermativa esso restituisce un valore boolean true * che gli dice che la parola fa parte del vettore stopwords * altrimenti continua la ricerca fino alla fine del vettore e non * restituisce solo * @param parola * @return */ public static boolean isStopword(String parola) { boolean trovato = false; for(int j= 0; j < stopwords.length && !trovato; j++) { if(parola.equalsIgnoreCase(stopwords[j])) trovato = true; } return trovato; } //Parametri della classe Ricerca private HashMap<String, Parola> indice; }
  • 10. VALIDFILEFILTER.CLASS //Importazione dei vari pacchetti import java.io.File; import java.io.FileFilter; import java.io.IOException; /** * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio * Costruzione della classe per verificare se i file sono file txt o html */ public class ValidFileFilter implements FileFilter { public boolean accept(File file) { //Tentare le istruzioni senno restituisce un'eccezione try { //Controlla se i file sono txt o html if(file.getCanonicalPath().endsWith("txt") || file.getCanonicalPath().endsWith("htm") || file.getCanonicalPath().endsWith("html")) return true; } //Cattura l'eccezione in caso l'Input o l'Output sono errati (o non trova file di quel genere) catch (IOException e) { e.printStackTrace(); } //Senno' ritorna falso return false; } }
  • 11. PAROLA.CLASS //importazione dei pacchetti che serviranno alla classe import java.io.Serializable; import java.util.ArrayList; /** * @author BaelSoft Production®: Centrone Sergio e Gadaleta Fabio * Costruzione della classe Parola con serializzazione (per il salvataggio nel file) */ public class Parola implements Serializable { // Costruttori della classe Parola public Parola(String parola) { this.parola = parola; } /** * @param parola stringa dei file * @param filePath percorso in cui si trova la stringa */ public Parola(String parola, String filePath) { this(parola); files = new ArrayList<String>(); files.add(filePath); } //Metodi della classe Parola public ArrayList<String> getPath() { return files; } /** * Aggiunge il percorso del file * @param filePath percorso del file */ public void AggiungiFile(String filePath) { files.add(filePath); } /** * Questo metodo serve a restituire parola * @return ridà ciò che contiene parola */ public String getParola() { return parola; } //Parametri della classe Parola public String parola; private ArrayList<String> files; }