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里得到前天和昨天的日期的代码
Aug 16 PHP
php去除头尾空格的2种方法
Mar 16 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
yii添删改查实例
Nov 16 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 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
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
laravel请求参数校验方法
2019/10/10 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
python利用lxml读写xml格式的文件
2017/08/10 Python
pymongo中group by的操作方法教程
2019/03/22 Python
django自定义模板标签过程解析
2019/12/14 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
python -v 报错问题的解决方法
2020/09/15 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
行政助理求职自荐信
2013/10/26 职场文书
八年级语文教学反思
2014/02/11 职场文书
工程质量承诺书范文
2014/03/27 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
离婚协议书怎么写
2014/09/12 职场文书
学习三严三实心得体会
2014/10/13 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
电视新闻稿
2015/07/17 职场文书
优秀新员工事迹材料
2019/05/13 职场文书