#!/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; }