Group
Extension

zhangbo-NLP-plugin_eng/lib/zhangbo/NLP/res_server.pl

#!/usr/bin/perl
use Socket;
use IO::Handle;
use IO::Select;
use IO::Socket::INET;
use lib "./";
use plugin_eng;
use POE qw(Component::Server::TCP);
#use JSON::XS;
 use Clone qw(clone);
use Encode;
use Smart::Comments;
use Data::Dumper;
our $rule;
our $fact;
my $n=0;
POE::Component::Server::TCP->new(
  Alias       => "echo_server",
  Port        => 28888,
  ClientInput => sub {

    my ($session, $heap, $input) = @_[SESSION, HEAP, ARG0];
    #print "Session ", $session->ID(), " got input: ".$input."\n";
    #print "Session ", $session->ID(), " got input: ".length($input)."\n";
my $d;
my $d_seq;
#open(FD_log,">/tmp/engine.log");
#print FD_log "$input\n";
#system("cp $input /tmp/");
print "input file $input",length($input),"\n";
my @res;
my $noshudown=0;
if(length($input)<3){
   $_[KERNEL]->yield("shutdown");
             return;
}
if($input=~/^(.*?) fact (.*?) (.*)/)
	{
	my $user=$1;
	my $c=$3;
	my $torp=$2;
	@res=addfact($user,$torp,$c);	
	}
elsif($input=~/^(.*?) rule (.*?) (.*)/)
	{
	my $user=$1;
        my $c=$2;
        my $torp=$3;

        @res=addrule($user,$torp,$c);
        }
elsif($input=~/^(.*?) clean (.*)/)
        {
        my $user=$1;
        my $c=$2;

        @res=search_article($input);
        }
else
{

}

    $heap->{client}->put(@res);
if($noshudown eq  "yes")
{
}
else
{
		  $_[KERNEL]->yield("shutdown");
             return;

}

},
  ClientDisconnected => sub {
           #print "Client disconnected\n"; # log it
         }
#, ClientFlushed => sub {
#           my $data_source = $_[HEAP]{file_handle};
#           my $read_count = sysread($data_source, my $buffer = "", 65536);
#           if ($read_count) {
#             $_[HEAP]{client}->put($buffer);
#           }
#           else {
#		print FD_log "------------------error\n";
#             $_[KERNEL]->yield("shutdown");
#           }
         #}

);
POE::Kernel->run;

sub addrule
{
my $user=$_[0];
my $torp=$_[1];
my $c=$_[2];
my @res;
my $tname=0;
my $tplace=0;
my $tnum=0;
my $tnall=0;
my $pos_hash;
my $pos_all;
my $pos_nu;

my $single;

#加入规则库 检验重复
#s所有事实 匹配 看结果集是否增加 如果结果重复 则不累计结果中
# 若有增加 则全体规则参与重新计算,如果新增结果 增加数量大于 总规则数量


if($c !~/\=\>/)
{
	$rand_tr=rand();
	$c=txt2rule_fuzzy($c);
#modif txt2rule_fuzzy

}
	if(exists($rule->{$user}->{$c}))	
	{
		push(@res,"double rule $c\n")
	}

my @liftright=split("=>",$c);
if($liftright[0]=~/(.*?)\|(.*)/)
{
$liftright[0]=$1;
my $yueshu_str=$2;
my @tmpat=split("&&",$yueshu_str);
foreach my $tm (@tmpat)
{
        if($tm=~/.*? nr/)
        {
                $tname=1;
        }
        if($tm=~/.*? ns/)
        {
                $tplace=1;
        }
                if($tm=~/.*? nu/)
        {
                $tnum=1;
        }
                        if($tm=~/.*?guess.*?hobby/)
        {
                $thobby=1;
        }
        if($tm=~/.*? n_all/)
        {
                $tnall=1;
        }




}
$yueshu[$nn]=clone(\@tmpat);
## $yueshu

}
my  @liftp=split("&&",$liftright[0]);
my $nowid=0;
if(exists($rule->{$user}->{"id"}))
{
 $nowid=$rule->{$user}->{"id"}+1;
$rule->{$user}->{"id"}=$nowid;
}
else
{
$rule->{$user}->{"id"}=0;
}
$rule->{$user}->{$nowid}->{"left"}=clone(\@liftp);
$rule->{$user}->{$nowid}->{"right"}=$liftright[1];
$rule->{$user}->{$c}="1";

if(scalar(@{$rule->{$user}->{"left"}})==1)
{
$single=1;
}

	my @newres=resallfact($user,$nowid);
	foreach my $nr (@newres)
	{
		if(exists($fact->{$user}->{$nr}))
		{
		next;}
		$fact->{$user}->{$nr}=1;
			push(@res,$nr);
	}
			my $news=0;
		while($news>0)
		{
			@newres=resallfact($nowid);
			foreach my $nr (@newres)
        		{
				if(exists($fact->{$user}->{$nr}))
		                {next;}
        		        $fact->{$user}->{$nr}=1;
					$news++;
			push(@res,$nr);
        		}
		}

@res;
}


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.