rubinelli 9 de abr. de 2009
thingol 9 de abr. de 2009
Usualmente você criaria um TreeMap < String, Integer>, onde a chave é a palavra, e o valor é a contagem.
import java.util.* ;
...
private SortedMap & lt ; String , Integer & gt ; frequencias = new TreeMap & lt ; String , Integer & gt ;();
...
public void inserirPalavra ( String palavra ) {
if ( frequencias . containsKey ( palavra )) {
frequencias . put ( palavra , frequencias . get ( palavra ) + 1 );
} else {
frequencias . put ( palavra , Integer . valueOf ( 0 ));
}
}
...
public void listarPalavrasPorOrdemAlfabetica () {
for ( Map . Entry & lt ; String , Integer & gt ; entry : frequencias ) {
System . out . println ( "Palavra " + entry . getKey () + " : " + entry . getValue () + " ocorrencia(s)" );
}
}
...
public void listarPalavrasPorFrequencia () {
SortedMap & lt ; Integer , List & lt ; String & gt ; & gt ; freqs = new TreeMap & lt ; Integer , List & lt ; String & gt ; & gt ; ( Collections . reverseOrder ());
for ( Map . Entry & lt ; String , Integer & gt ; entry : frequencias ) {
if ( freqs . containsKey ( entry . getValue ()) {
freqs . get ( entry . getValue ()). add ( entry . getKey ());
} else {
List & lt ; String & gt ; palavras = new ArrayList & lt ; String & gt ;();
palavras . add ( entry . getKey ());
freqs . put ( entry . getValue (), palavras );
}
}
for ( Map . Entry & lt ; String , Integer & gt ; entry : freqs ) {
System . out . println ( "A(s) seguinte(s) palavra(s) ocorreu(ram) " + entry . getKey () + " vez(es):" );
System . out . println ( entry . getValue ());
}
}
fabweb 10 de abr. de 2009
thingol:
Usualmente você criaria um TreeMap < String, Integer>, onde a chave é a palavra, e o valor é a contagem.
import java.util.*;
...
private SortedMap < String, Integer> frequencias = new TreeMap < String, Integer>();
...
public void inserirPalavra (String palavra) {
if (frequencias.containsKey (palavra)) {
frequencias.put (palavra, frequencias.get (palavra) + 1);
} else {
frequencias.put (palavra, Integer.valueOf (0));
}
}
...
public void listarPalavrasPorOrdemAlfabetica() {
for (Map.Entry < String, Integer> entry : frequencias) {
System.out.println ("Palavra " + entry.getKey() + " : " + entry.getValue() + " ocorrencia(s)" );
}
}
...
public void listarPalavrasPorFrequencia() {
SortedMap < Integer, List < String>> freqs = new TreeMap < Integer, List < String>> (Collections.reverseOrder());
for (Map.Entry < String,Integer> entry : frequencias) {
if (freqs.containsKey (entry.getValue()) {
freqs.get (entry.getValue()).add (entry.getKey());
} else {
List < String> palavras = new ArrayList < String>();
palavras.add (entry.getKey());
freqs.put (entry.getValue(), palavras);
}
}
for (Map.Entry < String, Integer> entry : freqs) {
System.out.println ("A(s) seguinte(s) palavra(s) ocorreu(ram) " + entry.getKey() + " vez(es):" );
System.out.println (entry.getValue());
}
}
Essas palavras estão em um arquivo txt. no código vc adiciona palavra por palavra, mas como eu faço para que ao invés de inserir palavra por palavra manualmente, ele consiga ler essas palavras do arquivo.txt e ai sim contar suas ocorrências. Por elas estarem em um arquivo.txt, pensei em atilizar alguma função, se é que exite em java, pois não encontrei ainda, que lei esse aquivo e armazena em um array. Aí vem o segundo problema que é como fazer para criar as listas de ocorrencia já que terei que comparar as plavras e armazenar esses numeros. Será que teria que cirar um classe contendo como atributos palavra e ocorrencia ?
Se tiver alguma outra forma de fazer isso que seja mais eficiente eu agradeço…
Desde já agradeço pela ajuda.
Um abraço!
marcobiscaro2112 14 de abr. de 2009
Baseando-se no código do thingol , podemos chegar a algo assim:
import java.io.File ;
import java.io.FileNotFoundException ;
import java.util.ArrayList ;
import java.util.Collections ;
import java.util.List ;
import java.util.Map ;
import java.util.Scanner ;
import java.util.SortedMap ;
import java.util.TreeMap ;
public class ContadorDePalavras {
private SortedMap < String , Integer > frequencias ;
private Scanner reader ;
public ContadorDePalavras ( File source ) throws FileNotFoundException {
reader = new Scanner ( source );
frequencias = new TreeMap < String , Integer > ();
while ( reader . hasNext ()) {
inserirPalavra ( reader . next ());
}
}
private void inserirPalavra ( String palavra ) {
if ( frequencias . containsKey ( palavra )) {
frequencias . put ( palavra , frequencias . get ( palavra ) + 1 );
} else {
frequencias . put ( palavra , Integer . valueOf ( 1 ));
}
}
public void listarPalavrasPorOrdemAlfabetica () {
for ( Map . Entry < String , Integer > entry : frequencias . entrySet ()) {
System . out . println ( "Palavra '" + entry . getKey () + "': "
+ entry . getValue () + " ocorrencia"
+ ( entry . getValue () > 1 ? "s" : "" ));
}
}
public void listarPalavrasPorFrequencia () {
SortedMap < Integer , List < String >> freqs = new TreeMap < Integer , List < String >> (
Collections . reverseOrder ());
for ( Map . Entry < String , Integer > entry : frequencias . entrySet ()) {
if ( freqs . containsKey ( entry . getValue ())) {
freqs . get ( entry . getValue ()). add ( entry . getKey ());
} else {
List < String > palavras = new ArrayList < String > ();
palavras . add ( entry . getKey ());
freqs . put ( entry . getValue (), palavras );
}
}
for ( Map . Entry < Integer , List < String >> entry : freqs . entrySet ()) {
if ( entry . getValue (). size () > 1 ) {
System . out . println ( "As seguintes palavras ocorreram "
+ entry . getKey () + " vez"
+ ( entry . getKey () > 1 ? "es" : "" ) + ":" );
} else {
System . out . println ( "A seguinte palavra ocorreu "
+ entry . getKey () + " vez"
+ ( entry . getKey () > 1 ? "es" : "" ) + ":" );
}
for ( String s : entry . getValue ()) {
System . out . println ( s );
}
}
}
}
E um método main para testar:
public static void main ( String [] args ) {
try {
new ContadorDePalavras ( new File ( "/etc/samba/smb.conf" ))
. listarPalavrasPorFrequencia ();
} catch ( FileNotFoundException e ) {
e . printStackTrace ();
}
}