#! /usr/local/bin/perl -w use strict; use warnings; use constant SCRIPT_NAME => 'test-modules.pl'; use Getopt::Long; use WordNet::Similarity::res; use WordNet::Similarity::lin; use WordNet::Similarity::jcn; use WordNet::Similarity::path; use WordNet::Similarity::wup; use WordNet::Similarity::lch; use WordNet::Similarity::hso; use WordNet::Similarity::lesk; use WordNet::Similarity::random; use WordNet::Similarity::vector; use WordNet::QueryData; our ($opt_wnpath, $opt_version, $opt_help, $opt_type, $opt_outfile); our ($opt_config); my $result = GetOptions ("wnpath=s", "version", "help", "type=s", "outfile=s", "config=s"); unless ($result) { showUsage (); exit (1); } if ($opt_help) { showHelp (); exit (0); } if ($opt_version) { print "".SCRIPT_NAME." version 0.07\n"; print "Copyright (C) 2003, Jason Michelizzi and Ted Pedersen\n"; exit (0); } unless ($opt_type) { showUsage (); exit (1); } my $outfh = *STDOUT; if ($opt_outfile) { open ($outfh, ">$opt_outfile") or die "Cannot open $opt_outfile: $!"; } # find WordNet my $wnhome = '/usr/local/WordNet-2.0/dict'; $wnhome = $ENV{WNHOME} if $ENV{WNHOME}; $wnhome = $opt_wnpath if $opt_wnpath; print STDERR "Loading WordNet... "; my $wn = new WordNet::QueryData ($wnhome); if ($wn) { print STDERR "done.\n"; } else { print STDERR "failed.\n"; exit (1); } my $module = $opt_type; $module = "WordNet::Similarity::".$module unless $module =~ m/WordNet::Similarity/; print STDERR "Loading $module... "; my $measure = $opt_config ? new $module ($wn, $opt_config) : new $module ($wn); print STDERR "done.\n"; my ($err, $errstr) = $measure->getError (); $err and die "Error creating $module: ($errstr)"; # now do some tests my @pairs = (['contrition#n#1', 'compunction#n#1'], ['dog#n#1', 'hunting_dog#n#1'], ['dog#n#1', 'cat#n#1'], ['levity#n#1', 'contrition#n#1'], ['hope#n#2', 'compunction#n#1'], ['like#v#2', 'cotton#v#1'], ['adore#v#1', 'like#v#2'], ['hope#n#2', 'like#v#2'], ['blue_sky#n#1', 'Earth#n#4'], ['worship#v#1', 'adore#v#1'], ['outer_space#n#1', 'abstraction#n#6'], ['languish#v#2', 'weep#v#1'], ['hjxlq#n', 'ynbr#n'], ['intelligent#a#1', 'intelligence#n#1'], ['weep#v#1', 'erupt#v#6'], ['leather_carp#n#1', 'grotto#n#1'], ); foreach my $pair (@pairs) { print $outfh "$pair->[0], $pair->[1]: "; my $score = $measure->getRelatedness ($pair->[0], $pair->[1]); if (defined $score) { print $outfh "$score\n"; } else { my ($err, $errString) = $measure->getError (); print $outfh "undefined (error level $err)\n"; } } close $outfh if $opt_outfile; sub showUsage { print "Usage: ".SCRIPT_NAME." {--type=measure | --version | --help}\n"; } sub showHelp { print "Usage: ".SCRIPT_NAME." {--type=measure | --version | --help}\n"; print "Options:\n"; print "\t--type=measure specifies the name of a measure to test\n"; print "\t--version show version information\n"; print "\t--help show this help message\n"; } __END__ =head1 NAME test-modules.pl -- run tests on WordNet::Similarity modules =head1 SYNOPSIS test-modules.pl [--type=measure | --version | --help ] =head1 DESCRIPTION B: The following is out-of-date and just plain wrong. Use this to test WordNet::Similarity. You must have run Makefile.PL and make first (but before you run make install). Runs some tests on a bunch of pairs of word senses, printing to the standard output. To see if a new distribution is working correctly, do this: ./test-distro.pl res --no-debug > stable.text ./test-distro.pl res > test.text diff stable.text test.text You may substitute the measure of your choice for 'res' above. =head1 OPTIONS B<--no-debug> When this option is given, the version of WordNet::Similarity found in /usr/lib/perl5/site_perl/5.8.0 (or something similar) is used instead of the version in ./blib/lib/