专家系统未初始化

时间:2013-05-11 10:12:37

标签: perl expert-system

我正在使用AI::ExpertSystem::Advanced从网络内容运行专家系统。

我有一个网站,我用这段代码运行Perl脚本:

use strict;
use warnings;

use AI::ExpertSystem::Advanced;
use AI::ExpertSystem::Advanced::KnowledgeDB::Factory;
use Data::Dumper;
use File::Slurp;

open(LOG, ">C:\\xampp\\htdocs\\xampp\\bc\\log.txt");

print LOG "START EXPERT\n";
system("C:\\Perl\\bin\\perl C:\\xampp\\htdocs\\xampp\\bc\\create_yaml.pl");

print LOG "START CREATE DB\n";
my $yaml_kdb = AI::ExpertSystem::Advanced::KnowledgeDB::Factory->new('yaml', {
    filename => 'C:\\xampp\\htdocs\\xampp\\bc\\recepty.yaml'
});

print LOG "LOAD RECEPTY\n";
my $text = read_file(
    'C:\\xampp\\htdocs\\xampp\\bc\\knowledgebase.yaml',
    array_ref => 1,
    chomp     => 1
);

print LOG "LOAD DB\n";
my $ai = AI::ExpertSystem::Advanced->new(
    viewer_class  => 'terminal',
    knowledge_db  => $yaml_kdb,
    initial_facts => $text
);

print LOG "NEW ES\n";
$ai->mixed();

print LOG "RESULT DONE\n";
#$ai->summary();
close LOG;

我试图创建一个日志。当我在终端中运行此源时,我的日志已满,所有事情都是正确的。但是,当我从网上运行它时,它是错误的。我的日志文件只有:

START EXPERT
START CREATE DB
LOAD RECEPTY
LOAD DB

我认为创建新专家系统的事情很糟糕。链接或我不知道。你觉得怎么样?

我的本​​地服务器的错误:

Compilation failed in require at C:/Perl/lib/Term/ReadLine/Perl.pm line 65. 
The system cannot find the path specified. Unable to get Terminal Size. 
The Win32 GetConsoleScreenBufferInfo call didn't work. 
The COLUMNS and LINES environment variables didn't work. 
The resize program didn't work. at C:/Perl/lib/Term/ReadKey.pm line 362. 
Compilation failed in require at C:/Perl/lib/Term/ReadLine/Perl.pm line 65.

1 个答案:

答案 0 :(得分:1)

(最初作为How can I find place of error in perl重复问题的答案提交)

问题中的错误消息指出错误在C:/Perl/lib/Term/ReadKey.pm line 362引发,而use Term::ReadKey出现在C:/Perl/lib/Term/ReadLine/Perl.pm line 65。如果您在CGI环境中运行此代码,则使用ReadLine / ReadKey是没有意义的,并且它们无法初始化也不足为奇。

但是,您正在使用viewer_class => 'terminal'创建ExpertSystem实例,这会导致它使用AI::ExpertSystem::Advanced::Viewer::Terminal,“从AI :: ExpertSystem :: Advanced :: Viewer :: Base和它的主要目的是与(控制台)终端“(强调我的)进行交互,并使用ReadLine这样做。为了使这项工作,您需要使用不“与(控制台)终端交互”的不同查看器类。

不幸的是,a search of metacpan找不到其他可用的观众,所以你需要在其他地方找到一个(AI :: ExpertSystem :: Advanced的作者可能知道你可以在哪里获得CGI)或写你自己的观众班。