Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    34

    Codice java per estrarre le parole più usate (parole chiave,keyword) da un testo!!!!

    Senza offesa....ma mamma mia chiedevo solo un aiuto (in riferimento alla risposta del moderatore al post http://forum.html.it/forum/showthrea...readid=1076434) ...purtroppo non tutti sono cosi esperti di programmazione java come sicuramente sarai te...devi considerare anche questo!!!Io non sono per niente esperto...ma siccome mi serviva assolutamente questa funzione in java per un lavoro che sto svolgendo (molto più ampio che una "semplice",anche se non per me,funzione...) ho provato a chiedere aiuto!!!

    Comunque hai ragione,mi ero espresso male nella domanda,non volevo codice bello e pronto per non fare il lavoro....mi serviva solo per avere un idea su come scriverlo visto che è una parte minuscola di un lavoro molto più ampio che sto svolgendo....PERO' BASTAVA CHIEDERE UNA SPIEGAZIONE E NON CHIUDERE IL POST COME SE AVESSI CHIESTO EROINA GRATIS PER MIO FIGLIO DI 2 ANNI....comunque qui comandi tu e non posso dire niente!!!

    tornando alla mia domanda passata : "Ciao a tutti,qualcuno saprebbe dirmi se e dove è possibilie trovare codice scritto in java per creare un applicazione che analizzi un file di testo (in input) e che riesca a trovare le parole più usate nel testo?(ad esempio le 3 parole più presenti che quindi saranno le parole chiave del testo)....cioè le parole che ricorrono più volte all'interno del testo!!!"

    il codice l'ho fatto soltanto che ho un problema : sperando che qualcuno possa aiutarmi il codice è questo


    import java.io.*;
    import java.util.*;

    class Counter implements Comparable {
    private String word;
    private int count;
    public Counter(String word) {
    this.word = word;
    count = 1;
    }
    public void increment() { count++; }
    public String toString() {
    return "\n" + word + " [" + count + "]";
    }
    public boolean equals(Object obj) {
    return obj instanceof Counter &&
    ((Counter)obj).word.equals(word);
    }
    public int hashCode() {
    return word.hashCode();
    }
    public int compareTo(Object o) {
    return word.compareTo(((Counter)o).word);
    }
    }

    class CounterSet extends AbstractSet {
    private Map set = new TreeMap();
    public void addOrIncrement(String s) {
    Counter c = new Counter(s);
    if (set.containsKey(c))
    ((Counter)set.get(c)).increment();
    else
    set.put(c, c);
    }
    public Iterator iterator() {
    return set.keySet().iterator();
    }
    public int size() {
    return set.size();
    }
    public String toString() {
    return set.keySet().toString();
    }
    }

    class WordCount {
    private FileReader file;
    private StreamTokenizer st;
    private CounterSet counts = new CounterSet();
    WordCount(String filename)
    throws FileNotFoundException {
    try {
    file = new FileReader(filename);
    st = new StreamTokenizer(
    new BufferedReader(file));
    st.ordinaryChar('.');
    st.ordinaryChar('-');
    st.lowerCaseMode(true);

    } catch(FileNotFoundException e) {
    System.err.println(
    "Could not open " + filename);
    throw e;
    }
    }
    void cleanup() {
    try {
    file.close();
    } catch(IOException e) {
    System.err.println(
    "ERRORE IO file.close()");
    }
    }
    void countWords() {
    try {
    while(st.nextToken() !=
    StreamTokenizer.TT_EOF) {
    String s = "a";
    switch(st.ttype) {
    case StreamTokenizer.TT_EOL:
    s = new String("EOL");
    break;

    case StreamTokenizer.TT_NUMBER:
    // s = Double.toString(st.nval);
    break;

    case StreamTokenizer.TT_WORD:
    s = st.sval;
    break;
    default:
    s = String.valueOf((char)st.ttype);
    }

    if(s.length() > 3)
    counts.addOrIncrement(s);
    }
    } catch(IOException e) {
    System.err.println(
    "ERRORE IO st.nextToken()");
    }
    }
    public Iterator iterator() {
    return counts.iterator();
    }
    public String toString() {
    return counts.toString();
    }
    }

    public class KeyWordExtractor {
    public static void main(String[] args)
    throws FileNotFoundException {
    for(int i = 0; i < args.length; i++){
    WordCount wc = new WordCount(args[i]);
    wc.countWords();
    System.out.println("WORD = " + wc);
    wc.cleanup();
    }
    }
    }

    Questo codice mi stampa in output tutte le parole (sopra i 3 caratteri) presenti nel file con il numero di volte che compaiono....ma io avrei bisogno che mi fornisca solo le 3 parole chiave più usate nel testo....per esempio in un file di testo (scrivo parole a caso giusto per rendere l'idea) "java funzione java file java funzione java ciao file funzione ciao java file java funzione" invece che fare come farebbe adesso,cioè scrivermi in output WORD = [ciao[2] , file[3] , funzione[4] , java[6]] avrei bisogno che mi salvasse in un array (o in qualsiasi altro contenitore) le parole "file" "funzione" "java" che saranno le parole chiave del testo visto che ricorrono più frequentemente............

    sicuramente manca giusto una piccola parte di codice...ma è un pò che ci provo e non riesco proprio a farlo...

    Se qualcuno potesse aiutarmi...

    grazie mille.Ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Codice java per estrarre le parole più usate (parole chiave,keyword) da un testo!!!!

    Originariamente inviato da giugy
    Senza offesa....ma mamma mia chiedevo solo un aiuto (in riferimento alla risposta del moderatore al post http://forum.html.it/forum/showthrea...readid=1076434) ...purtroppo non tutti sono cosi esperti di programmazione java come sicuramente sarai te...devi considerare anche questo!!!Io non sono per niente esperto...ma siccome mi serviva assolutamente questa funzione in java per un lavoro che sto svolgendo (molto più ampio che una "semplice",anche se non per me,funzione...) ho provato a chiedere aiuto!!!
    Nessuna offesa.
    Devi però ammettere che la richiesta, così come era posta, non poteva che essere intesa che come richiesta di sviluppo di codice e non di aiuto.

    Comunque hai ragione,mi ero espresso male nella domanda,non volevo codice bello e pronto per non fare il lavoro....mi serviva solo per avere un idea su come scriverlo visto che è una parte minuscola di un lavoro molto più ampio che sto svolgendo....PERO' BASTAVA CHIEDERE UNA SPIEGAZIONE E NON CHIUDERE IL POST COME SE AVESSI CHIESTO EROINA GRATIS PER MIO FIGLIO DI 2 ANNI....comunque qui comandi tu e non posso dire niente!!!
    Nessuno mette in dubbio la tua buona fede, ma purtroppo capita sempre più spesso che utenti (nuovi per lo più) vengano su questo forum a richiedere codice già bello e pronto (magari per un esame universitario un po' ostico) e questo va contro il regolamento del forum stesso. A noi moderatori è stato dato mandato di chiudere queste discussioni e, nel caso la cosa si reiteri, di informare i nostri diretti superiori (eh già... non comando mica io qui! )

    Ad ogni modo, sono felice di sapere che non sei uno di quegli utenti citati sopra e ti auguro una buona permanenza su questo forum.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.