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 相关文章推荐
一个基于PDO的数据库操作类(新) 一个PDO事务实例
Jul 03 PHP
Apache中php.ini的设置方法
Feb 28 PHP
php导入模块文件分享
Mar 17 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
php支持断点续传、分块下载的类
May 02 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
php支付宝系列之电脑网站支付
May 30 PHP
tp5递归 无限级分类详解
Oct 18 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
PHP设计模式 注册表模式
2012/02/05 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
过虑特殊字符输入的js代码
2010/08/05 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
vue源码nextTick使用及原理解析
2019/08/13 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
《唯一的听众》教学反思
2014/02/20 职场文书
铲车司机岗位职责
2014/03/15 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
高考升学宴主持词
2019/06/21 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
Golang map映射的用法
2022/04/22 Golang