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中的日期及时间
Nov 23 PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
php下实现农历日历的代码
Mar 07 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
php 常用的系统函数
Feb 07 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 裁剪图片成固定大小代码方法
2009/09/09 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
Django卸载之后重新安装的方法
2017/03/15 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python实现简易通讯录修改版
2018/03/13 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
python实现滑雪者小游戏
2020/02/22 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
jupyter notebook 重装教程
2020/04/16 Python
python属于哪种语言
2020/08/16 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
班级聚会策划书
2014/01/16 职场文书
自荐书范文范例
2014/02/13 职场文书
婚庆答谢词
2015/01/04 职场文书
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python