生活随笔
收集整理的這篇文章主要介紹了
使用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}: {$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> <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=
"提交進行分詞" /> <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,對應存入關聯表中,這樣就完成了添加的步驟。
編輯的自動標簽添加:
首先步驟和之前的一樣,不過在添加標簽進入到標簽關聯表中的時候需要將原先的數據全部刪除,再添加即可。
總結
以上是生活随笔為你收集整理的使用php自动将文章标题或内容进行分词,添加和删除标签功能实例!的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。