#!/usr/bin/perl -w
use strict;
use warnings;
use Getopt::Std;
use Data::Dumper ;
my $usage;
{
$usage = <<"_USAGE_";
_USAGE_
}
my %opts = ();
getopts('h',\%opts);
if ($opts{h}) {
print $usage;
exit;
}
my $prefix = shift;
my $input = shift;
my $input_bless=shift;
my $file = $prefix . ".txt";
if (-e $file) {
print STDERR "$file already exists, deleting previous version\n";
`rm -f $file`;
}
#my $debug=0; #Variabile di debug. Vale 1 in fase di debug, si usa per
open INPUT,$input;
open OUT,">$file";
my %matrice;
while () {
my ($rank, $nome, $relaz, $entry2, $score) = split();
push @{ $matrice{$nome} }, "${relaz}_$entry2,$rank,$score";
}
#print OUT Dumper \%matrice;
my %HOH;
while (my($name,$aref) = each %matrice ) {
for my $item (@$aref) {
my($prop,$rank,$score) = split(',',$item);
#push @ {$HOH{$name}{$rank}{$prop}}, "$score";
$HOH{$name}{$prop} = "${rank},$score"|| 0;
}
}
#print Dumper \%HOH;
open INPUTB,$input_bless;
#my %descriptions;
while ()
{
my ($u, $superclass,$rel,$v) = (split)[0,1,2,3];
my $conteggio=&calcolo($u,$v);
print OUT "$u"."\t".$rel."\t".$v."\t".$conteggio."\n";
}
close INPUTB;
close OUT;
sub calcolo{
my ($name1, $name2)=@_;
my $first = $HOH{$name1};
my $second = $HOH{$name2};
my ($rank_fv,$score_fv);
my $rank_v;
my $count_feat_fv;
# my ($prop,$rank, $score);
my $provaprec=0;
my $proptoexamine;
my $count_feat_rel;
my $precision;
my $rel_par;
my $num=0;
my $count_feat_fu;
my $apinc;
my $rank2=0;
#my ($prop2,$rank2, $score2);
my($prop,$score);
my $rank=0;
my $feature_found=0;
my $feat_finale;
my $rel_to_sum;
while (my($name1,$aref) = each %matrice ) {
$count_feat_fu++;
$num=0;
my $feat_rel=0;
for my $item (@$aref) {
($prop,$rank, $score) = split(',',$item);
# print "PROP: ".$prop."\n";
# if (exists $second->{$prop}){
#$count_feat_fv=0;
# $feat_rel++;
# print "FEAT REL: ".$feat_rel."\n";
# print "#####################################\n";
# print "ENTRATO\n";
#$proptoexamine=$prop;
#print "PROP TO EXAMINE: ".$proptoexamine."\n";
#$count_feat_rel++;
#print "RANK1: ".$rank."\n";
#$precision = $feat_rel/$rank;
#print "PRECISION: ".$precision."\n";
$feat_finale=&last_el_v($name2,$prop);
while (my($prop1,$rankscore1) = each %$second ){
($rank_fv,$score_fv) = split(',',$rankscore1);
if ($prop1 eq $prop){
$feature_found++;
print "PROP:".$prop."\n";
print "TROVATO\n";
$feat_rel++;
$rank2=$rank_fv;
print "RANK 2:".$rank2."\n";
print "RANK 1: ".$rank."\n";
print "COUNT FEAT FOUND: ".$feature_found."\n";
$precision=$feature_found/$rank;
print "PRECISION: ".$precision."\n";
$rel_par=$rank2/($feat_finale+1);
$rel_to_sum=1-($rel_par);
print "FEAT FINALE: ".$feat_finale."\n";
print "REL PAR: ".$rel_par."\n";
my $tosum= $precision*$rel_to_sum;
print "TO SUM: ".$tosum."\n";
$num =$num+$tosum;
print "NUM: ".$num."\n";
}
#}
# print "RANK 2:".$rank2."\n";
#
#print "*********************************\n";
#print "RELPAR".$rel_par."\n";
# my $rel_tot=1-$rel_par;
#print "REL TOT".$rel_tot."\n";
# print "*********************************\n";
# my $tosum=$precision*$rel_tot;
#print "TO SUM".$tosum."\n";
#print "NUM".$num."\n";
# $num=$num+$tosum;
#print "####################################\n";
# print "NUM: ".$num."\n";
# print "RANK: ".$rank."\n";
# print "APINC ".$apinc."\n";
}
# $feat_finale=$count_feat_fv;
#print "COUNT FEAT FV ".$count_feat_fv."\n";
}
print "RANK: ".$rank."\n";
$apinc=$num/$rank;
print "APINC: ".$apinc."\n";
# print "COUNT FEAT FV".$count_feat_fv."\n";
#print "APINC".$apinc."\n";
# print "COUNT FEAT U: ".$count_feat_fu."\n";
return $apinc;
}
# print $prop."\t".$rank."\t".$score."\n";
}
sub last_el_v{
my ($name2,$prop1)=@_;
#my $first = $HOH{$name1};
my $second = $HOH{$name2};
my $count_feat_fv;
while (my($prop1,$rankscore1) = each %$second ){
$count_feat_fv++;
}
return $count_feat_fv;
}