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 + + *