Virginio Desktop Codifica

498 views
440 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
498
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Virginio Desktop Codifica

  1. 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 lindicizzazione delle parole nei file * nella directory indicata in input dallutente. */// Importazione del pacchetto di utilità delle libreria di Javaimport 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 dellindice * @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 quellaposizione Collection<Parola> valori = indice.values(); //ciclo for che serve per visualizzare tutte le parole con i relativi file incui è 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 lArrayList non e finito ... for(int i = 0; i < risultati.size(); i++) {
  2. 2. //... stampa i risultati nella posizione indicata dallindice i System.out.println((i+1) + ") " + risultati.get(i)); } } /** * Main della classe Virginio */ public static void main(String[] args) { //Costruzione dellinput 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 dellindicizzazione System.out.println("Indicizzazione in corso"); //HashMap dichiarato "null" HashMap<String,Parola> indice = null; //Provare e se il programma prosegue verso un errore cattura leccezione try { //Costruiamo un indicizzatore dando come parametro il percorso Indicizzazione indexer = new Indicizzazione(percorso); //Mettiamo nel dizionario il risultato dellindicizzazione indice = indexer.indicizza(); System.out.println("Indicizzazione completata e salvata sul file."); //Salva lindicizzazione 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 lHashMap 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 visualizzazionedellindicizzazione |"); System.out.println("| 2 per eseguire la ricercabooleana OR |");
  3. 3. System.out.println("| 3 per eseguire la ricercabooleana 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 dellindicizzazione stampaIndice(indice); } //Caso di scelta = "2" else if (scelta.equals("2")) { //Inserimento delle parole da ricercare System.out.print("Inserisci le parole da ricercare separateda , : "); String frase = in.next(); //Effettuare la ricerca OR e inserire i risultatinellArrayList 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 hannoprodotto 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 separateda ,: "); String frase = in.next(); //Effettuare la ricerca OR e inserire i risultatinellArrayList 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 hannoprodotto risultati"); } //Stampa dei risultati else stampaRisultati(risultati); } } //Caso di scelta = "q" else if (scelta.equalsIgnoreCase("q"))
  4. 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 leccezione in caso il file non è trovato catch (FileNotFoundException e) { System.out.println(e.getMessage()); } //Cattura leccezione in caso ci sono errori di Input/Output catch (IOException e) { System.out.println(e.getMessage()); } }}
  5. 5. INDICIZZAZIONE.CLASS//Importazione dei vari pacchettiimport 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 delleccezione 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 unadirectory"); //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 ohtml"); //in questo caso si accettano solo file txt o file html } /** * Creazione di un indicizzatore/dizionario di tipo HashMap * @return ritorna lhashMap indicizzato * @throws IOException lancio delleccezione in caso di errori nei dati */ public HashMap<String, Parola> indicizza() throws IOException { //costruzione dellindice 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. 6. { //Verifica che la parola sia gia presente nellindice 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. 7. RICERCA.CLASS//Importazione delle librerie necessarie per la classeimport 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 dellaricerca */ 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 lHashMap 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. 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 dellaricerca * @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 dellaricerca */ 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 dellaricerca * è "null", cioè la ricerca fallisce. */ return null; } } for(; i < parole.length; i++) { String parola = parole[i]; if(!isStopword(parola)) { if(indice.containsKey(parola)) {
  9. 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 dellaricerca * è "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 risultatodella 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. 10. VALIDFILEFILTER.CLASS//Importazione dei vari pacchettiimport 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 uneccezione 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 leccezione in caso lInput o lOutput sono errati (o non trova filedi quel genere) catch (IOException e) { e.printStackTrace(); } //Senno ritorna falso return false; }}
  11. 11. PAROLA.CLASS//importazione dei pacchetti che serviranno alla classeimport 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;}

×