通过sae中文分词API提取文章关键字
更新时间:2015-10-20 点击量:1952
Tag关键词: 分词 ecshop模板 ecshop4.0模板 二次开发 ecshop3.6模板 ecshop小程序

很早就想实现这样一个功能:自动提取文章的关键字。
网上百度了一些资料,有点复杂,还需要分词字典什么的。后来注意到新浪SAE的第三方服务中有分词服务,可以轻松实现分词功能。于是就想到用sae应用写一个关键字提取功能通过jsonp(或者json)返回分词结果。
SAE分词服务
saeSegment
是由新浪爱问提供的分词服务,是第三方服务。
该服务分词准确率高,而且可以返回给每个词的词性。
实现步骤
1、建立应用
见下图
注意这里选择的是php56.6
在第三方服务下可以看到分词服务(如图保持开启即可)。
2、上传代码
类WordSP.php
<?php
class WordSP {
private $segment;
private $error=array();
public function __construct(){
$this->segment=new SaeSegment();
}
public function getWords($content,$limit=10,$keywords="true"){
if(empty($content)){
$this->error=array("no"=>10,"message"=>"内容为空");
return false;
}
$multi=(empty($multi)||!is_numeric($multi))?2:$multi;
$limit=(empty($limit)||!is_numeric($limit))?10:$limit;
$ret=$this->segment->segment($content, 1);
if($ret===false){
$this->error=array("no"=>$this->segment->errno()
,"message"=>$this->segment->errmsg());
return false;
}
if($keywords=="true"){
$ret=array_map(array($this,"filterArr"),$ret);
}
$u=array_count_values(array_column($ret, 'word'));
arsort($u);
$result=array();
foreach($u as $k=>$v){
$result[]=$k;
if(count($result)>=$limit)
break;
}
if(empty($result)){
$this->error=array("no"=>11,"message"=>"筛选内容为空");
return false;
}
return $result;
}
protected function filterArr($arr){
if(($arr["word_tag"]>=95 && $arr["word_tag"]<=104 ) ||$arr["word_tag"]==171 ||$arr["word_tag"]==200 ){
return $arr;
}else{
return false;
}
}
public function errno(){
return $this->error["no"];
}
public function errmsg(){
return $this->error["message"];
}
}
文件 index.php
<?php
require "WordSP.php";
$content=isset($_GET["content"])?$_GET["content"]:"";
$respond=isset($_GET["respond"])?$_GET["respond"]:"jsonp";
$limit=isset($_GET["limit"])?$_GET["limit"]:10;
$callback=isset($_GET["callback"])?$_GET["callback"]:"callback";
$wp=new WordSP();
$ret=$wp->getWords($content,$limit);
$result=array();
if($ret===false){
$result["error"]=$wp->errno();
$result["message"]=$wp->errmsg();
}else{
$result["error"]=0;
$result["message"]="获取成功";
$result["words"]=$ret;
}
switch($respond){
case "jsonp":
echo $callback."(".json_encode($result).")";
break;
default:
json_encode($result);
}
上传以上代码到服务器端根目录下即可,调用。
参数说明:
content:需处理的内容 ,get请求
respond:返回类型(jsonp|json)默认jsonp,get请求
limit:返回关键词的个数,默认10,get请求;
callback:回调函数名(返回类型为jsonp时有效),默认为callback,get请求;
返回结果说明:
error:错误码,无错误时返回0;
message:状态说明;
words:数组,结果。
3、调用(jsonp)
需引入jquery
var content= mdEditor.getHTML();//获取编辑器内容,这个依照编辑器不同而不同
content=content.replace(/[^\u4e00-\u9fa5]+/ig,'');//去除所有非中文
if(content.length>850)
content=content.substr(0,850);//限制长度,参考《GET请求中URL的最大长度限制总结》连接见文末
$.getJSON(";,
{respond:"jsonp",content:content})
.done(function(data){
if(data.error==0){ $("#post_keywords").html(data.words.join(","));
}
});
最后上一张效果图
总结
这个分词api功能还非常简陋,接下来还将继续完善:
- 返回格式增加xml等;
- 增加调用验证;
- 等等….
参考文章
GET请求中URL的最大长度限制总结
如果文章对您有帮助,就打赏一个吧
«上一篇:GET请求中URL的最大长度限制总结 下一篇:Apache中通过配置.htaccess设置单独二级域名(cookie-free)放置静态文件»