使用php自动将文章标题或内容进行分词,添加和删除标签功能实例!

功能:做文章的自动分词添加标签功能
插件:PHPAnalysis分词插件 点击下载
兼容:thinkphp laravel yii 原生及常用框架

下面讲述一下开发流程:
步骤1:下载文件后将插件文件放入你的框架拓展目录或者相关的使用目录中
这里写图片描述
步骤2 :将分词类引用,同时命名,这里按你使用的框架结构来做,没有标准。
demo中的演示代码:

<?php

// 严格开发模式
ini_set('display_errors', 'On');
ini_set('memory_limit', '64M');
error_reporting(E_ALL);

$t1 = $ntime = microtime(true);
$endtime = '未执行任何操作,不统计!';
function print_memory($rc, &$infostr)
{
    global $ntime;
    $cutime = microtime(true);
    $etime = sprintf('%0.4f', $cutime - $ntime);
    $m = sprintf('%0.2f', memory_get_usage()/1024/1024);
    $infostr .= "{$rc}: &nbsp;{$m} MB 用时:{$etime} 秒<br />\n";
    $ntime = $cutime;
}

header('Content-Type: text/html; charset=utf-8');

$memory_info = '';
print_memory('没任何操作', $memory_info);

require_once 'phpanalysis.class.php';

$str = (isset($_POST['source']) ? $_POST['source'] : '');

$loadtime = $endtime1  = $endtime2 = $slen = 0;

$do_fork = $do_unit = true;
$do_multi = $do_prop = $pri_dict = false;

if($str != '')
{
    //岐义处理
    $do_fork = empty($_POST['do_fork']) ? false : true;
    //新词识别
    $do_unit = empty($_POST['do_unit']) ? false : true;
    //多元切分
    $do_multi = empty($_POST['do_multi']) ? false : true;
    //词性标注
    $do_prop = empty($_POST['do_prop']) ? false : true;
    //是否预载全部词条
    $pri_dict = empty($_POST['pri_dict']) ? false : true;

    $tall = microtime(true);

    //初始化类
    PhpAnalysis::$loadInit = false;
    $pa = new PhpAnalysis('utf-8', 'utf-8', $pri_dict);
    print_memory('初始化对象', $memory_info);

    //载入词典
    $pa->LoadDict();
    print_memory('载入基本词典', $memory_info);    

    //执行分词
    $pa->SetSource($str);
    $pa->differMax = $do_multi;
    $pa->unitWord = $do_unit;

    $pa->StartAnalysis( $do_fork );
    print_memory('执行分词', $memory_info);

    $okresult = $pa->GetFinallyResult(' ', $do_prop);
    print_memory('输出分词结果', $memory_info);

    $pa_foundWordStr = $pa->foundWordStr;

    $t2 = microtime(true);
    $endtime = sprintf('%0.4f', $t2 - $t1);

    $slen = strlen($str);
    $slen = sprintf('%0.2f', $slen/1024);

    $pa = '';

}

$teststr = "2010年1月,美国国际消费电子展 (CES)上,联想将展出一款基于ARM架构的新产品,这有可能是传统四大PC厂商首次推出的基于ARM架构的消费电子产品,也意味着在移动互联网和产业融合趋势下,传统的PC芯片霸主英特尔正在遭遇挑战。
11月12日,联想集团副总裁兼中国区总裁夏立向本报证实,联想基于ARM架构的新产品正在筹备中。
英特尔新闻发言人孟轶嘉表示,对第三方合作伙伴信息不便评论。
正面交锋
ARM内部人士透露,11月5日,ARM高级副总裁lanDrew参观了联想研究院,拜访了联想负责消费产品的负责人,进一步商讨基于ARM架构的新产品。ARM是英国芯片设计厂商,全球几乎95%的手机都采用ARM设计的芯片。
据悉,这是一款采用高通芯片(基于ARM架构)的新产品,高通产品市场总监钱志军表示,联想对此次项目很谨慎,对于产品细节不方便透露。
夏立告诉记者,联想研究院正在考虑多种方案,此款基于ARM架构的新产品应用邻域多样化,并不是替代传统的PC,而是更丰富的满足用户的需求。目前,客户调研还没有完成,“设计、研发更前瞻一些,最终还要看市场、用户接受程度。”";

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>分词测试</title>
</head>
<body>
<table width='90%' align='center'>
<tr>
    <td>    

