fixed addKnowledge

This commit is contained in:
Arne Baeumler 2015-09-01 22:09:40 +02:00
parent efad832771
commit d10ab03f97
2 changed files with 14 additions and 4 deletions

View File

@ -20,7 +20,9 @@ my $xml = $parser->XMLin($aiml);
print "xml: " . Dumper($xml) . "\n";
our $knowledge = {};
my $knowledge = {};
my $star;
foreach my $c (@{$xml->{category}}) {
print "pattern: $c->{pattern}\n";
&addKnowledge($knowledge,$c->{pattern},$c->{template});
@ -38,14 +40,15 @@ while(my $input = <STDIN>) {
sub findAnswer {
my ($struct,$input) = @_;
my ($key,$rest) = split(/\s+/,$input,2);
$key = '*' unless($struct->{uc($key)});
unless($struct->{uc($key)}) {
$star = $key;
$key = '*';
}
if($rest) {
if($struct->{uc($key)}) {
&findAnswer($struct->{uc($key)},$rest);
} elsif($struct->{template}) {
return(&parseAnswer($struct));
} elsif($struct->{'*'}) {
&findAnswer($struct->{'*'},$rest);
}
} else {
return(&parseAnswer($struct->{uc($key)}));
@ -70,8 +73,11 @@ sub addKnowledge {
my ($ref,$pattern,$template) = @_;
my ($key,$rest) = split(/\s+/,$pattern,2);
if($rest) {
print "addKnowledge(): $key:$rest ref=" . ref($ref) . "\n";
$ref->{uc($key)} = {} unless(exists $ref->{uc($key)});
&addKnowledge($ref->{uc($key)},$rest,$template);
} else {
print "addKnowledge(): $key:$template\n";
$ref->{uc($key)}->{template} = $template;
}
return(1);

View File

@ -4,6 +4,10 @@
<pattern>HELLO</pattern>
<template>Hi there!</template>
</category>
<category>
<pattern>how are you</pattern>
<template>Feelin fine, thank you!</template>
</category>
<category>
<pattern>*</pattern>
<template>