已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 源码

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

作者: @Ta

时间: 2014-05-27

点击: 5359

首先说下机器人的工作原理:
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|隐藏机器人聊天)』

1. 测试版的、、嘿嘿
(/@Ta/2014-05-27 15:46//)

2. 可喜可贺
(/@Ta/2014-05-27 16:45//)

3. @晨曦,搞着折腾玩的(⊙o⊙)…
(/@Ta/2014-05-27 16:56//)

4. @xggz,祝贺。支持共享
(/@Ta/2014-05-27 17:27//)

5. @超兽,好吧,两个api的源码都发了
(/@Ta/2014-05-27 17:52//)

6. 不错。。。
(/@Ta/2014-05-27 18:20//)

7. 顶顶,新手学习,如果能有点注释就更棒了,
(/@Ta/2014-05-27 21:12//)

8. 分词词典13兆多呀,我这空间只能解压4m的,汗
(/@Ta/2014-05-27 21:38//)

9. http://www.ftphp.com/scws/down/pscws4-20081221.tar.bz2
http://www.ftphp.com/scws/down/scws-dict-chs-utf8.tar.bz2
(/@Ta/2014-05-27 21:56//)

10. http://www.ftphp.com/scws/down/pscws4-20081221.tar.bz2
http://www.ftphp.com/scws/down/scws-dict-chs-utf8.tar.bz2
http://www.ftphp.com/scws/down/scws-dict-chs-gbk.tar.bz2
(/@Ta/2014-05-27 21:57//)

11. @Xisir,就是这个,解压就大了,汗
(/@Ta/2014-05-27 22:13//)

12. @xggz 这个还需要安装SCWS?还是只需要调用pscws4.class.php就行了?
(/@Ta/2014-05-27 22:29//)

13. @爱小邹 下载下来自己解压在分开压缩吧
(/@Ta/2014-05-27 22:30//)

回复需要登录

7月6日 22:38 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1