<hr size='1' />

<form id="form1" name="form1" method="post" action="?ac=done" style="margin:0px;padding:0px;line-height:24px;">
  <b>源文本:</b>&nbsp; <a href="dict_build_new.php" target="_blank">[更新词典]</a> <br/>
    <textarea name="source" style="width:98%;height:150px;font-size:14px;"><?php echo (isset($_POST['source']) ? $_POST['source'] : $teststr); ?></textarea>
    <br/>
    <input type='checkbox' name='do_fork' value='1' <?php echo ($do_fork ? "checked='1'" : ''); ?>/>岐义处理
    <input type='checkbox' name='do_unit' value='1' <?php echo ($do_unit ? "checked='1'" : ''); ?>/>新词识别
    <input type='checkbox' name='do_multi' value='1' <?php echo ($do_multi ? "checked='1'" : ''); ?>/>多元切分
    <input type='checkbox' name='do_prop' value='1' <?php echo ($do_prop ? "checked='1'" : ''); ?>/>词性标注
    <input type='checkbox' name='pri_dict' value='1' <?php echo ($pri_dict ? "checked='1'" : ''); ?>/>预载全部词条
    <br/>
    <input type="submit" name="Submit" value="提交进行分词" />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="reset" name="Submit2" value="重设表单数据" />
</form>
<br />
<textarea name="result" id="result" style="width:98%;height:120px;font-size:14px;color:#555"><?php echo (isset($okresult) ? $okresult : ''); ?></textarea>
<br /><br />
<b>调试信息:</b>
<hr />
<font color='blue'>字串长度:</font><?php echo $slen; ?>K <font color='blue'>自动识别词:</font><?php echo (isset($pa_foundWordStr)) ? $pa_foundWordStr : ''; ?><br />
<hr />
<font color='blue'>内存占用及执行时间:</font>(表示完成某个动作后正在占用的内存)<hr />
<?php echo $memory_info; ?>
总用时:<?php echo $endtime; ?> 秒
</td>
</tr>
</table>
</body>
</html>

dict_build中的演示代码:

<?php
//编译词库
ini_set('memory_limit', '128M');
error_reporting(E_ALL);
header('Content-Type: text/html; charset=utf-8');
require_once('phpanalysis.class.php');
$dicAddon = dirname(__FILE__).'/dict/not-build/base_dic_full.txt';

if( empty($_GET['ac']) )
{
    echo "<div style='line-height:28px;'>请选择要进行的操作:<br />";
    echo "1、<a href='?ac=make'>用原始文件(dict/not-build/base_dic_full.txt)生成一个标准词典;</a><br />";
    echo "2、<a href='?ac=revert'>从默认词典(dict/base_dic_full.dic),反编译出原始文件。</a></div>";
    exit();
}

if( $_GET['ac']=='make' )
{
    PhpAnalysis::$loadInit = false;
    $pa = new PhpAnalysis('utf-8', 'utf-8', false);
    $pa->MakeDict( $dicAddon );
    echo "完成词典创建!";
    exit();
}
else
{
    $pa = new PhpAnalysis('utf-8', 'utf-8', true);
    $pa->ExportDict('base_dic_source.txt');
    echo "完成反编译词典文件,生成的文件为:base_dic_source.txt !";
    exit();
}
?> 

以上是官方的代码实例,但这里只讲到了分词,没有做的分词后将标签添加进数据库,这里博主就跟大家简单描述一下思路:
添加的自动标签添加:
首先将分到的词存入一个数组中,再后将此数组进行数据库的查询,并发打的情况侠建议建立数据缓存,如果没有重复的则添加并反回id,有重复的则返回标签id,这里返回的id全部收集起来,当然这里你还需准备两张数据表,一张标签表,一张关联表,将获取到的数组,和文章的id,对应存入关联表中,这样就完成了添加的步骤。
编辑的自动标签添加:
首先步骤和之前的一样,不过在添加标签进入到标签关联表中的时候需要将原先的数据全部删除,再添加即可。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任聪聪

创作不易,你的打赏是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值