Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
149 lines (116 sloc) 4.35 KB
NAME
Lingua::EN::AffectiveNorms - Perl based data store for the ANEW -
standardised list of Affective Norms for English Words.
VERSION
Version 0.01
SYNOPSIS
This module provides data store and retrieval to assess the emotional
content of text based on a standardised list of english words. It has
use in some text mining procedures (e.g. see ACKNOWLEDGEMENTS section).
DBIx::Class schema (dynamic) to load list of english affective words
from http://csea.phhp.ufl.edu/media/anewmessage.html
my $schema = Lingua::EN::AffectiveWords->connect; # db lives in same dir as package by default
my $all_rs = $schema->resultset(AllSubjects);
my $male_rs = $schema->resultset(Male);
my $female_rs = $schema->resultset(Female);
The list of words is a bit tricky to obtain (see link above), but once
you do, you should enter the list into a sqlite schema given below, and
put it in the same directory as this .pm file (perldoc -M
Lingua::EN::AffectiveNorms to work out where that is).
The schema is as follows:
create table all_subjects (
word varchar(32),
word_stem varchar(32),
word_no integer,
valence_mean float,
valence_sd float,
arousal_mean float,
arousal_sd float,
dominance_mean float,
dominance_sd float,
word_freq float,
primary key(word)
);
create table male (
word varchar(32),
word_stem varchar(32),
word_no integer,
valence_mean float,
valence_sd float,
arousal_mean float,
arousal_sd float,
dominance_mean float,
dominance_sd float,
word_freq float,
primary key(word)
);
create table female (
word varchar(32),
word_stem varchar(32),
word_no integer,
valence_mean float,
valence_sd float,
arousal_mean float,
arousal_sd float,
dominance_mean float,
dominance_sd float,
word_freq float,
primary key(word)
);
The next thing is to put the male, female and all_subjects lists into
separate csv files, with the headibngs as for the column names in the
database, then run the following perl script on it:
use Text::CSV_XS;
my $csv = Text::CSV_XS->new;
use Lingua::Stem qw/stem/;
my ($infile, $table) = @ARGV or die "infile and table name required";
my $schema = Lingua::EN::AffectiveNorms::Schema->connect;
my $rs = $schema->resultset($table);
open my $IN, "<", $infile;
my @header;
while (<$IN>) {
$csv->parse($_);
my @row = $csv->fields;
if ($. == 1) {
@header = @row;
}
else {
my %data;
@data{@header} = @row;
$data{word_stem} = stem($data{word})->[0];
$rs->create(\%data);
}
}
I'd distribute the databse with this module, except that the
distribution conditions of the word list preclude this.
AUTHOR
Kieren Diment, "<zarquon at cpan.org>"
BUGS
Please report any bugs or feature requests to
"bug-lingua-en-affectivenorms at rt.cpan.org", or through the web
interface at
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Lingua-EN-AffectiveNorms
>. I will be notified, and then you'll automatically be notified of
progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Lingua::EN::AffectiveNorms
You can also look for information at:
* RT: CPAN's request tracker
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Lingua-EN-AffectiveNorms>
* AnnoCPAN: Annotated CPAN documentation
<http://annocpan.org/dist/Lingua-EN-AffectiveNorms>
* CPAN Ratings
<http://cpanratings.perl.org/d/Lingua-EN-AffectiveNorms>
* Search CPAN
<http://search.cpan.org/dist/Lingua-EN-AffectiveNorms/>
ACKNOWLEDGEMENTS
Inspired by the paper Dodds, P., & Danforth, C. (2009). Measuring the
Happiness of Large-Scale Written Expression: Songs, Blogs, and
Presidents. Journal of Happiness Studies. doi:
10.1007/s10902-009-9150-9. avialable (open access) from:
<http://www.springerlink.com/content/757723154j4w726k>
COPYRIGHT & LICENSE
Copyright 2009 Kieren Diment, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.