Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21

    Estrarre parola per parola da un file

    Ciao a tutti scusate se vi assillo a tutti con le mie domande... ma ho un altro problema..
    Devo riuscire a prendere parola per parola da un file rtf. io dovrei fare così:
    codice:
    public class prova {
    	final static int maxDim = 10000;
    	private String content = "";
    	private String token [];
    
    public void setContent(String newContent) {
    	this.content = newContent;
    }
    public String getContent() {
    	return content;
    }
    private String cleaner(String inputContent){
    	String output = null;
    	output=inputContent.replace(".", "");
    	output=output.replace(",", "");
    	output=output.replace(";", "");
    	output=output.replace(":", "");
    return output;
    
    }
    private String[] getToken(String output){
    token = output.split(" "); 
    return token;
    }
    	public static void main(String[] args) throws IOException {
    		 FileInputStream fstream = new FileInputStream("/Users/Users/Desktop/divina.rtf");
    		 DataInputStream in = new DataInputStream(fstream);
    		 prova bello=new prova();
             BufferedReader br = new BufferedReader(new InputStreamReader(in));
             String ciao1=br.readLine();
             System.out.println(ciao1);
             ciao1=bello.cleaner(ciao1);
             System.out.println(ciao1);
             
    		String ciao="ciao., bello";
    		
    		ciao=bello.cleaner(ciao);
    		System.out.println(ciao);
    }
    	
    }
    Come vedete dal codice cerco anche di "pulire" il testo da eventuali segni di punteggiatura. Il mio problema è questo. Se usa il metodo cleaner con una stringa fatta da me allora funziona, se invece la prende da una riga del file stampa cose orrende.... Come mai? dove ho sbagliato? Ho gestito male gli input? Grazie per la pazienza ragazzi.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Estrarre parola per parola da un file

    Originariamente inviato da ittaglia
    Come vedete dal codice cerco anche di "pulire" il testo da eventuali segni di punteggiatura.
    Il punto è che avresti un bel "lavoraccio" da fare. RTF è sì un file di testo ma contiene tutta una serie di marcatori per la formattazione.

    Se apro il WordPad di Windows e scrivo un RTF con la sola frase "Ciao, prova RTF", salvo e poi guardo il contenuto con un comune normale editor (notepad, edit, ecc...) si vede:

    codice:
    {\rtf1\ansi\ansicpg1252\deff0\deflang1040{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
    {\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 Ciao, prova RTF\par
    }
    Quindi è un bel lavoretto il togliere tutti i marcatori di formattazione!
    Hai considerato tutto questo?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21
    no non lo avevo considerato... quindi che formato mi consigli? Io ho un mac.
    Ho anche un altra domanda... ma quando importo il file (che è lunghissimo è la divina commedia) non me lo prende tutto ma solo una parte, come mai? è troppo grande? Come faccio a prenderlo tutto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ittaglia
    quindi che formato mi consigli? Io ho un mac.
    Ma non ho capito .... scegli tu il formato? Cioè è un esercizio didattico e ti hanno dato libertà di scelta? O no?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21
    Io in pratica devo creare un hash lineare di parole. E il professore ci ha detto di prendere delle parole da un testo grande ( come la divina commedia) e poi metterle in questo hash per farci dei test. Quindi forse è meglio il txt? E come mai non mi prende tutte le parole ma solo una parte? Grazie per l'aiuto

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ittaglia
    Io in pratica devo creare un hash lineare di parole. E il professore ci ha detto di prendere delle parole da un testo grande ( come la divina commedia) e poi metterle in questo hash per farci dei test. Quindi forse è meglio il txt? E come mai non mi prende tutte le parole ma solo una parte? Grazie per l'aiuto
    Sì, meglio se usi un file di testo "puro"! Se anche hai o ottieni da qualche parte un RTF di un libro, nessuno ti vieta di aprirlo con un editor RTF e salvarlo come testo "puro" (perdendo ovviamente la formattazione che comunque non ti serve/interessa).

    E per la questione della scansione, ti basta usare java.util.Scanner impostando come "delimitatore" oltre ai whitespace (che sono il default) anche virgole, punti, o quant'altro tu ritieni debba separare le parole.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21
    Scusa se ti rompo ancora, ma non ho mai utilizzato scanner.
    Per impostare i delimitatori faccio cosi?
    codice:
    Scanner in = new Scanner(file);
    	in.useDelimiter(" ");
    	in.useDelimiter(".");
    	in.useDelimiter(";");
    	in.useDelimiter(",");
    	in.useDelimiter(":");
    Giusto?
    Però per passargli il file come faccio?
    e poi per prendere la parola devo fare un ciclo con il comando
    codice:
    String parola = in.next();
    ?
    E come controllo per il ciclo cosa ci metto?
    codice:
    while(in.next()!=null)
    ?

    grazie mille per le risposte

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ittaglia
    Scusa se ti rompo ancora, ma non ho mai utilizzato scanner.
    Per impostare i delimitatori faccio cosi?
    codice:
    Scanner in = new Scanner(file);
    	in.useDelimiter(" ");
    	in.useDelimiter(".");
    	in.useDelimiter(";");
    	in.useDelimiter(",");
    	in.useDelimiter(":");
    Giusto?
    No, il delimitatore è solo una "espressione regolare" e come tale ha le sue regole.

    codice:
    in.useDelimiter("[\\s.;,:]+");
    È una "classe" di caratteri che contiene whitespace (spazio, tab, newline ecc...) più il punto ecc... mentre il + dopo [] indica che i caratteri (anche diversi) possono ripetersi più volte.

    Quindi un input "ciao...prova" i 3 punti sono trattati come un unico "delimitatore".

    Originariamente inviato da ittaglia
    Però per passargli il file come faccio?
    Dal costruttore, vedi quelli di Scanner.

    Originariamente inviato da ittaglia
    e poi per prendere la parola devo fare un ciclo con il comando
    codice:
    String parola = in.next();
    ?
    E come controllo per il ciclo cosa ci metto?
    codice:
    while(in.next()!=null)
    ?

    grazie mille per le risposte
    Scanner ha:

    boolean hasNext()

    Quindi "finché ne ha prendi il token".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21
    Se mi rispondi anche questa volta giuro che ti faccio santo subito e che non ti importuno più!!
    Ho seguito i tuoi consigli e ho fatto
    codice:
    Memoria memoriaPrincipale=new Memoria (2,1);
    		Scanner in=new Scanner(System.in);
    		System.out.print("Inserire parole da mettere in memoria ");
    		String parola;
    		in.useDelimiter("[\\s.;,:]+");
    		boolean s =true;
    		while(in.hashNext()){
    			memoriaPrincipale.inserimento(in.next());
    			
    	}
    		in.close();
    		memoriaPrincipale.stampa();
    
    }
    Per fare un pò di prove ho provato a mettere solo testo scritto a mano (poche parole 10 al massimo) e dopo premo invio. Il problema è che non mi esce mai dal ciclo... come mai? che ho fatto? sono andato in debug e hashNext() da errore e va in loop... che ho sbagliato?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ittaglia
    Il problema è che non mi esce mai dal ciclo... come mai? che ho fatto? sono andato in debug e hashNext() da errore e va in loop... che ho sbagliato?
    Il punto è che stai leggendo dallo "standard-input". E dallo standard-input è sempre in attesa ..... a meno che tu gli invii un "end-of-stream" che si può fare con una combinazione di tasti (dipende dal sistema).
    Su Windows CTRL+Z (questo è il EOF) e poi INVIO.

    Ma il punto, lo ripeto, è che per prova stai leggendo dal stdin. Se poi leggi da un file, al EOF ci arriva da solo, è ovvio che il file "finisce" ad un certo punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.