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

   本文实例讲述了PHP函数实现从一个文本字符串中提取关键字的方法。分享给大家供大家参考。具体分析如下:

  这是一个函数定位接收一个字符串作为参数(连同其他配置可选参数),并且定位该字符串中的所有关键字(出现最多的词),返回一个数组或一个字符串由逗号分隔的关键字。功能正常工作,但我正在改进,因此,感兴趣的朋友可以提出改进意见。

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

/**
* 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程序设计有所帮助。

时间: 2024-09-22 17:21:56

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

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

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

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

  本文实例讲述了C++通过自定义函数找出一个整数数组中第二大数的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 const int MINNUMBER = -32767 ; //2字节的Int 0x8000-1, //4字节的Int 0x80000000-1 -2147483647 int find_sec_max( int data[] , int count) { int

求一个在字符串中识别括号并删除括号及其中内容的函数

问题描述 求一个在字符串中识别括号并删除括号及其中的内容的函数括号包括 大中小 3种括号.输入为 1个字符串 s="我是一个人(中国人)[真的]{确定}";输出为 result = "我是一个人"; 解决方案 String s="我是一个人(中国人)aaa[真的]bbbb{确定}"; s=s.replaceAll("\(.*?\)|\{.*?}|\[.*?]|(.*?)", "");System.out.p

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

以下是对在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

Delphi中从字符串中提取单词及从字符串中提取汉字的函数

{从字符串中提取单词的函数} procedure StrToWordList(str: string; var List: TStringList); var p: PChar; i: Integer; begin if List = nil then List := TStringList.Create; List.Clear; {去除重复} List.Sorted := True; List.Duplicates := dupIgnore; p := PChar(str); {把单词以外的字

api c-怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件

问题描述 怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件 怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件

jsp怎么根据文本框的值来查询数据库并把相应内容显示到另一个文本框中

问题描述 jsp怎么根据文本框的值来查询数据库并把相应内容显示到另一个文本框中 解决方案 url: path+"/operStat/baseInfoData", 楼上这里的查询访问的地址,这时如果是MVC模式的话,还要在controller层中写写一个查询数据库的方法,然后根据前台前过来的查询条件data:{"deviceCode":port},来进行查询,并将结果返回.前台自动对应返回的结果到相关的框框中去. 解决方案二: 补充一下责任部门在数据库中是数字,只有i

javascript-在js中 如何用Jquery 获取一个文本框中的值 文本框中ID=A

问题描述 在js中 如何用Jquery 获取一个文本框中的值 文本框中ID=A 在js中 如何用Jquery 获取一个文本框中的值 文本框的ID=a 解决方案 $("#a").val()就是获取ID=A 的input的value值 解决方案二: $("#A").val() 解决方案三: js与jQuery获取文本框的值js获取文本框值JS获取文本框的值----------------------

《Excel 职场手册:260招菜鸟变达人》一第 40 招 从字母和数字的混合字符串中提取数字

第 40 招 从字母和数字的混合字符串中提取数字 从字母和数字的混合字符串中提取数字,一般用复杂的函数公式完成,本招介绍一个很简单的方法来实现,如图1-2-51所示,要求把A列的数字提取出来放在B-D列. 操作步骤: Step1 复制A列的字符到E列,然后把E列的列宽调整为一个汉字大小的宽度,如图1-2-52所示. Step2 选中E列,选择菜单开始→编辑→填充→两端对齐,如图1-2-53所示,执行操作后字符串和数字就会被拆分显示,如图1-2-54所示. Step3 从E列的第一个数字按组合键[