PHP實現中文全文搜尋的原理介紹

2020-07-16 10:05:33
一般的開發中的相關文章或內容都是通過關鍵詞標籤、標題來實現相關搜尋的,但這樣是搜尋基本會使用低效的like語句,由於效率低下在稍微大一點的專案開發中我們無法進行文章或者相關內容的詳情欄位搜尋(伺服器壓力過大、效率極低)。

常見的解決方案

1、sphinx + coreseek

優點 : 技術成熟、穩定

缺點 : sphinx 不支援中文 coressk 目前已經停止維護【如果是純英文環境 sphinx 極佳】

2、迅搜(Xunsearch)

優點 : 技術成熟、穩定

缺點 : 安裝過程複雜,設定不夠靈活

3、mysql 全文搜尋

有點:安裝方便、效率高

缺點:對中文支援不夠好

來自hcoder的解決方案 (分詞 + 自主設定)

優點 : 安裝簡單(php 元件)、底層由開發者自行編寫更清晰底層、更容易的優化

缺點 : 需要開發者有 php + mysql 基礎,需要自己編寫整個過程的程式碼

原理

1、獲取詞語環節
文章資料表 -> 逐行讀取文章資訊 -> 組合所有文字內容 -> 分詞、去重 -> 記錄到新的資料表
2、搜尋環節
搜尋鍵碼記錄表 -> 合併文章資料 -> 去重 -> 展示資料

使用到的第三方元件(scws)

http://www.xunsearch.com/scws/

SCWS 是 Simple Chinese Word Segmentation 的首字母縮寫(即:簡易中文分詞系統)。

這是一套基於詞頻詞典的機械式中文分詞引擎,它能將一整段的中文文字基本正確地切分成詞。 詞是中文的最小語素單位,但在書寫時並不像英語會在詞之間用空格分開, 所以如何準確並快速分詞一直是中文分詞的攻關難點。

SCWS 採用純 C 語言開發,不依賴任何外部庫函數,可直接使用動態連結庫嵌入應用程式, 支援的中文編碼包括 GBK、UTF-8 等。此外還提供了 PHP 擴充套件模組, 可在 PHP 中快速而方便地使用分詞功能。

分詞演算法上並無太多創新成分,採用的是自己採集的詞頻詞典,並輔以一定的專有名稱,人名,地名, 數位年代等規則識別來達到基本分詞,經小範圍測試準確率在 90% ~ 95% 之間, 基本上能滿足一些小型搜尋引擎、關鍵字提取等場合運用。首次雛形版本發布於 2005 年底。

SCWS 由 hightman 開發, 並以 BSD 許可協定開源發布,原始碼託管在 github。

以上就是PHP實現中文全文搜尋的原理介紹的詳細內容,更多請關注TW511.COM其它相關文章!