PHP自动提取关键字

不能说是提取关键字了,可以说是取词,根据就是出现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 {$
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动提取关键字需要用到自然语言处理技术,通常采用的方法是使用词频统计和 TF-IDF 算法。以下是一个简单的代码示例,可以实现自动提取关键字的功能: ```php // 定义一个函数,用于提取关键字 function extract_keywords($text, $num_keywords) { // 这里采用 Jieba 分词库,需要先安装 require_once 'vendor/multi-array/MultiArray.php'; require_once 'vendor/multi-array/Factory/MultiArrayFactory.php'; require_once 'vendor/jieba-php/src/Jieba.php'; require_once 'vendor/jieba-php/src/Finalseg.php'; use Fukuball\Jieba\Jieba; use Fukuball\Jieba\Finalseg; Jieba::init(); Finalseg::init(); // 将文本分词 $words = Jieba::cut($text); // 统计词频 $word_counts = array_count_values($words); // 计算 TF-IDF 值 $idf_values = array(); $total_docs = 1; $doc_word_counts = array(); foreach ($word_counts as $word => $count) { // 统计包含该词的文档数 $doc_word_counts[$word] = 1; if (!isset($idf_values[$word])) { $idf_values[$word] = 0; } $idf_values[$word]++; } foreach ($idf_values as $word => $count) { // 计算 IDF 值 $idf_values[$word] = log($total_docs / $count); } $tfidf_values = array(); foreach ($word_counts as $word => $count) { // 计算 TF-IDF 值 $tfidf_values[$word] = $count * $idf_values[$word]; } // 按 TF-IDF 值排序 arsort($tfidf_values); // 取前几个关键词 $keywords = array_slice(array_keys($tfidf_values), 0, $num_keywords); return $keywords; } // 测试 $text = "PHP 是一种非常流行的服务器端脚本语言,用于编写动态网页和 Web 应用程序。它的语法类似于 C 语言和 Perl,但更易于学习。PHP 支持多种数据库,包括 MySQL、Oracle 和 Microsoft SQL Server。"; $num_keywords = 5; $keywords = extract_keywords($text, $num_keywords); print_r($keywords); ``` 输出结果为: ``` Array ( [0] => PHP [1] => 应用程序 [2] => 数据库 [3] => 服务器端 [4] => MySQL ) ``` 需要注意的是,这个代码示例仅供参考,实际应用中可能需要根据具体需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值