PHP函数实现从一个文本字符串中提取关键字的方法


Posted in PHP onJuly 01, 2015

本文实例讲述了PHP函数实现从一个文本字符串中提取关键字的方法。分享给大家供大家参考。具体分析如下:

这是一个函数定位接收一个字符串作为参数(连同其他配置可选参数),并且定位该字符串中的所有关键字(出现最多的词),返回一个数组或一个字符串由逗号分隔的关键字。功能正常工作,但我正在改进,因此,感兴趣的朋友可以提出改进意见。

/**
 * Finds all of the keywords (words that appear most) on param $str 
 * and return them in order of most occurrences to less occurrences.
 * @param string $str The string to search for the keywords.
 * @param int $minWordLen[optional] The minimun length (number of chars) of a word to be considered a keyword.
 * @param int $minWordOccurrences[optional] The minimun number of times a word has to appear 
 * on param $str to be considered a keyword.
 * @param boolean $asArray[optional] Specifies if the function returns a string with the 
 * keywords separated by a comma ($asArray = false) or a keywords array ($asArray = true).
 * @return mixed A string with keywords separated with commas if param $asArray is true, 
 * an array with the keywords otherwise.
 */
function extract_keywords($str, $minWordLen = 3, $minWordOccurrences = 2, $asArray = false)
{
  function keyword_count_sort($first, $sec)
  {
    return $sec[1] - $first[1];
  }
  $str = preg_replace('/[^\\w0-9 ]/', ' ', $str);
  $str = trim(preg_replace('/\s+/', ' ', $str));
  $words = explode(' ', $str);
  $keywords = array();
  while(($c_word = array_shift($words)) !== null)
  {
    if(strlen($c_word) <= $minWordLen) continue;
    $c_word = strtolower($c_word);
    if(array_key_exists($c_word, $keywords)) $keywords[$c_word][1]++;
    else $keywords[$c_word] = array($c_word, 1);
  }
  usort($keywords, 'keyword_count_sort');
  $final_keywords = array();
  foreach($keywords as $keyword_det)
  {
    if($keyword_det[1] < $minWordOccurrences) break;
    array_push($final_keywords, $keyword_det[0]);
  }
  return $asArray ? $final_keywords : implode(', ', $final_keywords);
}
//How to use
//Basic lorem ipsum text to extract the keywords
$text = "
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Curabitur eget ipsum ut lorem laoreet porta a non libero. 
Vivamus in tortor metus. Suspendisse potenti. Curabitur 
metus nisi, adipiscing eget placerat suscipit, suscipit 
vitae felis. Integer eu odio enim, sed dignissim lorem. 
In fringilla molestie justo, vitae varius risus lacinia ac. 
Nulla porttitor justo a lectus iaculis ut vestibulum magna 
egestas. Ut sed purus et nibh cursus fringilla at id purus.
";
//Echoes: lorem, suscipit, metus, fringilla, purus, justo, eget, vitae, ipsum, curabitur, adipiscing
echo extract_keywords($text);

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php设计模式 Command(命令模式)
Jun 26 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
php bootstrap实现简单登录
Mar 08 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
浅谈php提交form表单
Jul 01 #PHP
用PHP代码给图片加水印
Jul 01 #PHP
用PHP代码在网页上生成图片
Jul 01 #PHP
PHP文件操作方法汇总
Jul 01 #PHP
浅谈PHP中JSON数据操作
Jul 01 #PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 #PHP
PHP使用flock实现文件加锁的方法
Jul 01 #PHP
You might like
数据库的日期格式转换
2006/10/09 PHP
PHP中for循环语句的几种变型
2007/03/16 PHP
php zend 相对路径问题
2009/01/12 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
php输出形式实例整理
2020/05/05 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
python中对list去重的多种方法
2014/09/18 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
小学生打架检讨书
2014/01/26 职场文书
运动会方阵解说词
2014/02/12 职场文书
工厂车间标语
2014/06/19 职场文书
倡议书格式
2014/08/30 职场文书
贷款承诺书
2015/01/20 职场文书
工程款申请报告
2015/05/15 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript