RePrec::PRR - compute precision values


RePrec documentation Contained in the RePrec distribution.

Index


Code Index:

NAME

Top

RePrec::PRR - compute precision values

SYNOPSIS

Top

  (see RePrec(3))

DESCRIPTION

Top

Computation of precision values according to the Probability of Relevance measure (user standpoint: stop at a given number of relevant documents retrieved).

METHODS

Top

Mainly see RePrec(3). The precision function gives an unique interpretation for each recall point. Precision can be computed for any recall point.

BUGS

Top

Yes. Please let me know!

SEE ALSO

Top

RePrec(3), perl(1).

AUTHOR

Top

Norbert Gövert <goevert@ls6.cs.uni-dortmund.de>


RePrec documentation Contained in the RePrec distribution.
######################### -*- Mode: Perl -*- #########################
##
## File          : $RCSfile: PRR.pm,v $
##
## Author        : Norbert Goevert
## Created On    : Wed Feb  5 11:19:51 1997
## Last Modified : Time-stamp: <2000-11-09 18:20:07 goevert>
##
## Description   : 
##
## $Id: PRR.pm,v 1.28 2003/06/13 12:29:30 goevert Exp $
##
######################################################################


use strict;



package RePrec::PRR;


use base qw(RePrec);


our $VERSION;
'$Name: release_0_32 $ 0_0' =~ /(\d+)[-_](\d+)/; $VERSION = sprintf '%d.%03d', $1, $2;


## public ############################################################

sub precision {

  my $self = shift;
  my @recall = @_;

  my @result;

  foreach my $recall (@recall) {

    return undef unless $recall and $recall > 0 and $recall <= 1;

    # at which number of relevant documents do we stop?
    my $NR = $recall * $self->{rels};

    # how many ranks do we have to examine?
    my $NRint = int $NR;
    $NRint++ if $NR > $NRint;
    my $rank = $self->{rels_rank}->[$NRint - 1];
    #print STDERR "$rank $recall $NR $NRint\n";

    # number of relevant docs within the previous ranks
    my $k = 0;
    $k = $self->{rank_rels_nrels}->[$rank - 1]->[0] if $rank;
    # number of non relevant docs within the previous ranks
    my $j = 0;
    $j = $self->{rank_rels_nrels}->[$rank - 1]->[1] if $rank;
    # number of non relevant docs within the current rank
    my $i = $self->{rank_rels_nrels}->[$rank]->[1] - $j;
    # number of relevant docs which must be retrieved from the current rank
    my $s = $NRint - $k;
    # number of relevant docs within the current rank
    my $r = $self->{rank_rels_nrels}->[$rank]->[0] - $k;

    # do the PRR formula
    push @result, [ $recall, $NR / ($NR + $j + $s * $i / ($r + 1.0)) ];
  }

  @result;
}


## private ###########################################################



1;
__END__