#!/usr/bin/env perl
use strict;
use warnings;

use Lingua::EN::Opinion;
use Statistics::Lite qw( mean );
use List::Util qw( min max sum0 );

my $input_file = shift || die "Usage: perl $0 /some/file.txt\n";

my $opinion = Lingua::EN::Opinion->new( file => $input_file );
$opinion->analyze();

my %score;
@score{ @{ $opinion->sentences } } = @{ $opinion->scores };

my $min = min( @{ $opinion->scores } );
my $max = max( @{ $opinion->scores } );

print "Most positive sentences:\n";
for my $sentence ( map { [ $score{$_} => $_ ] } @{ $opinion->sentences } ) {
    next unless $sentence->[0] == $max;
    print "\t$sentence->[1]\n";
}
print "\n";
print "Most negative sentences:\n";
for my $sentence ( map { [ $score{$_} => $_ ] } @{ $opinion->sentences } ) {
    next unless $sentence->[0] == $min;
    print "\t$sentence->[1]\n";
}
print "\n";
print 'Total sentence score: ', sum0( @{ $opinion->scores } ), "\n";
print 'Total number of sentences: ', scalar( @{ $opinion->sentences } ), "\n";
print 'Average sentence score: ', mean( @{ $opinion->scores } ), "\n";

printf "known: %d, unknown: %d, known/total: %.2f\n",
    $opinion->familiarity->{known},
    $opinion->familiarity->{unknown},
    $opinion->ratio;
