From d10ab03f9737690861ec64bbc363a84afa400012 Mon Sep 17 00:00:00 2001 From: Arne Baeumler Date: Tue, 1 Sep 2015 22:09:40 +0200 Subject: [PATCH] fixed addKnowledge --- modules/aiml/AIML.pl | 14 ++++++++++---- modules/aiml/knowledge/main.aiml | 4 ++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/aiml/AIML.pl b/modules/aiml/AIML.pl index 5c55a09..ae47226 100755 --- a/modules/aiml/AIML.pl +++ b/modules/aiml/AIML.pl @@ -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 = ) { 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); diff --git a/modules/aiml/knowledge/main.aiml b/modules/aiml/knowledge/main.aiml index 5c5a7d5..3f0b542 100644 --- a/modules/aiml/knowledge/main.aiml +++ b/modules/aiml/knowledge/main.aiml @@ -4,6 +4,10 @@ HELLO + + how are you + + *