首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 整合 SCWS 實現中文分詞搜索完整教程

     編輯:PHP 相關知識

環境準備

  1. 下載 SCWS 擴展包(含 php_scws.dll、詞典 dict.utf8.xdb、規則 rules.utf8.ini),解壓至如 E:/wamp/scws
  2. 配置 php.ini:
extension = php_scws.dll
scws.default.charset = utf8
scws.default.fpath = "E:/wamp/scws"

分詞核心代碼

<?php
$scws = scws_new();
$scws->set_charset('utf8');
$scws->add_dict(ini_get('scws.default.fpath') . '/dict.utf8.xdb');
$scws->set_rule(ini_get('scws.default.fpath') . '/rules.utf8.ini');
$scws->set_duality(0); // 散字二元
$scws->set_ignore(0);  // 忽略標點
$scws->set_multi(0);

$keywords = '要搜索的內容';
$scws->send_text($keywords);
while ($tmp = $scws->get_result()) {
    foreach ($tmp as $token) {
        $word = $token['word'];
        // 過濾標點、長度等
        if (preg_match('/^[\x{4e00}-\x{9fa5}]{2,}$/u', $word)) {
            // 執行 LIKE 查詢或全文檢索
        }
    }
}
?>

完整搜索示例(含英文/中文混合處理)

<?php
function search($keywords, $table, $key1, $key2) {
    $words = [];
    if (preg_match('/^[^\x80-\xff]+$/', $keywords)) {
        // 純英文按空格/逗號/句號分割
        foreach (explode(' ', $keywords) as $v) {
            foreach (explode(',', $v) as $v2) {
                foreach (explode('.', $v2) as $v3) $words[] = $v3;
            }
        }
    } else {
        // 中文調用 SCWS
        $scws = scws_new();
        $scws->set_charset('utf8');
        $scws->add_dict(ini_get('scws.default.fpath') . '/dict.utf8.xdb');
        $scws->set_rule(ini_get('scws.default.fpath') . '/rules.utf8.ini');
        $scws->set_duality(0);
        $scws->set_ignore(0);
        $scws->set_multi(0);
        $scws->send_text($keywords);
        while ($tmp = $scws->get_result()) {
            foreach ($tmp as $token) {
                $word = $token['word'];
                if (preg_match('/^[\x{4e00}-\x{9fa5}]{2,}$/u', $word)) $words[] = $word;
            }
        }
    }
    $results = [];
    foreach ($words as $word) {
        $sql = $key2 
            ? "SELECT * FROM `$table` WHERE `$key1` LIKE '%$word%' OR `$key2` LIKE '%$word%'"
            : "SELECT * FROM `$table` WHERE `$key1` LIKE '%$word%'";
        $results[] = mysql_query($sql);
    }
    return $results;
}
?>

您可能感興趣的文章:

  • 開源 PHP 中文分詞系統 SCWS 安裝和使用實例
  • PHP 利用 SCWS 實現 MySQL 全文搜索功能的方法
  • PHPAnalysis 中文分詞類詳解
  • 使用 Discuz 關鍵詞服務器實現 PHP 中文分詞
  • PHP 中文分詞 自動獲取關鍵詞介紹
  • PHP 中文分詞的簡單實現代碼分享
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved