File Coverage

blib/lib/Algorithm/RankAggregate/BordaCount.pm
Criterion Covered Total %
statement 61 61 100.0
branch 10 14 71.4
condition 4 6 66.6
subroutine 9 9 100.0
pod 3 6 50.0
total 87 96 90.6


line stmt bran cond sub pod time code
1             package Algorithm::RankAggregate::BordaCount;
2              
3 10     10   8368 use strict;
  10         18  
  10         324  
4 10     10   47 use warnings;
  10         16  
  10         434  
5             our $VERSION = '0.0.3_00';
6              
7 10     10   49 use base qw/Algorithm::RankAggregate/;
  10         14  
  10         5386  
8              
9             sub get_bordacount_list {
10 42     42 0 76 my ($this, $ranked_list, $top_k_num) = @_;
11 42         51 my @bordacount_list;
12 42 100       111 $top_k_num = $#{$ranked_list} + 1 unless (defined $top_k_num);
  6         20  
13 42         59 foreach my $rank_num (@{$ranked_list}) {
  42         77  
14 186         189 my $score = 0;
15 186 100 66     719 if (($rank_num > 0) && ($rank_num <= $top_k_num)) {
16 138         175 $score = $top_k_num - $rank_num + 1;
17             }
18 186         308 push @bordacount_list, $score;
19             }
20 42         150 return \@bordacount_list;
21             }
22              
23             sub get_bordacount_lists_list {
24 9     9 0 34 my ($this, $ranked_lists_list, $top_k_num) = @_;
25 9         24 my @lists_list = ();
26 9         23 my $i = 0;
27 9         15 foreach my $rank_list (@{$ranked_lists_list}) {
  9         25  
28 33         106 my $bordacount_list = $this->get_bordacount_list($rank_list, $top_k_num);
29 33         69 push @lists_list, $bordacount_list;
30             }
31 9         42 return \@lists_list;
32             }
33              
34             sub get_bordacount_result {
35 7     7 0 12 my ($this, $bordacount_lists_list) = @_;
36 7         18 my @lists_list = ();
37 7         26 for (my $i = 0; $i <= $#{$bordacount_lists_list->[0]}; $i++) {
  36         94  
38 29         32 my $result = 0;
39 29         51 for (my $j = 0; $j <= $#{$bordacount_lists_list}; $j++) {
  140         258  
40 111         158 $result = $result + $bordacount_lists_list->[$j]->[$i];
41             }
42 29         56 push @lists_list, $result;
43             }
44 7         34 return \@lists_list;
45             }
46              
47             sub aggregate_rank_to_count {
48 7     7 1 23 my ($this, $ranked_lists_list, $top_k_num) = @_;
49 7         14 my @result = ();
50 7         47 my $bordacount_lists_list = $this->get_bordacount_lists_list($ranked_lists_list, $top_k_num);
51 7 100 66     121 if ((exists $this->{weight}) && (exists $this->{weight}->[0])) {
52 6         60 $bordacount_lists_list = $this->get_weighted_count_lists_list($bordacount_lists_list);
53             }
54 7 50       22 @result = @{$this->get_bordacount_result($bordacount_lists_list)} if (@{$bordacount_lists_list});
  7         46  
  7         29  
55 7         35 return \@result;
56             }
57              
58             sub aggregate_score_to_count {
59 3     3 1 11 my ($this, $score_lists_list, $top_k_num) = @_;
60 3         5 my @result = ();
61 3         23 my $ranked_lists_list = $this->get_ranked_lists_list($score_lists_list);
62 3 50       5 @result = @{$this->aggregate_rank_to_count($ranked_lists_list, $top_k_num)} if (@{$ranked_lists_list});
  3         11  
  3         19  
63 3         11 return \@result;
64              
65             }
66              
67             sub aggregate {
68 2     2 1 11 my ($this, $score_lists_list, $top_k_num) = @_;
69 2         4 my @result = ();
70 2 50       14 return \@result unless ($this->validate_lists_list($score_lists_list));
71 2 50       3 @result = @{$this->aggregate_score_to_count($score_lists_list, $top_k_num)} if (@{$score_lists_list});
  2         7  
  2         7  
72 2         8 return \@result;
73             }
74              
75             1;
76             __END__