NAME

Hailo - A pluggable Markov engine analogous to MegaHAL

SYNOPSIS

use strict;
use warnings;
use Hailo;

my $hailo = Hailo->new(
    # Or Pg, or Perl ...
    storage_class  => 'SQLite',
    brain_resource => 'brain.db'
);

while (<>) {
    $hailo->learn($_);
    print $hailo->reply($_), "\n";
}

DESCRIPTION

Hailo is a fast and lightweight markov engine intended to replace AI::MegaHAL. It has a lightweight Moose-based core with pluggable storage and tokenizer backends.

It is similar to MegaHAL in functionality, the main difference being (with the default storage/tokenizer backends) better scalability, drastically less memory usage, and an improved tokenizer.

With this distribution, you can create, modify, and query Hailo brains. To use Hailo in event-driven POE applications, you can use the POE::Component::Hailo wrapper. One example is POE::Component::IRC::Plugin::Hailo, which implements an IRC chat bot.

Etymology

Hailo is a portmanteau of HAL (as in MegaHAL) and failo.

ATTRIBUTES

brain_resource

The name of the resource (file name, database name) to use as storage. There is no default.

order

The Markov order (chain length) you want to use for an empty brain. The default is 5.

storage_class

The storage backend to use. Default: 'SQLite'.

This gives you an idea of approximately how the backends compare in speed:

                  Rate CHI::File PostgreSQL CHI::BerkeleyDB MySQL CHI::Memory SQLite Perl::Flat Perl
CHI::File       1.08/s        --       -53%            -63%  -70%        -71%   -78%       -89% -93%
PostgreSQL      2.28/s      112%         --            -21%  -35%        -38%   -53%       -76% -86%
CHI::BerkeleyDB 2.90/s      169%        27%              --  -18%        -21%   -40%       -70% -82%
MySQL           3.53/s      228%        55%             22%    --         -4%   -27%       -63% -78%
CHI::Memory     3.68/s      242%        61%             27%    4%          --   -24%       -62% -78%
SQLite          4.81/s      347%       111%             66%   36%         31%     --       -50% -71%
Perl::Flat      9.62/s      793%       321%            232%  172%        162%   100%         -- -41%
Perl            16.4/s     1423%       618%            466%  364%        346%   241%        70%   --

To run your own test try running utils/hailo-benchmark in the Hailo distribution.

tokenizer_class

The tokenizer to use. Default: 'Words';

ui_class

The UI to use. Default: 'ReadLine';

storage_args

tokenizer_args

ui_args

A HashRef of arguments storage/tokenizer/ui backends. See the documentation for the backends for what sort of arguments they accept.

token_separator

Storage backends may choose to store the tokens of an expression as a single string. If so, they will be joined them together with a separator. By default, this is "\t".

METHODS

new

This is the constructor. It accepts the attributes specified in "ATTRIBUTES".

run

Run the application according to the command line arguments.

learn

Takes a string argument and learns from it.

train

Takes a filename, filehandle or array referenceand calls learn on all its lines. If a filename is passed, the file is assumed to be UTF-8 encoded.

reply

Takes an optional line of text and generates a reply that might be relevant.

learn_reply

Takes a string argument, learns from it, and generates a reply that might be relevant.

save

Tells the underlying storage backend to save its state.

CAVEATS

All occurences of token_separator will be stripped from your input before it is processed, so make sure it's set to something that is unlikely to appear in it.

SUPPORT

You can join the IRC channel #hailo on FreeNode if you have questions.

AUTHORS

Hinrik Örn Sigurðsson, hinrik.sig@gmail.com

Ævar Arnfjörð Bjarmason <avar@cpan.org>

LICENSE AND COPYRIGHT

Copyright 2010 Hinrik Örn Sigurðsson and Ævar Arnfjörð Bjarmason <avar@cpan.org>

This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.