Clair::MEAD

Summary


SummaryPackage variablesSynopsisDescriptionGeneral documentationMethods

SummaryTop
Clair::MEAD::Summary - access to a MEAD summary

Package variablesTop
No package variables defined.

Included modulesTop
Carp

SynopsisTop
    use Clair::MEAD::Wrapper;
# ...
my $summary = $wrapper->get_summary();
# Returns a sentence text only version print $summary->to_string() . "\n"; # Sets the order of the documents to be displayed. Defaults to # alphabetical. my @dids = $summary->get_dids(); my %order; my $i = 1; foreach my $did (reverse sort @dids) { $order{$did} = $i++; } $summary->set_doc_order(%order); my $size = $summary->size(); # iterate over the sentences foreach my $i (1 .. $size) { # maps text, did, sno, rsnt, par my %sent = $summary->get_sent($i); # longer version my $text = $summary->get_text($i); my $did = $summary->get_did($i); my $sno = $summary->get_sno($i); my $rsnt = $summary->get_rsnt($i); my $par = $summary->get_par($i); # maps feature names to scores my %feats = $summary->get_features($i); }

DescriptionTop
Clair::MEAD::Summary is used to access a MEAD summary produced by MEAD::Wrapper. It
includes methods to access the sentences, and their features.
Clair::MEAD::Summary should only be obtained from other objects and never directly
instantiated.
The order of the sentences in the document is determined by two things. First,
sentences from the same document are always in the same relative position as
they were in the original document. Second, since there is no natural ordering
of documents, there is a method that can be used to set the prefered document
order. The default order is determined by Perl's sort function applied to the
document ids.

MethodsTop
_cmpNo descriptionCode
_get_sent_attrNo descriptionCode
_sent_in_rangeNo descriptionCode
_sort_sentsNo descriptionCode
get_centroidNo descriptionCode
get_didNo descriptionCode
get_didsNo descriptionCode
get_featuresNo descriptionCode
get_orderNo descriptionCode
get_parNo descriptionCode
get_rsntNo descriptionCode
get_sentNo descriptionCode
get_snoNo descriptionCode
get_textNo descriptionCode
newNo descriptionCode
set_doc_orderNo descriptionCode
sizeNo descriptionCode
to_stringNo descriptionCode

Methods description


None available.

Methods code


_cmpdescriptionprevnextTop
sub _cmp {
    my $self = shift;
    my ($s1, $s2) = @_;
    my $did1 = $s1->{did};
    my $did2 = $s2->{did};
    my %order = %{ $self->{_doc_order} };

    if ($order{$did1} < $order{$did2}) {
        return -1;
    } elsif ($order{$did1} > $order{$did2}) {
        return 1;
    } else {
        return $s1->{sno} <=> $s2->{sno};
    }
}

_get_sent_attrdescriptionprevnextTop
sub _get_sent_attr {
    my $self = shift;
    my $i = shift;
    my $attr = shift;

    if ($self->_sent_in_range($i)) {
        my %sent = $self->get_sent($i);
        return $sent{$attr};
    } else {
        return undef;
    }
}

_sent_in_rangedescriptionprevnextTop
sub _sent_in_range {
    my $self = shift;
    my $i = shift;
    return ( $i <= $self->size() and $i > 0 );
}

_sort_sentsdescriptionprevnextTop
sub _sort_sents {
    my $self = shift;
    my @sents = @{ $self->{_sents} };
    my @sorted = sort { $self->_cmp($a, $b) } @sents;
    $self->{_sents} =\@ sorted;
}

get_centroiddescriptionprevnextTop
sub get_centroid {
    my $self = shift;
    return %{ $self->{_centroid} };
}

get_diddescriptionprevnextTop
sub get_did {
    my $self = shift;
    my $i = shift;
    return $self->_get_sent_attr($i, "did");
}

get_didsdescriptionprevnextTop
sub get_dids {
    my $self = shift;
    return @{ $self->{_dids} };
}

get_featuresdescriptionprevnextTop
sub get_features {
    my $self = shift;
    my @sents = @{ $self->{_sents} };
    my $i = shift;

    if ($self->_sent_in_range($i)) {
        return %{ $sents[$i - 1]->{feats} };
    } else {
        return undef;
    }
}

get_orderdescriptionprevnextTop
sub get_order {
    my $self = shift;
    my $i = shift;
    return $self->_get_sent_attr($i, "order");
}

get_pardescriptionprevnextTop
sub get_par {
    my $self = shift;
    my $i = shift;
    return $self->_get_sent_attr($i, "par");
}

get_rsntdescriptionprevnextTop
sub get_rsnt {
    my $self = shift;
    my $i = shift;
    return $self->_get_sent_attr($i, "rsnt");
}

get_sentdescriptionprevnextTop
sub get_sent {
    
    my $self = shift;
    my @sents = @{ $self->{_sents} };
    my $i = shift;

    unless ($self->_sent_in_range($i)) {
        return undef;
    }

    my $sentref = $sents[$i - 1];
    my %sent = (
        text => $sentref->{text},
        sno => $sentref->{sno},
        did => $sentref->{did},
        rsnt => $sentref->{rsnt},
        par => $sentref->{par},
        order => $sentref->{order}
    );
    return %sent;
}

get_snodescriptionprevnextTop
sub get_sno {
    my $self = shift;
    my $i = shift;
    return $self->_get_sent_attr($i, "sno");
}

get_textdescriptionprevnextTop
sub get_text {
    my $self = shift;
    my $i = shift;
    return $self->_get_sent_attr($i, "text");
}

newdescriptionprevnextTop
sub new {
    my $class = shift;
    my $extract = shift;
    my $centroid = shift;

    croak "Extract not defined" unless (@$extract);

    $centroid = {} unless ($centroid);

    my $i = 1;
    my @sents;
    my %uniq_dids;
    foreach my $sent (@$extract) {

        my ($text, $did, $sno, $rsnt, $par, $feats) = 
           ($sent->{TEXT}, $sent->{DID}, $sent->{SNO}, $sent->{RSNT},
            $sent->{PAR}, $sent->{FEATURES});
            
        if ($text and $did and $sno and $rsnt and $par and $feats) {
            $uniq_dids{$did} = 1;
            push @sents, { 
                text => $text, did => $did, sno => $sno,
                rsnt => $rsnt, par => $par, feats => $feats, order => $i
            };
        } else {
            carp "Sentence $i malformed, skipping";
            next;
        }
        $i++;

    }

    croak "Empty summary" unless @sents;

    my @dids = keys %uniq_dids;
    my %doc_order;
    my $count = 1;
    map { $doc_order{$_} = $count++ } sort @dids;

    my $self = { 
        _sents =>\@ sents, 
        _dids =>\@ dids, 
        _doc_order =>\% doc_order 
    };

    bless $self, $class;

    $self->_sort_sents();

    return $self;
}

set_doc_orderdescriptionprevnextTop
sub set_doc_order {
    my $self = shift;
    my %order = @_;
    my @dids = @{ $self->{_dids} };

    foreach my $did (@dids) {
        return undef unless $order{$did};
    }

    $self->{_doc_order} =\% order;
    $self->_sort_sents();

    return %order;
}

sizedescriptionprevnextTop
sub size {
    my $self = shift;
    return scalar @{ $self->{_sents} };
}

to_stringdescriptionprevnextTop
sub to_string {
    my $self = shift;
    my @sents = @{ $self->{_sents} };
    return join " ", map { $_->{text} } @sents;
}

General documentation


No general documentation available.