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

View File

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