TShopping

 找回密碼
 註冊
搜索
查看: 1255|回復: 0

[教學] php 中文分詞和模糊搜尋 關鍵字

[複製鏈接]
發表於 2012-12-14 17:31:31 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
在java中做全文搜索的話可以使用Lucene以及中文分詞插件。在php中做全文搜素引擎可以使用Sphinx,中文分詞也有很多選擇,使用scws是不錯的選擇。scws的全稱是Simple Chinese Words Segmentation。使用scws有三種方式:一種是使用C語言編寫的scws並在源碼基礎上進行拓展,速度最快但是不易拓展;一種是安裝scws針對php編寫的插件,然後就可以直接在php中調用的scws的api函數,本文介紹的就是這種方法;最後一種是使用php重寫的scws函數庫,優點是不需要安裝額外的插件,缺點是程序的運行效率很低。(具體信息參見http://www.ftphp.com/scws)
在php中安裝完scws插件後,執行如下語句:
$str = "在數據庫中儲存層次數據";
$temp = array();
$cws = scws_new();
$cws->set_multi(1);
$cws->set_charset('utf8');
$cws->send_text($str);
while ($tmp = $cws->get_result())
{
        $temp[] = $tmp;
}
$arrWhere = array();
$t = array();
foreach($temp as $key=>$value){
        foreach($value as $item){
                $t[] = $item['word'];
        }
}
pirnt_r($t)
程序運行後輸出:

Array
(
[0] => 在
[1] => 數據庫
[2] => 數據
[3] => 中
[4] => 儲存
[5] => 層次
[6] => 數據
)



可以看到分詞結果中有重疊的地方,通過調節$cws->set_multi(1);中參數的值可以調整分詞結果的顆粒度。例如設置$cws->set_multi(2);後輸出結果為:

Array
(
[0] => 在
[1] => 數據庫
[2] => 數據
[3] => 據庫
[4] => 中
[5] => 儲存
[6] => 層次
[7] => 數據
)

使用這個中文分詞插件可以做一些應用,比如交友網站上允許用戶輸入模糊搜索信息,用戶可以輸入「浙江杭州22歲有圖」來搜索用戶,經過分詞輸出數組:

Array
(
[0] => 浙江
[1] => 杭州
[2] => 22
[3] => 歲
[4] => 有
[5] => 圖
)

再在經過一些語義分析後(進行這種限定較多的語義分析並不複雜),就可以得到對應的數據庫查詢條件:
select * from members where str_provicne="浙江" and str_city="杭州" and int_age=22 and has_pic=1


 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-9 19:54 , Processed in 0.053015 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表