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 < Integer, String > e sim um
* Map < Integer, Set < String > >.
*/
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 < String, Integer > tabFreq = new TreeMap < String, Integer > ();
for (int i = 0; i < 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 < Integer, Set < String > > tabInv = new TreeMap < Integer, Set < String > > (new Comparator <Integer>() {
public int compare (Integer i1, Integer i2) {
return -i1.compareTo (i2);
}
});
// Invertendo a tabela
for (Map.Entry < String, Integer > tab : tabFreq.entrySet()) {
Integer freq = tab.getValue();
String palavra = tab.getKey();
if (!tabInv.containsKey (freq)) {
tabInv.put (freq, new TreeSet < String > ());
}
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