Linhas Similares

1. Linhas Similares

Gustavo Gavazzoni
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);
}

}

}