
Ggavazzo
(usa Ubuntu)
Enviado em 02/06/2017 - 12:42h
Estava com problema de agrupar linhas similares, então consegui o pacote Similarity e Cosine.
Na tela ele mostra os, mas na saida do arquivo ele esta imprimindo apenas a última linha.
Gostaria que a saída fossem as linhas que tiverem acima de 98 e retiradas do arquivo entrada. Desde já agradeço a atenção.
#!/usr/bin/perl
use strict;
use Set::Similarity::Cosine;
my $cosine = Set::Similarity::Cosine->new;
open(DATA,"FILE.txt") or die " Arquivo Ausente";
my @data;
my $linha;
while (<DATA>)
{
@data = sort(@data);
$linha = $_."\n";
push @data, {map { $_ => 1} split };
}
for my $i (0 .. $#data-1)
{
for my $j ($i + 1 .. $#data)
{
my $similar = $cosine->similarity($data[$i],$data[$j]);
$similar =~s/0\.([0-9]{2}).+/\1/i;
if ($similar > 98)
{
#print "A linha $i Tem $similar similar com a linha $j $linha\n";
print "A linha $i Tem $similar similar com a linha $j\n";
open (DATA, ">>FILE-OK.txt");
print DATA "A linha $i Tem $similar similar com a linha $j $linha";
close(DATA);
}
}
}