如何在 ServBay 中啟用與設定 SCWS PHP 模組
ServBay 是一款專為 macOS 設計的強大本地 Web 開發環境,整合了 PHP、Node.js、Python、Go、Java 等多種語言執行環境,以及 MySQL、PostgreSQL、MongoDB、Redis 等資料庫,並支援 Caddy、Nginx 等 Web 伺服器。針對需要於 PHP 應用中處理中文文本的開發者,ServBay 已預載高效的 SCWS (Simple Chinese Word Segmentation) 中文斷詞模組,且啟用流程極為簡單。
本文將詳細說明如何在 ServBay 中啟用 SCWS PHP 擴充功能,設定其字典檔案,並透過範例程式碼展示其基本用法。
SCWS 模組簡介
SCWS 是一個開源中文斷詞引擎,以高效能與高準確率著稱。它結合詞典配對與統計模型,可快速且精確地將中文文本進行斷詞處理,非常適合建置中文搜尋引擎、文本探勘、內容分析、關鍵字提取及詞性標註等應用場景。
主要特色
- **高效能斷詞:**SCWS 採用最佳化的斷詞演算法,可高效處理大規模中文文本資料。
- **高準確率:**結合詞典與統計模型,SCWS 在中文斷詞任務上表現出極高準確度。
- **功能豐富:**除基礎斷詞外,亦支援關鍵字提取、詞性標註等進階功能。
- **易於整合:**提供簡潔 API 介面,方便開發者融入 PHP 應用。
- **開源且免費:**SCWS 為開源軟體,可自由使用與客製化。
ServBay 預載 SCWS 版本
ServBay 支援多個 PHP 版本,並為各版本預裝對應 SCWS 模組。截稿時,ServBay 已為 PHP 5.6 至 PHP 8.4 各版本預載 SCWS 1.2.3 擴充功能。
如何啟用 SCWS 模組
SCWS 模組於 ServBay 中預設為停用。您可透過兩種主要方式啟用:ServBay 圖形介面(UI)或手動編輯設定檔。
推薦方式:透過 ServBay 圖形介面啟用
以下為最簡易快速的方式:
- 開啟 ServBay 主介面。
- 左側導覽列點選 語言 (Languages),再選擇 PHP。
- 於右側 PHP 版本清單中,找到欲啟用 SCWS 的 PHP 版本(如
PHP 8.4
)。 - 點選該 PHP 版本右側 擴充 (Extensions) 按鈕。
- 在彈出擴充清單中,尋找
SCWS
模組。 - 點擊
SCWS
左側開關,切換為啟用(通常會變成綠色)。 - 點擊視窗底部 儲存 (Save) 按鈕。
- ServBay 會提示需重啟 PHP 套件以套用變更。請點擊 重啟 (Restart) 按鈕。
完成以上操作後,SCWS 模組即成功於所選 PHP 版本啟用。
手動編輯設定檔啟用(適合進階用戶或故障排查)
如需更細緻的操控或進行故障排查,也可直接修改 PHP 設定檔:
找到設定檔: 先找到對應 PHP 版本的
conf.d
目錄,SCWS 設定位於該目錄下的scws.ini
。路徑格式通常為:/Applications/ServBay/etc/php/X.Y/conf.d/scws.ini
1請將
X.Y
換為實際 PHP 版本號(如8.4
)。編輯
scws.ini
檔: 使用文字編輯器開啟scws.ini
。找到如下內容:ini[scws] ; Uncomment the following line to enable scws ;extension = scws.so ;scws.default.charset = gbk ;scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5將
extension = scws.so
本行前的分號(;
)去除,使其變為:ini[scws] ; Uncomment the following line to enable scws extension = scws.so ;scws.default.charset = gbk ;scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5(選用)亦可於此設定預設字元集及字典路徑,但通常建議於 PHP 程式動態設定,以保持彈性。如欲從設定檔設定,亦需將該行的註解拿掉並修正。例如字典如為 UTF-8 編碼:
ini[scws] ; Uncomment the following line to enable scws extension = scws.so scws.default.charset = utf8 scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5儲存並關閉
scws.ini
檔。重啟 PHP 套件: 開啟 ServBay 主介面,進入 套件 (Packages),找到剛才編輯的 PHP 版本(如 PHP 8.4),點擊其右側重啟按鈕(多為一個圓形箭頭圖示)。
驗證 SCWS 模組是否載入成功
啟用後,確認模組運作狀態非常重要。最常見的檢查方式是檢視 PHP 的 phpinfo()
輸出:
- 在 ServBay 建議的網站根目錄
/Applications/ServBay/www
下,建立一個新子目錄(如scws-test
)用於測試。 - 於該目錄
/Applications/ServBay/www/scws-test
建立一個名稱為phpinfo.php
的檔案。 - 將以下 PHP 代碼貼至
phpinfo.php
檔案:php<?php phpinfo(); ?>
1
2
3 - 確保您的 ServBay Web 伺服器(如 Caddy 或 Nginx)已設定並正常執行,且能存取
/Applications/ServBay/www
下的網站。ServBay 預設會設定servbay.demo
網域對應至/Applications/ServBay/www
。 - 於瀏覽器開啟
https://servbay.demo/scws-test/phpinfo.php
。 - 在開啟的 PHP 資訊頁中,往下捲動檢查 "SCWS" 區塊。如出現 SCWS 相關設定與資訊(如版本號、設定選項),則表示模組已正確載入。
(註:圖片路徑為範例,請參考實際 ServBay 文件所附圖片)
建立與設定 SCWS 字典
SCWS 屬於詞典型斷詞引擎,斷詞效果極大程度取決於所用字典。ServBay 已預載 SCWS 預設字典與規則檔,通常位於 /Applications/ServBay/etc/scws
目錄下。當然您也可建立/插入專屬自訂字典。
SCWS 字典檔格式
SCWS 支援純文本格式與二進制 xdb 格式字典。建議採用 xdb 格式,其載入速度更快、記憶體使用效能更佳。
純文字字典檔格式如下──每行一詞,後可選帶詞頻(數字,愈大代表愈常用)及詞性:
詞語1 [詞頻1] [詞性1]
詞語2 [詞頻2] [詞性2]
...
2
3
例如:
人工智能 1000 n
自然語言處理 800 n
ServBay 500 nz
2
3
將您的自訂詞彙另存為純文字檔(如 my_dict.txt
)。請確保檔案編碼與預期字元集一致(建議 UTF-8)。
產生 xdb 格式字典檔
ServBay 預載 SCWS 所附的 scws-gen-dict
工具,可將純文字字典轉為 xdb 格式。
- 開啟 macOS Terminal。
- 透過
cd
指令切換至 ServBay bin 目錄,或直接呼叫scws-gen-dict
完整路徑。工具通常在 ServBay bin 目錄內:bash請將/Applications/ServBay/bin/scws-gen-dict -i /path/to/your/my_dict.txt -o /Applications/ServBay/etc/scws/my_dict.utf8.xdb -c utf8
1/path/to/your/my_dict.txt
改為您自製字典檔路徑。-o
指定 xdb 檔案的輸出路徑,建議放在/Applications/ServBay/etc/scws
。-c utf8
代表輸入檔的編碼格式。
設定 SCWS 採用自訂字典
建完 xdb 檔案後,可於 PHP 代碼指定 SCWS 採用該字典:
<?php
$scws = scws_new();
$scws->set_charset('utf8'); // 設定字元集,需與字典編碼相符
// 設定主字典路徑,可以用 ServBay 預設字典或剛建立的 xdb 檔
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// 如有多字典,可追加載入
$scws->add_dict('/Applications/ServBay/etc/scws/my_dict.utf8.xdb', SCWS_XDICT_TXT); // SCWS_XDICT_TXT 代表追加自訂字典
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini'); // 設定規則檔(詞性標註等),ServBay 已預載
// ... 後續斷詞操作 ...
?>
2
3
4
5
6
7
8
9
10
11
set_dict()
設定主字典(通常為 SCWS 官方大型字典)。add_dict()
用於追加自訂字典。SCWS_XDICT_TXT
為一常數,標示追加為用戶自訂詞庫。
SCWS 使用範例
啟用 SCWS 並設好字典後,即可於 PHP 程式中呼叫 SCWS 函數辦理斷詞。以下為基本範例:
<?php
// 確保 SCWS 延伸模組已載入
if (!extension_loaded('scws')) {
die('SCWS extension is not loaded.');
}
// 初始化 SCWS 物件
$scws = scws_new();
if (!$scws) {
die('Failed to initialize SCWS.');
}
// 設定字元集(須與文本與字典一致)
$scws->set_charset('utf8');
// 設定字典檔(ServBay 預設路徑)
// set_dict() 設定主字典
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// add_dict() 可追加自訂字典
// $scws->add_dict('/Applications/ServBay/etc/scws/my_dict.utf8.xdb', SCWS_XDICT_TXT);
// 設定規則檔(ServBay 已預設),用於詞性標註等
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini');
// 設定斷詞模式(可選,預設為 SCWS_XDICT_XPINYIN | SCWS_XDICT_DUALITY)
// SCWS_XDICT_XPINYIN: 拆分 x 字符(非漢字),如 email, url 等
// SCWS_XDICT_DUALITY: 複合斷詞(二元斷詞)
// $scws->set_ignore(true); // 是否忽略標點符號
// $scws->set_multi(SCWS_MULTI_WORD | SCWS_MULTI_ZHONGCI); // 設定複合斷詞等級
// 欲斷詞之中文內容
$text = "ServBay 是一個強大的本地 Web 開發環境,支持 PHP、Node.js 和多種資料庫。";
// 傳送文本至 SCWS 處理
$scws->send_text($text);
// 取得斷詞結果
echo "原始文本: " . $text . "\n\n";
echo "斷詞結果:\n";
// 逐步取回所有斷詞結果
while ($result = $scws->get_result()) {
foreach ($result as $word) {
// $word 為關聯陣列,含 'word', 'idf', 'attr'(詞性)等資訊
echo "詞語: " . $word['word'] . " (詞性: " . $word['attr'] . ")\n";
}
}
// 釋放 SCWS 資源
$scws->close();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
將上述程式儲存為 .php
檔(如 scws_example.php
),並置於 ServBay 網站目錄(如 /Applications/ServBay/www/scws-test/
)。透過瀏覽器造訪 https://servbay.demo/scws-test/scws_example.php
即可得見斷詞結果。
注意事項
- 請確保所啟用之 SCWS 模組版本與您執行的 PHP 版本相容。ServBay 已為您排除相容性疑慮,但手動編輯時請自主檢查。
- SCWS 之斷詞表現與字典品質密切相關。針對某特定領域文本,建議蒐集專業領域字典以提升準確度。
- 請正確設定 SCWS 設定檔(
scws.ini
)、字典檔(.xdb
)及規則檔(.ini
)路徑,並確保 PHP 進程具備讀取權限。 - 每次調整 PHP 設定後,務必重啟對應 PHP 套件以使變更生效。
常見問題集(FAQ)
Q: 我已透過 ServBay UI 啟用 SCWS,但 phpinfo()
找不到?
A: 請確認您重啟的是正確的 PHP 套件。有時多個 PHP 版本同時執行,需重啟與網站綁定之版本。如問題依舊,請手動編輯 scws.ini
並仔細檢查檔案路徑及語法。
Q: 如何建立與使用自訂字典?
A: 請參照本文〈建立與設定 SCWS 字典〉章節,採用 scws-gen-dict
工具將純文字字典轉為 xdb 格式,再於 PHP 程式用 add_dict()
方法載入。
Q: SCWS 規則檔(rules.utf8.ini
)有何作用?
A: 規則檔主要用於詞性標註與特殊斷詞規則。ServBay 已預設好一般需求,通常無需修改。
總結
ServBay 為開發者帶來了極便捷的 SCWS PHP 中文斷詞模組啟用與管理體驗。不論經由直觀圖形介面還是靈活手動設定,您都能輕鬆整合 SCWS 至您的 PHP 開發流程。配合 ServBay 預載 SCWS 工具及默認字典,入門極為快速,助您高效且精準處理中文資料,為 Web 應用(如搜尋、內容分析)大幅提升中文能力。身為 ServBay 生態的重要一環,SCWS 的整合更彰顯了 ServBay 作為本地開發環境的多元與實用。