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 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
php jquery 实现新闻标签分类与无刷新分页
Dec 18 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
Yii调试SQL的常用方法
Jul 09 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
php+ajax实现商品对比功能示例
Apr 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
用php来检测proxy
2006/10/09 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python中的异常处理简明介绍
2015/04/13 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
python集合能干吗
2020/07/19 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
文员岗位职责
2015/02/04 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
56句经典英文座右铭
2019/08/09 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python
浅谈MySQL中的六种日志
2022/03/23 MySQL
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技