Add lat brain case for handling famous latin phrases request.
This commit is contained in:
33
bin/lat_init.pl
Executable file
33
bin/lat_init.pl
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/perl
|
||||
# Used to initialize famous latin phrases markov chain brain
|
||||
|
||||
use 5.018;
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use English qw( -no_match_vars );
|
||||
|
||||
use lib qw(./vendor_perl/lib/perl5);
|
||||
use File::Path qw(mkpath);
|
||||
use Config::INI::Reader;
|
||||
use Hailo;
|
||||
|
||||
my $config = Config::INI::Reader->read_file ('data/config.ini');
|
||||
my $braindir = $config->{brain}->{dir};
|
||||
|
||||
unless (-d $braindir) {
|
||||
mkpath ($braindir) or die "Unable to create $braindir: $OS_ERROR\n";
|
||||
}
|
||||
|
||||
my $lat = Hailo->new (
|
||||
brain => "$braindir/lat.brain.sqlite",
|
||||
order => 2
|
||||
);
|
||||
|
||||
$lat->train('data/phrases.txt');
|
||||
my ($tokens, $expressions) = ($lat->stats())[0,1];
|
||||
printf "Total tokens: %s\nTotal expressins: %s\n", $tokens, $expressions;
|
||||
$lat->save();
|
||||
exit 0;
|
||||
|
||||
# vim: set ft=perl noet ai ts=4 sw=4 sts=4:
|
||||
5
cpanfile
5
cpanfile
@@ -1,4 +1,5 @@
|
||||
requires 'Plack';
|
||||
requires 'Hailo';
|
||||
requires 'Config::INI::Reader';
|
||||
requires 'File::Path';
|
||||
requires 'Hailo';
|
||||
requires 'Plack';
|
||||
requires 'local::lib';
|
||||
|
||||
1336
data/phrases.txt
Normal file
1336
data/phrases.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -14,12 +14,17 @@ unless (-d $braindir) {
|
||||
die "Directory $braindir does not exists\n";
|
||||
}
|
||||
|
||||
unless (-f "$braindir/lat.brain.sqlite") {
|
||||
die "Famous latin phrases module is not initialized. Run bin/lat_init.pl\n";
|
||||
}
|
||||
|
||||
my %brain;
|
||||
|
||||
# just return answer
|
||||
sub answer (@) {
|
||||
my $chat = shift;
|
||||
my $phrase = shift;
|
||||
my $msg;
|
||||
|
||||
unless (defined $brain{$chat}) {
|
||||
my $brain = sprintf '%s/%s.brain.sqlite', $braindir, $chat;
|
||||
@@ -30,7 +35,11 @@ sub answer (@) {
|
||||
);
|
||||
}
|
||||
|
||||
my $msg = $brain{$chat}->reply($phrase);
|
||||
if ($chat eq 'lat') {
|
||||
$msg = $brain{$chat}->reply();
|
||||
} else {
|
||||
$msg = $brain{$chat}->reply($phrase);
|
||||
}
|
||||
|
||||
return ('200', 'text/plain', $msg);
|
||||
}
|
||||
@@ -68,6 +77,10 @@ my $app = sub {
|
||||
($status, $content, $msg) = answer ($env->{HTTP_CHAT}, $env->{HTTP_PHRASE});
|
||||
}
|
||||
|
||||
if ($env->{PATH_INFO} eq '/lat' && $env->{REQUEST_METHOD} eq 'POST') {
|
||||
($status, $content, $msg) = answer ('lat', undef);
|
||||
}
|
||||
|
||||
return [
|
||||
$status,
|
||||
[ 'Content-Type' => $content, 'Content-Length' => length $msg ],
|
||||
@@ -75,5 +88,7 @@ my $app = sub {
|
||||
];
|
||||
};
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
# vim: set ft=perl noet ai ts=4 sw=4 sts=4:
|
||||
|
||||
Reference in New Issue
Block a user