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入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
PHP生成随机密码类分享
Jun 25 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
php实现的简单日志写入函数
Mar 31 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 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去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
Python与Java间Socket通信实例代码
2017/03/06 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
基于Python fminunc 的替代方法
2020/02/29 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
基于python实现地址和经纬度转换
2020/05/19 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
自我鉴定注意事项
2014/01/19 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2014年药店工作总结
2014/11/20 职场文书
负责培养人意见
2015/06/05 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS