#!/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,
    stem => 1,
);
$opinion->analyze();

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

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

my $i = 0;

print "Most positive sentences ($max):\n";
for my $sentence ( map { [ $score{$_} => $_ ] } @{ $opinion->sentences } ) {
    next unless $sentence->[0] == $max;
    $i++;
    print "\t$i. $sentence->[1]\n";
}
print "\n";

$i = 0;
print "Most negative sentences ($min):\n";
for my $sentence ( map { [ $score{$_} => $_ ] } @{ $opinion->sentences } ) {
    next unless $sentence->[0] == $min;
    $i++;
    print "\t$i. $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;

printf "Weighted score: %.4f\n", mean( @{ $opinion->scores } ) * $opinion->ratio;
