#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; my ($lexicon, $input) = @ARGV; my %emotive; open my $lex, '<', $lexicon or die $!; while (<$lex>) { my ($pos, $lemma) = split; warn "Duplicate POS for $lemma.\n" if exists $emotive{$lemma} && $emotive{$lemma} ne $pos; $emotive{$lemma} = $pos; } my %seen; open my $in, '<', $input or die $!; while (<$in>) { $seen{$_}++ for map $emotive{$_}, split; } for my $pos (sort { $seen{$a} <=> $seen{$b} } keys %seen) { say "$pos\t$seen{$pos}"; }