生活随笔
收集整理的這篇文章主要介紹了
使用php自动将文章标题或内容进行分词,添加和删除标签功能实例!
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
功能:做文章的自動(dòng)分詞添加標(biāo)簽功能
插件:PHPAnalysis分詞插件 點(diǎn)擊下載
兼容:thinkphp laravel yii 原生及常用框架
下面講述一下開發(fā)流程:
步驟1:下載文件后將插件文件放入你的框架拓展目錄或者相關(guān)的使用目錄中
步驟2 :將分詞類引用,同時(shí)命名,這里按你使用的框架結(jié)構(gòu)來(lái)做,沒有標(biāo)準(zhǔn)。
demo中的演示代碼:
<?php
ini_set(
'display_errors',
'On');
ini_set(
'memory_limit',
'64M');
error_reporting(E_ALL);
$t1 =
$ntime = microtime(
true);
$endtime =
'未執(zhí)行任何操作,不統(tǒng)計(jì)!';
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}: {$m} MB 用時(shí):{$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(
'初始化對(duì)象',
$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(
'執(zhí)行分詞',
$memory_info);
$okresult =
$pa->GetFinallyResult(
' ',
$do_prop);print_memory(
'輸出分詞結(jié)果',
$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月,美國(guó)國(guó)際消費(fèi)電子展 (CES)上,聯(lián)想將展出一款基于ARM架構(gòu)的新產(chǎn)品,這有可能是傳統(tǒng)四大PC廠商首次推出的基于ARM架構(gòu)的消費(fèi)電子產(chǎn)品,也意味著在移動(dòng)互聯(lián)網(wǎng)和產(chǎn)業(yè)融合趨勢(shì)下,傳統(tǒng)的PC芯片霸主英特爾正在遭遇挑戰(zhàn)。
11月12日,聯(lián)想集團(tuán)副總裁兼中國(guó)區(qū)總裁夏立向本報(bào)證實(shí),聯(lián)想基于ARM架構(gòu)的新產(chǎn)品正在籌備中。
英特爾新聞發(fā)言人孟軼嘉表示,對(duì)第三方合作伙伴信息不便評(píng)論。
正面交鋒
ARM內(nèi)部人士透露,11月5日,ARM高級(jí)副總裁lanDrew參觀了聯(lián)想研究院,拜訪了聯(lián)想負(fù)責(zé)消費(fèi)產(chǎn)品的負(fù)責(zé)人,進(jìn)一步商討基于ARM架構(gòu)的新產(chǎn)品。ARM是英國(guó)芯片設(shè)計(jì)廠商,全球幾乎95%的手機(jī)都采用ARM設(shè)計(jì)的芯片。
據(jù)悉,這是一款采用高通芯片(基于ARM架構(gòu))的新產(chǎn)品,高通產(chǎn)品市場(chǎng)總監(jiān)錢志軍表示,聯(lián)想對(duì)此次項(xiàng)目很謹(jǐn)慎,對(duì)于產(chǎn)品細(xì)節(jié)不方便透露。
夏立告訴記者,聯(lián)想研究院正在考慮多種方案,此款基于ARM架構(gòu)的新產(chǎn)品應(yīng)用鄰域多樣化,并不是替代傳統(tǒng)的PC,而是更豐富的滿足用戶的需求。目前,客戶調(diào)研還沒有完成,“設(shè)計(jì)、研發(fā)更前瞻一些,最終還要看市場(chǎng)、用戶接受程度?!?#34;;
?>
<!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>分詞測(cè)試</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> <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'" :
'');
?>/>新詞識(shí)別<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'" :
'');
?>/>詞性標(biāo)注<input type=
'checkbox' name=
'pri_dict' value=
'1' <?php echo (
$pri_dict ?
"checked='1'" :
'');
?>/>預(yù)載全部詞條<br/><input type=
"submit" name=
"Submit" value=
"提交進(jìn)行分詞" /> <input type=
"reset" name=
"Submit2" value=
"重設(shè)表單數(shù)據(jù)" />
</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>調(diào)試信息:</b>
<hr />
<font color=
'blue'>字串長(zhǎng)度:</font>
<?php echo $slen;
?>K <font color=
'blue'>自動(dòng)識(shí)別詞:</font>
<?php echo (
isset(
$pa_foundWordStr)) ?
$pa_foundWordStr :
'';
?><br />
<hr />
<font color=
'blue'>內(nèi)存占用及執(zhí)行時(shí)間:</font>(表示完成某個(gè)動(dòng)作后正在占用的內(nèi)存)<hr />
<?php echo $memory_info;
?>
總用時(shí):
<?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;'>請(qǐng)選擇要進(jìn)行的操作:<br />";echo "1、<a href='?ac=make'>用原始文件(dict/not-build/base_dic_full.txt)生成一個(gè)標(biāo)準(zhǔn)詞典;</a><br />";echo "2、<a href='?ac=revert'>從默認(rèn)詞典(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 "完成詞典創(chuàng)建!";exit();
}
else
{$pa = new PhpAnalysis('utf-8', 'utf-8', true);$pa->ExportDict('base_dic_source.txt');echo "完成反編譯詞典文件,生成的文件為:base_dic_source.txt !";exit();
}
?>
以上是官方的代碼實(shí)例,但這里只講到了分詞,沒有做的分詞后將標(biāo)簽添加進(jìn)數(shù)據(jù)庫(kù),這里博主就跟大家簡(jiǎn)單描述一下思路:
添加的自動(dòng)標(biāo)簽添加:
首先將分到的詞存入一個(gè)數(shù)組中,再后將此數(shù)組進(jìn)行數(shù)據(jù)庫(kù)的查詢,并發(fā)打的情況俠建議建立數(shù)據(jù)緩存,如果沒有重復(fù)的則添加并反回id,有重復(fù)的則返回標(biāo)簽id,這里返回的id全部收集起來(lái),當(dāng)然這里你還需準(zhǔn)備兩張數(shù)據(jù)表,一張標(biāo)簽表,一張關(guān)聯(lián)表,將獲取到的數(shù)組,和文章的id,對(duì)應(yīng)存入關(guān)聯(lián)表中,這樣就完成了添加的步驟。
編輯的自動(dòng)標(biāo)簽添加:
首先步驟和之前的一樣,不過(guò)在添加標(biāo)簽進(jìn)入到標(biāo)簽關(guān)聯(lián)表中的時(shí)候需要將原先的數(shù)據(jù)全部刪除,再添加即可。
總結(jié)
以上是生活随笔為你收集整理的使用php自动将文章标题或内容进行分词,添加和删除标签功能实例!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。