Análise Estatística/Frequência em Strings

Olá amigos, é o seguinte:

Tô fazendo no mestrado uma disciplina de recuperação e filtragem de informações e preciso desenvolver o sistema desse tipo em java.

Preciso de uma classe e/ou método que dada uma string com centenas de palavras, seja possível obter as N palavras mais frequentes nessa string.

Só está faltando isso pra terminar o sistema. Lembre-se, preciso de um código pra isso e não nenhum sistema pronto. ok?

Abraço a todos. 8O

Eu postei este código faz umas semanas atrás.

import java.util.*;

class TabelaFrequencias2 {
    /** 
    * Note que várias palavras podem ter a mesma freqüência. Portanto,
    * não podemos usar um Map &lt Integer, String &gt e sim um
    * Map &lt Integer, Set &lt String &gt &gt. 
    */
    public static void main(String[] args) {
        String texto = "Considerai os lírios, como eles crescem; não trabalham, nem " 
        + " fiam; e digo-vos que nem ainda Salomão, em toda a sua glória, se vestiu "
        + " como um deles. E, se Deus assim veste a erva que hoje está no campo e "
        + " amanhã é lançada no forno, quanto mais a vós, homens de pouca fé? Não "
        + " pergunteis, pois, que haveis de comer, ou que haveis de beber, e não "
        + " andeis inquietos.";
        String[] palavras = texto.split ("[ ,;.:?-]+");
        Map &lt String, Integer &gt tabFreq = new TreeMap &lt String, Integer &gt ();
        for (int i = 0; i &lt palavras.length; ++i) {
            String palavra = palavras [i];
            Integer freq = tabFreq.get (palavra);
            if (freq == null) {
                freq = 0;
            }
            tabFreq.put (palavra, freq + 1);
        }
        System.out.println ("Ordenando (ordem decrescente) por freqüências");
        Map &lt Integer, Set &lt String &gt &gt tabInv = new TreeMap &lt Integer, Set &lt String &gt &gt (new Comparator <Integer>() {
            public int compare (Integer i1, Integer i2) {
                return -i1.compareTo (i2);
            }
        });
        // Invertendo a tabela 
        for (Map.Entry &lt String, Integer &gt tab : tabFreq.entrySet()) {
            Integer freq = tab.getValue();
            String palavra = tab.getKey();
            if (!tabInv.containsKey (freq)) {
                tabInv.put (freq, new TreeSet &lt String &gt ());
            }
            tabInv.get (freq).add (palavra);
        }
        for (Integer freq : tabInv.keySet()) {
            System.out.println ("Palavras com a freqüência " + freq);
            System.out.println ("    " + tabInv.get (freq));
        }
    }
}

O código acima supõe que “Não” != “não”; se a sua análise requer que “Não” == “não”, então você deve adaptar um pouco (talvez converter todas as palavras para minúsculas).

Valeu pelo código…acho q vai ser muito útil.

Aproveitando, alguem conhece outra forma de fazer análise de frequencia?

[]'s