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中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
PHP insert语法详解
Jun 07 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
php判断当前操作系统类型
Oct 28 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
php用户登录之cookie信息安全分析
May 13 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 PHP
laravel实现前后台路由分离的方法
Oct 13 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
smarty中post用法实例
2014/11/28 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python的依赖管理的实现
2019/05/14 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
会计专业自荐信范文
2013/12/02 职场文书
捐书活动总结
2014/05/04 职场文书
2014年百日安全生产活动总结
2014/05/04 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2015年学校工作总结范文
2015/04/20 职场文书