|
在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
|
|