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中的float类型使用说明
Jul 27 PHP
php数字转汉字代码(算法)
Oct 08 PHP
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
PHP实现多图片上传类实例
Jul 26 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
php设计模式之委托模式
Feb 13 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 PHP
详解PHP PDO简单教程
May 28 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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实现的随机红包算法示例
2017/08/14 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
Jquery把获取到的input值转换成json
2017/05/15 jQuery
jquery+css实现下拉列表功能
2017/09/03 jQuery
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
下载给定网页上图片的方法
2014/02/18 Python
python中redis的安装和使用
2016/12/04 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
pandas带有重复索引操作方法
2018/06/08 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
自主实习接收函
2014/01/13 职场文书
酒店营销策划方案
2014/02/07 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技