nonilton / TF-IDF

Implementação do algoritmo de recuperação de informação TF-IDF
1 stars 0 forks source link

São criados N objetos TTerms para N repetições do termo #1

Open danigpam opened 7 years ago

danigpam commented 7 years ago

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.

danigpam commented 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

nonilton commented 7 years ago

legal...

nonilton commented 7 years ago

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.