-
Notifications
You must be signed in to change notification settings - Fork 1
/
opinion
50 lines (40 loc) · 1.35 KB
/
opinion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/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;