php实现自动获取生成文章主题关键词功能的深入分析


Posted in PHP onJune 03, 2013

以前写程序一直在逃避这个问题,tag什么的都是要求使用程序的人自行输入,对于某些懒人及为了程序的体验,则是希望可以有自动生成文章关键词,自动获取文章tag的类似功能,这次为了迎接新的项目,所以捣鼓了一晚上,研究了一下这个功能。
要实现自动获取关键词的功能,大概可以分成三步
1,通过分词算法将标题和内容分别进行分割,提取出关键词和频度。
当前主要的两个算法是中科院的ICTCLAS和隐马尔可夫模型。但这两个都太高端,有一定的门槛,且都是只支持C++/JAVA。基于PHP的当前有两个是值得推荐的PSCWS和HTTPCWS。 SCWS于2008-03-08发布1.0.0 正式版,到现在最新版本已经到了1.0.4。PSCWS是它的PHP版。而HTTPCWS是张宴开发的,之前叫PHPCWS。PHPCWS 先使用“ICTCLAS 3.0 共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。不过很遗憾目前仅支持Linux系统,尚未移植到win平台上。
2,将提取结果与现有词库进行比较,处理,去除无用的词得到最符合规则的关键词。这里主要就是要看词库了,我们可以自己定义词库,也可以使用现有的成熟词库。比如新浪和网易博客都有这个功能,。他们分词应该有不错的词库,因为他们都是大网站,而我呢,区区一个小程序员,不可能搞到什么权威的词库,所以只能从现有的开源程序上入手,看看他们的词库。
3,在处理后的提取结果中选择适当的作为最终的关键词,得到最符合当前内容的关键词,在这个阶段就是具体情况具体分析了,无论如何也不可能达到人的那种智能化。最多是。当前PHP类CMS都自有自己的提取关键词系统。
目前在网络上流传最广的是DEDECMS的分词源码,我做了测试,发现相当的呆,效果很不好。它先设置一个关键词长度,确定获取关键词的数量,然后取词,它认为标题分好的词就是所需关键词,在加上从正文中读取关键词只到达到这个所设置的长度,就是最终关键词了。另外类似“我们”等无意义的词也没有去除掉提取并被列为关键词的频率太高,甚至有时候还会把空格的HTML提出来做为关键词,亟待改进。不过如果作为辅助功能,它已经很好了。而discuz的稍微好一些,但是discuz并没有提供源码,只是提供了一个在线api。
而dede的分词也有好几个版本,最好的应该是最新版的吧,出现频率什么都有了,下面就以dede5.7的分词和discuz的api的结果对比下
测试例子:
$title="THINKPHP官方即将停止对2.0版本的支持";
$body="了更好地做好ThinkPHP框架的开发、维护和支持工作,官方宣布从2012年5月1日起s对2.0及之前版本的维护和支持,为了节能低碳考虑,同时也取消官网的相应版本和文档下载。
就此缅怀那些年,曾经一起开发的ThinkPHP版本吧!
关于ThinkPHP 2.0版本
ThinkPHP诞生于2006年,致力于WEB应用的快速开发,其2.0版本发布于2009年10月1日 ,在之前的1.*版本上完成新的重构和飞跃,当时是一次划时代的版本,为新版奠定了基础,同时也积累了较多的用户群和网站,随着框架的快速更新,和新版2.1、2.2和3.0版本的陆续发布,预示着ThinkPHP的3.0时代到来了,2.0的生命周期宣告结束。但基本上2.0的很多功能都延续或者完善到2.1版本中了,从2.0版本升级到2.1和2.2版本也相对轻松。2.2版本是2.*版本的最终版本,不再更新功能,仅做BUG修复。";
一、dede分词
将结果排序后如下
    ?祟}Array    (
    [THINKPHP] => 1
    [官方] => 1
    [即将] => 1
    [停止] => 1
    [对] => 1
    [2.0] => 1
    [版本] => 1
    [的] => 1
    [支持] => 1
    )
    内容Array    (
    [版本] => 12
    [的] => 12
    [和] => 8
    [ThinkPHP] => 5
    [2.0] => 5
    [也] => 3
    [2.2] => 3
    [2.1] => 3
    [开发] => 3
    [3.0] => 2
    [是] => 2
    [快速] => 2
    [到] => 2
    [发布] => 2
    [维护] => 2
    [之前] => 2
    [了] => 2
    [新版] => 2
    [支持] => 2
    [框架] => 2
    [同时] => 2
    [从] => 2
对此如何取出最终的需要的关键词呢? 初步思路是先去除“的”,“些”这些词,再按照内容的排序顺序,依次看分到是否出现在标题中出现即为所需的,这样可以取出一定量的词最为最终关键词。如上结果我们可以得到
版本 thinkphp 2.0 支持 停止
五个关键词。看起来结果还是可以接受的。
二、在来看discuz的,利用api得到的是一个xml文档,解析后得到的关键词是
的、快速、版本升级、开发、用户
五个词,第一个是“的”......
对比这两种方式发现第一种dede+后续处理的较为接近文档的内容,应该是稍好一些,而discuz的偏离了文章的主题,但是其取到词有一定的热门性

PHP 相关文章推荐
关于php fread()使用技巧
Jan 22 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
解析PHP的session过期设置
Jun 29 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 #PHP
PHP Error与Logging函数的深入理解
Jun 03 #PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 #PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 #PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 #PHP
基于php在各种web服务器的运行模式详解
Jun 03 #PHP
PHP运行模式的深入理解
Jun 03 #PHP
You might like
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
Vue filter介绍及详细使用
2018/04/04 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
python中if嵌套命令实例讲解
2021/02/25 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
网络研修随笔感言
2014/02/17 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
行风评议整改报告
2014/11/06 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python