RePrec

 view release on metacpan or  search on metacpan

lib/RePrec/Searchresult.pm  view on Meta::CPAN

######################### -*- Mode: Perl -*- #########################
##
## File          : $RCSfile: Searchresult.pm,v $
##
## Author        : Norbert Goevert
## Created On    : Mon Nov  9 16:54:39 1998
## Last Modified : Time-stamp: <2000-12-20 16:49:12 goevert>
##
## Description   : 
##
## $Id: Searchresult.pm,v 1.28 2003/06/13 12:29:30 goevert Exp $
##
######################################################################


use strict;


## ###################################################################
## package RePrec::Searchresult
## ###################################################################

package RePrec::Searchresult;


use Carp;


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


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

sub new {

  my $proto = shift;
  my $class = ref($proto) || $proto;
  my $self  = {};
  my($qid, $results, @parms) = @_;

  bless $self => $class;

  if (defined $results) {
    if (ref $results eq 'ARRAY') {
      foreach (@{$results}) {
        croak "Wrong type of search result element"
          unless ref $_ eq 'ARRAY' and @$_ == 2;
      }
      $self->{results} = $results;
    } elsif (ref $results) {
      croak "Wrong reference type for results parameter";
    } else {
      $self->_init($results, @parms);
    }
  } else {
    croak "filename or array with searchresults needed";
  }

  $self->{qid} = $qid;

  return $self;
}


sub distribution {

  my $self = shift;
  my $judgements = shift;

  return $self->{distribution} if $self->{distribution};

  croak "wrong type of judgements parameter"
    unless ref $judgements and $judgements->isa('RePrec::Collection');

  $self->{numdocs} = $judgements->get_numdocs;
  $self->{rels} = 0;
  $self->{nrels} = 0;

  my @distribution;
  my($rels,     $nrels)     = (0, 0);
  my $rank;
  foreach (@{$self->{results}}) {
    $rank = $_->[0] unless $rank;
    if ($rank != $_->[0]) {
      push @distribution, [ $rels, $nrels ];
      $rank = $_->[0];
      ($rels, $nrels) = (0, 0);
    }
    if ($judgements->relevant($self->{qid}, $_->[1])) {
      $rels++;
      $self->{rels}++;
    } else {
      $nrels++;
      $self->{nrels}++;
    }
  }
  push @distribution, [ $rels, $nrels ];

  # create entry for very last rank if necessary
  if ($self->{numdocs} > $self->{rels} + $self->{nrels}) {
    my $rels_tot = $judgements->get_numrels($self->{qid});



( run in 0.644 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )