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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
php分页函数示例代码分享
Feb 24 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
Laravel实现用户注册和登录
Jan 23 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
php支付宝APP支付功能
Jul 29 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开发者的10个技巧
2011/02/25 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
浅析node.js中close事件
2014/11/26 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
美国滑板店:Tactics
2020/11/08 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
幼儿老师求职信
2014/06/30 职场文书
代理词怎么写
2015/05/25 职场文书
教师读书活动心得体会
2016/01/14 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
MySQL创建管理子分区
2022/04/13 MySQL
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android