通过sae中文分词API提取文章关键字

 
0 2809
泡沫随风飘
2015-08-19 17:54

通过sae中文分词API提取文章关键字

很早就想实现这样一个功能:自动提取文章的关键字。
网上百度了一些资料,有点复杂,还需要分词字典什么的。后来注意到新浪SAE的第三方服务中有分词服务,可以轻松实现分词功能。于是就想到用sae应用写一个关键字提取功能通过jsonp(或者json)返回分词结果。


SAE分词服务

saeSegment是由新浪爱问提供的分词服务,是第三方服务。
该服务分词准确率高,而且可以返回给每个词的词性。


实现步骤


1、建立应用

见下图
注意这里选择的是php56.6

建立应用


建立应用,选择PHP5.6


在第三方服务下可以看到分词服务(如图保持开启即可)。

新浪SAE分词服务


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("http://wordsp.sinaapp.com/?callback=?",

{respond:"jsonp",content:content})

.done(function(data){

if(data.error==0){ $("#post_keywords").html(data.words.join(","));

}

});


最后上一张效果图

分词结果效果图


总结

这个分词api功能还非常简陋,接下来还将继续完善:

  1. 返回格式增加xml等;
  2. 增加调用验证;
  3. 等等….

参考文章
GET请求中URL的最大长度限制总结

本文内容由互联网用户自发贡献,版权归作者所有,本站不拥有所有权也不承担相关法律责任。如需转载请按以下形式注明来源: 复制

文章来源:阿里云牛优惠资讯网
文章标题:通过sae中文分词API提取文章关键字
原文地址:https://aliyunnew.com/a/47.html
发布时间:2015-08-19 17:54
相关话题
没有相关话题
猜您喜欢
回帖
  • 抢占沙发~~