[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