PHP函数实现从一个文本字符串中提取关键字的方法

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • PHP中使用strpos函数实现屏蔽敏感关键字功能

    现在网络信息监管很严格,特别是屏蔽关键字.特别是现在WEB2.0时代,网站的内容几乎都是来自网民发布,站长管理即可.如果你希望别人在你站点禁止发布某个关键字,那么就需要预先做处理.用PHP做关键字屏蔽的功能样式有多种多样,如正则是最普遍的一种,这里就不一一例举,本文介绍使用PHP函数strpos屏蔽关键字的功能. 思路: 一.把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少. 二.PHP读取关键字文本,存入一个数组 三.遍历关键字数组,挨个用strpos函数去看看内容有没有关键字

  • php 多关键字 高亮显示实现代码

    项目结构: 开始搜索:   这里搜索关键字("大""这") 搜索结果:  高亮显示 项目所需数据库结构: 实现代码: conn.php 复制代码 代码如下: <?php $conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误"); mysql_select_db("form", $conn

  • PHP实现多关键字加亮功能

    本文主要介绍的是PHP实现多关键字加亮功能,可以实现在搜索的时候进行高亮提醒,具体实现代码如下: 项目结构: 搜索结果:  高亮显示 项目所需数据库结构: 实现代码: conn.php <?php $conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误"); mysql_select_db("form", $conn); mys

  • php站内搜索并高亮显示关键字的实现代码

    复制代码 代码如下: <?php require_once 'sqlTools.class.php';//封装类,可执行dql.dml语句 $info=$_POST['info']; $sql="select name,password,email from user_500 where name like '%$info%' or password like '%$info%' or email like '%$info%'"; $sqlTools=new SqlTools()

  • PHP函数实现从一个文本字符串中提取关键字的方法

    本文实例讲述了PHP函数实现从一个文本字符串中提取关键字的方法.分享给大家供大家参考.具体分析如下: 这是一个函数定位接收一个字符串作为参数(连同其他配置可选参数),并且定位该字符串中的所有关键字(出现最多的词),返回一个数组或一个字符串由逗号分隔的关键字.功能正常工作,但我正在改进,因此,感兴趣的朋友可以提出改进意见. /** * Finds all of the keywords (words that appear most) on param $str * and return them

  • C++通过自定义函数找出一个整数数组中第二大数的方法

    本文实例讲述了C++通过自定义函数找出一个整数数组中第二大数的方法.分享给大家供大家参考.具体实现方法如下: const int MINNUMBER = -32767 ; //2字节的Int 0x8000-1, //4字节的Int 0x80000000-1 -2147483647 int find_sec_max( int data[] , int count) { int maxnumber = data[0] ; int sec_max = MINNUMBER ; for ( int i =

  • php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】

    本文实例讲述了php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法.分享给大家供大家参考,具体如下: 下面这几个方法将能够帮你解决这个问题. PHP版将html中的<br />换行符转换为文本框中的换行符: 代码如下: function br2nl($text){ return preg_replace('/<br\\s*?\/??>/i','',$text); } 或者 代码如下: function br2nl($text){ $text=preg_r

  • 在SQL中获取一个长字符串中某个字符串出现次数的实现方法

    在SQL中获取一个长字符串中某个字符串出现次数的实现方法 比如有个字符串: X-BGS-2010-09-15-001 我想知道其中'-'出现的次数,可以用下面的方法实现,而不需要复杂的一个个字符分析. declare @a varchar(100)set @a='X-BGS-2010-09-15-001'select len(replace(@a,'-','--'))-len(@a) 通俗一点讲就是 如果要判断表a中的 字段b中存在几个字母c的话,可以这么写 select len(replace

  • 通过一个map替换字符串中指定的字符变量方法

    项目中需要生成一个合约,存放在mysql对应的text类型的属性里, 合约的内容对于每个用户来说大致都一样,但有几个地方需要替换成对应的信息, 比如,甲方,乙方的名字,合约的日期,合约的金额. 本来想找个第三方的jar包来实现这个功能,但找了很久都没有合适的,于是自己写了个简单的方法. package com.test; import java.util.HashMap; import java.util.Map; public class StringFormat { public stati

  • 从pandas一个单元格的字符串中提取字符串方式

    以titanic数据集为例. 其中name列是字符串,现在想从其中提取title作为新的一列. 例如: # create new Title column df['Title'] = df['Name'].str.extract('([A-Za-z]+)\.', expand=True) 提取其中的title作为新的一列. 以上就是对从pandas的单元格中提取字符串的认识. 这篇从pandas一个单元格的字符串中提取字符串方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多

  • PHP实现统计所有字符在字符串中出现次数的方法

    本文实例讲述了PHP实现统计所有字符在字符串中出现次数的方法.分享给大家供大家参考,具体如下: 先来看看效果: 算法: 循环一次字符串(本例的$str),把出现过的字符串记录在一个数组(如本例的$strRecord)内,如果已经此记录函数已经有,则不记录: 在每个字符串时,拿来与记录数组的值进行比较(本例的$strRecord[]['key']),如果记录里的某个值和这个字符串一样,就记录次数+1(本例的$strRecord[]['count']); 当然,设置一个变量,默认为false(如本例

  • java从字符串中提取数字的简单实例

    随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法,正则表达式,集合类,还有就是String类提供的方法. 1 String类提供的方法: package 测试练习; import Java.util.*; public class get_StringNum { /** *2016.10.25 */ public static void main(Strin

  • python正则表达式从字符串中提取数字的思路详解

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## \D 匹配任意非数字字符. ## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符). ## x* 匹配0次或者多次 x 字符. ## x+ 匹配1次或者多次 x 字符. ## x{n,m} 匹配 x 字符,至少 n 次,至多 m 次. ## (a|b|c) 要么匹配

  • PHP字符串中提取文件名的实例方法

    第一种: 获取不带后缀的文件名,直接上代码: 就是直接用basename()函数就可以返回路径中的文件名部分,其语法是"basename(path,suffix)",其中参数suffix就表示文件扩展名,如果文件有这个参数,则不会输出这个扩展名,显然这个参数我们设置是是".php". <?php $path = 'www.example.com/public_html/index.php'; $file = basename($path, ".php

随机推荐