PHP自动提取关键字

本文介绍了使用PHP实现的关键词提取方法,主要思路是通过寻找出现两次以上的词来确定词汇,并进行词频统计。同时,文章指出这种方法存在一些不足,如对歧义处理不够,以及在处理组合词时可能无法正确提取。提供的PHP代码示例中,作者发现由于词的组合,导致某些词的提取不准确,速度也较慢,提出了改进的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不能说是提取关键字了,可以说是取词,根据就是出现2次以上就可以认为是词,做些修改可以提取指定词频的词,效果还不算好,有些高词频的词,由于其会形成组词,这样这个词的子词取代其,因此没有取到

 

基本方法:2个字符构成最小的词,而其的词频必定是从该词的起点构成的词中最大的,通过不断的加字符,路过出现小于这个最大的次品,可以认为这个词到了结束位置,取出这个词,并且把所有的该词占据的位置记录下来,以减少重复判断

 

加了些过滤的标识符---词不能包含标点符号等

 

不足:对歧义没有过多处理,利用的是最大正向遍历,取2个字符假设为初始词,可能是词的一部分,路过出现没有取到应该取到的词(路前面说的组合词,只能证明这个词还可以再分,是由几个词组合而来,按照最小词原则,可以认为这样是可以的)

 

返回数组:

[0] => Array ( [0] => 大话西游 [1] => 2 [2] => Array ( [0] => 1 [1] => 892 ) [3] => 4 )

 

[0] =>词字符串      [1] => 词频          [2] => 该词出现的各个位置           [3] => 词的长度,几个字符

PHP代码:里面的词“周星星”出现了问题,因为前面有  “周星驰“,周星最多出现的,所以还是不好,速度也不行,可能判断重复的数组,修改下用键直接引用会快些

 

<?php 

set_time_limit(0);


//解析字符串中英文支付,成为字符数组,得长度
//$fustr='dddddddddddddgdg大股东广东';//带解析的字符串
function str_arr($fustr,$mudi=1)
{$wz=0;
$arr=array();
while($wz<strlen($fustr)){
$zifu=$fustr[$wz];
if(ord($zifu)>127){$str=$zifu.$fustr[$wz+1];$wz=$wz+2;}


else{$str=$zifu;$wz++;}


$arr[]=$str;//放到数组里


}//end while($wz<strlen($fustr))
if($mudi==1)return $arr;
else return count($arr);
}
//测试
//$arr=str_arr($fustr,$mudi=1);
//print_r($arr);


//end 解析字符串


//截取函数,截取字符串数组,得到部分字符串
//$arr=array();//字符串数组
$ks=0;//截取开始位置
$long=10;//截取长度,多少个字符


function jiequ($arr,$ks,$long=0){
if($ks+$long>count($arr))return false;
$str=';
$maxlen=count($arr);
if($long==0)$end=$maxlen;
else $end=$ks+$long;
for($i=$ks;$i<$end;$i++){
$str.=$arr[$i];
}


return $str;


}//echo jiequ($arr,$ks,$long);




//查询函数,得到从查询位置开始的第一个匹配位置
$wz=0;//查询位置
$arr=array();//字符串数组


$str='gjgg';//目标字符串
$strarr=str_arr($str,1);
function dingwei($arr,$strarr,$kswz){


$len1=count($arr);//总字符串数组长度
$len2=count($strarr);//查询字符串数组长度
$you=0;
$wz=$kswz;
//判断是全等的第一个位置
while($wz+$len2<=$len1){
$isyou=0;
$wz1=$wz;
for($i=0;$i<$len2;$i++){


if($strarr[$i]!=$arr[$wz1]){
$isyou=1;


break;
}//end if($strarr[$i]!=$arr[$wz1])
$wz1++;
}//end for($i=0;$i<count($strarr)


if($isyou==1)$wz++;//位置移1
else {$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值