使用Discuz关键词服务器实现PHP中文分词


Posted in PHP onMarch 11, 2014

不同于使用自己的服务器进行分词,Discuz!在线中文分词服务是基于API返回分词结果的。在项目中,我们只需要一个函数即可方便地进行分词、关键词提取。
以下是根据Discuz!在线分词服务API写的函数,测试可正常运行:

/**
 * DZ在线中文分词
 * @param $title string 进行分词的标题
 * @param $content string 进行分词的内容
 * @param $encode string API返回的数据编码
 * @return  array 得到的关键词数组
 */
 function dz_segment($title = '', $content = '', $encode = 'utf-8'){
    if($title == ''){
        return false;
    }
    $title = rawurlencode(strip_tags($title));
    $content = strip_tags($content);
    if(strlen($content)>2400){ //在线分词服务有长度限制
        $content =  mb_substr($content, 0, 800, $encode);
    }
    $content = rawurlencode($content);
    $url = 'http://keyword.discuz.com/related_kw.html?title='.$title.'&content='.$content.'&ics='.$encode.'&ocs='.$encode;
    $xml_array=simplexml_load_file($url);                        //将XML中的数据,读取到数组对象中  
    $result = $xml_array->keyword->result;
    $data = array();
    foreach ($result->item as $key => $value) {
            array_push($data, (string)$value->kw);
    }
    if(count($data) > 0){
        return $data;
    }else{
        return false;
    }
 }

分词示例,通过url访问:
http://keyword.discuz.com/related_kw.html?title=高三历史全程复习精品教程&content=&ics=utf-8&ocs=utf-8

返回的XML数据:

<?xml version="1.0" encoding="utf-8" ?>
<total_response>
 <svalid>36000</svalid>
 <keyword>
 <info>
  <count>1</count>
  <errno>0</errno>
  <nextuptime>1291287160</nextuptime>
  <keep>0</keep>
 </info>
 <result>
  <item>
   <kw><![CDATA[高三历史]]></kw>
  </item>
 </result>
 </keyword>
</total_response>
PHP 相关文章推荐
PHP 和 XML: 使用expat函数(一)
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
php封装的page分页类完整实例
Oct 18 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
tp5 实现列表数据根据状态排序
Oct 18 PHP
详解PHP用mb_string处理windows中文字符
May 26 PHP
PHP输出缓存ob系列函数详解
Mar 11 #PHP
php初始化对象和析构函数的简单实例
Mar 11 #PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 #PHP
php调用c接口无错版介绍
Mar 11 #PHP
PHP goto语句简介和使用实例
Mar 11 #PHP
php调用C代码的实现方法
Mar 11 #PHP
PHP中isset()和unset()函数的用法小结
Mar 11 #PHP
You might like
计数器详细设计
2006/10/09 PHP
PHP动态变静态原理
2006/11/25 PHP
PHP根据两点间的经纬度计算距离
2014/10/31 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Django--权限Permissions的例子
2019/08/28 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
售后服务经理岗位职责
2014/02/25 职场文书
国企干部对照检查材料
2014/08/22 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
在Docker容器中部署SQL Server
2022/04/11 Servers
python标准库ElementTree处理xml
2022/05/20 Python