[Cascavel-pm] Comparando duas variáveis alfanuméricas

Marco A P D'Andrade mdacwb em gmail.com
Sexta Setembro 21 19:22:19 PDT 2007


Saudação,

O desafio é interessante, porém valem algumas considerações...

A algum tempo rolou na lista uma discussão sobre comparação por
similaridade, um tema muito interessante, porém nao tive tempo para
acompanhar (e só lembrei agora ;).

O desempenho depende muito da forma que o código é implementado, em
especial no tratamento dos dados. O melhor é utilizar módulos como
Benchmark para aferir alternativas.

Sim, hashs são mais lentos que arrays

Mas expressões regulares muito repetitivas são mais ainda (em especial
se não forem pré-compiladas).


Sugiro que poste uma fração de seu código, para que o pessoal possa opinar.

Mas, para ser o primeiro a dar os pitacos, segue:

1. Gerar um dicionario de palavras
2. Remontar os parágrafos baseados nestes códigos
  %dict = ();
  $id=0;


  foreach my $line ( @p_Source ) {

     $words=0;
     foreach my $word ( split(/\W+/, lc($line) ) ) {
        if ( $_ && !exists($dict{$word}) ) {
           $dict{$word}=++$id;
        }
        push(@p, $dict{$word});
        $words++;
     }

3. Comparar os paragrafos de memoria que têm chance de serem
similares, dentro da regra de 3 palavras - Ex: não comparar paragrafos
de 5 palavras com aqueles de 9.

4. Palavras podem se repetir em um paragrafo, vale a pena contabilizar isto?

5. Estudar o algoritmo do DIFF pode ser útil, pois podem haver 3
palavras seguidas de diferença ...

  }

Bem, seguem meus 5 minutos de viagem ;)


Sds,
Marco Antonio

Em 21/09/07, loggos em loggos.com.br<loggos em loggos.com.br> escreveu:
>
>
> Saudações a todos.
> Uma questão teórica, mas muito interessante.
> Tenho um array de 900 posições, que armazena 1 parágrafo de texto (1 linha)
> em cada posição.
> Preciso comparar estes textos entre si para saber quais são semelhantes
> (pois considero que uma diferença de até 3 palavras significa que os textos
> são iguais).
>
> O algoritmo que utilizo sorteia o array e faz as comparações usando regex e
> arrays auxiliares.
>
> A pergunta é: existe um meio mais rápido de rodar este tipo de job ?
>
> Fiz uma pesquisa sobre Hashes e , segundo alguns autores, eles são mais
> lentos (internamente ao PERL).
> Atualmente estou estudando Pack/Unpack.
>
> Então, o uso de arrays com regex seria o recurso mais veloz ?
>
> Abraço a todos.
> Roberto
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
>


Mais detalhes sobre a lista de discussão Cascavel-pm