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 相关文章推荐
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php二维数组排序详解
Nov 06 PHP
php中数字0和空值的区别分析
Jun 05 PHP
php购物车实现方法
Jan 03 PHP
PHP多文件上传实例
Jul 09 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
php 实现银联商务H5支付的示例代码
Oct 12 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
simplehtmldom Doc api帮助文档
2012/03/26 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
php实现微信支付之现金红包
2018/05/30 PHP
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
通过实例解析python描述符原理作用
2020/01/22 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
母亲节感恩活动记录
2014/03/16 职场文书
安全责任书怎么写
2014/07/28 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python