自己用词库写的机器人,没有使用任何外站API

@Ta 2014-05-27 5361点击
首先说下机器人的工作原理:
1、分析用户的问题,提取出文本中权重最高的词语
2、在机器人的词库中匹配出关键字,给出答复
词库是在网上找的,匹配关键字不难,主要是分析词语
下面贴出两个API:
1、分析文本的词语
http://i.itpk.cn/fc.php?text=跟我还客气什么啊&limit=1
返回结果:{"allWord":"跟,我,还,客气,什么,啊", "section":"客气"}
第一个就是文本分词后所有的词和字,第二个就是权重最高的词语
2、匹配权重最高的词语(机器人智能回答)
http://i.itpk.cn/api.php?question=跟我还客气什么啊&analysis=1
返回结果:礼多人不怪,有礼才可爱.
这个直接返回词库的匹配结果
接口详细说明:
i.itpk.cn?fc.php
这个接口第一个参数就是接收的文本,第二个参数表示分词后词语的个数,排序按词语的权重从大到小排列,不加这个参数默认值为1
i.itpk.cn?api.php
这个接口第一个参数跟上面一样,第二个参数表示是否对接收的文本进行分词处理、为1表示进行分词处理,不加这个参数默认值为1

词库:http://i.itpk.cn/ck/ck2.txt
源码:
api.php
<?php 

/**
 * 机器人API
 * @author ITPK
 * @copyright http://wap.itpk.cn
 * @createdate 2014-5-27 10:42:11
 */

error_reporting(0);
header("content-type:text/plain; charset=utf-8");
$question = htmlspecialchars(isset($_GET['question']) ? $_GET['question'] : (isset($_POST['question']) ? $_POST['question'] : ''));
$analysis = htmlspecialchars(isset($_GET['analysis']) ? $_GET['analysis'] : (isset($_POST['analysis']) ? $_POST['analysis'] : 1));
$limit = htmlspecialchars(isset($_GET['limit']) ? $_GET['limit'] : (isset($_POST['limit']) ? $_POST['limit'] : 1));
if ($analysis == 1) {
	$url = 'http://i.itpk.cn/fc.php';
	$curl_obj = curl_init();
	curl_setopt($curl_obj, CURLOPT_URL, $url);
	curl_setopt($curl_obj, CURLOPT_HEADER, 0);
	curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl_obj, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($curl_obj, CURLOPT_POST, 1);
	curl_setopt($curl_obj, CURLOPT_POSTFIELDS, "text=$question&limit=$limit");
	$result = curl_exec($curl_obj);
	curl_close($curl_obj);
	$jo = json_decode($result);
	$section = $jo->section;
	if ($section != '') {
		$question = $section;
	}
}
$ckTxt = file_get_contents('http://i.itpk.cn/ck/ck2.txt');
$ckArr = explode("\n\r", $ckTxt);
unset($ckTxt);
$rck = '';
if (count($ckArr) > 1) {
	foreach ($ckArr as $ck) {
		$qck = explode("\n", $ck);
		if (count($qck) <= 1) { continue; }
		$bol = explode($question, $qck[1]); 
		if (count($bol) > 1) {
			for ($i = 2; $i < count($qck); $i++) {
				$rck .= $qck[$i];
			}
			break;
		}
	}
}
if ($rck == '') {
	exit('对不起,我的词库中没有相关回答,这是测试版小词库,后面会增加!');
}
exit($rck);

?>

fc.php
<?php 

/**
 * PHP分析词语
 * @author ITPK
 * @copyright http://wap.itpk.cn
 * @createdate 2014-5-26 21:23:53
 */

error_reporting(0);
header("content-type:text/plain; charset=utf-8");
$text = htmlspecialchars(isset($_GET['text']) ? $_GET['text'] : (isset($_POST['text']) ? $_POST['text'] : ''));
$limit = htmlspecialchars(isset($_GET['limit']) ? $_GET['limit'] : (isset($_POST['limit']) ? $_POST['limit'] : 1));
require 'pscws4.class.php';
$cws = new PSCWS4('utf8');
$cws->set_dict('etc/dict.utf8.xdb');
$cws->set_rule('etc/rules.utf8.ini');
//$cws->set_multi(3);
$cws->set_ignore(true);
//$cws->set_debug(true);
$cws->set_duality(true);
$cws->send_text($text);
$allWord = '';
$section = '';
while ($tmp = $cws->get_result()) {
	foreach ($tmp as $w) {
		if ($w['word'] == "\r") continue;
		$allWord .= ($w['word'].',');
	}
}
$ret = array();
$ret = $cws->get_tops($limit,'r,v,p');
foreach ($ret as $tmp) {
	$section .= ($tmp['word'].',');
}
$cws->close();
$allWord = rtrim($allWord, ',');
$section = rtrim($section, ',');
$json_str = <<<EOF
{"allWord":"$allWord", "section":"$section"}
EOF;
exit($json_str);
?>
回复列表(13|隐藏机器人聊天)
添加新回复
回复需要登录