#!/usr/bin/perl -w use strict; use CGI qw/:standard *table/; use CGI::Pretty; use Lingua::Identify qw/:all/; # first, calculate the result (if asked) my $result = ''; if (param()) { param('text') or $result .= 'Please insert some text to identify.' . br ; param('languages') or $result .= 'Please select at least one language.' . br ; param('methods') or $result .= 'Please select at least one method to use.' . br ; unless ($result) { my @lang = param('languages'); my $text = param('text'); my @methods = param('methods'); my %methods; for (param('methods')) { $methods{$_} = param("method_$_"); } set_active_languages(@lang); my @results = langof( { method => \%methods }, $text ); $result = join (br, b ( ucfirst name_of($results[0]) ) . ' (confidence level ' . per(confidence(@results)).')', '', table (#{-border=>1}, map { Tr(@$_)} map { [ td( ucfirst name_of($results[$_*2]) ), td( {-width=>'2%'} ), td( {-align=>'right'}, per($results[$_*2 + 1]) ), ] } 0 .. ($#results-1) / 2 ) ); } } # now let's print the stuff my %language_labels = map { $_ => ucfirst name_of($_) } get_all_languages; my @all_languages = sort { $language_labels{$a} cmp $language_labels{$b} } keys %language_labels; my %method_labels = ( smallwords => 'Small Word Technique ', prefixes1 => 'Prefixes Analysis, size 1 ', prefixes2 => 'Prefixes Analysis, size 2 ', prefixes3 => 'Prefixes Analysis, size 3 ', prefixes4 => 'Prefixes Analysis, size 4 ', suffixes1 => 'Suffixes Analysis, size 1 ', suffixes2 => 'Suffixes Analysis, size 2 ', suffixes3 => 'Suffixes Analysis, size 3 ', suffixes4 => 'Suffixes Analysis, size 4 ', ngrams1 => 'Ngram Categorization, size 1 ', ngrams2 => 'Ngram Categorization, size 2 ', ngrams3 => 'Ngram Categorization, size 3 ', ngrams4 => 'Ngram Categorization, size 4 ', ); #for (keys %method_labels) { # $method_labels{$_} .= textfield("method_$_",'1',5,5); #} my @methods = qw/smallwords prefixes1 prefixes2 prefixes3 prefixes4 suffixes1 suffixes2 suffixes3 suffixes4 ngrams1 ngrams2 ngrams3 ngrams4/; print header, start_form, table(#{-border=>1}, Tr({-valign=>'top'}, td( # box to insert text in "Insert text to identify here (powered by Lingua::Identify v @{[Lingua::Identify->VERSION]})", br, textarea(-name=>'text', -rows=>10, -columns=>50), p, submit, reset, p, $result, ), td({-nowrap=>'nowrap'}, # language list 'Available languages', br, checkbox_group(-name=>'languages', -values=>[@all_languages], -default=>[@all_languages], -linebreak=>'true', -labels=>\%language_labels, ) ), td({-nowrap=>'nowrap'}, # method list 'Available methods', br, checkbox_group(-name=>'methods', -values=>[@methods], -default=>[@methods], -linebreak=>'true', -labels=>\%method_labels, ) ), td({-nowrap=>'nowrap'}, # method relevance 'Method relevance', br, map {textfield("method_$_",'1',5,5),br} @methods ), ) ), end_form; sub per { sprintf("%.2f%", 100 * shift); }