Open danigpam opened 7 years ago
Resolvi o problema trocando o for encadeado por uma chamada do método contains(ttermo) da lista. Ficou assim:
private List<TTermo> getTermos(List<String> lista){
List<TTermo> listaTermos = new ArrayList<>();
for(String t: lista){
TTermo termo = new TTermo();
termo.setTermo(t);
if (listaTermos.contains(termo)) {
listaTermos.get(listaTermos.indexOf(termo)).inc();
} else {
listaTermos.add(termo);
}
}
return listaTermos;
}
Também precisei criar o método equals na classe TTermo. Agora cada termo aparece em um objeto apenas, mas com a contagem correta.
term: SOA frequency: 7 term: IT frequency: 6
legal...
brother. Na época fiz pra minha dissertação de mestrado... não me preocupei muito com otimização, precisava validar a hipótese. E funciona muito bem.. ja para recomendação baseada em conteúdo de arquivo puramente textuais.
Como os dois FOR encadeados percorrem a mesma lista de Strings, cada termo que aparece mais de uma vez não só tem seu contador incrementado, mas também são criados N objetos repetidos
https://github.com/nonilton/TF-IDF/blob/master/src/srm/Documentos/TProcessaDocumentos.java#L57
O resultado é algo como:
term: SOA frequency: 7 term: SOA frequency: 7 term: SOA frequency: 7 term: SOA frequency: 7 term: SOA frequency: 7 term: SOA frequency: 7 term: SOA frequency: 7
O ideal é que o objeto TTermo apareça uma vez só, mas com o contador apontando para o total 7.