簡介
SCWS 是 Simple Chinese Words Segmentation 的縮寫,即簡易中文分詞系統。 這是一套基於詞頻詞典的機械中文分詞引擎,它能將一整段的漢字基本正確的切分成詞。詞是漢語的基本語素單位,而書寫的時候不像英語會在詞之間用空格分開,所以如何準確而又快速的分詞一直是中文分詞的攻關難點。
SCWS 在概念上其實並無創新成分,採用的是自行採集的詞頻詞典,並輔以一定程度上的專有名稱、人名、地名、數字年代等規則集,經小範圍測試大概準確率在 90% ~ 95% 之間,已能基本滿足一些中小型搜尋引擎、關鍵字提取等場合運用。 SCWS 採用純 C 代碼開發,以 Unix-Like OS 為主要平台環境,提供共享函式館,方便植入各種現有軟體系統。此外它支持 GBK,UTF-8,BIG5 等漢字編碼,切詞效率高。
SCWS 是開放源碼並且免費的。
SCWS 智慧卡網路伺服器,是由SIM卡行業開發的一種解決方案,旨在為運營商提供一個功能豐富的攜帶型環境來開發基於多媒體SIM卡的套用。
特色與內容
SCWS 採用標準C開發由 hightman 個人開發,無任何第三方庫函式依賴。提供 C的接口、PHP的擴展(源碼、WIN32的DLL檔案),是目前使用最方便的開源免費中文分詞軟體之一。
SCWS 特別為全文索引考慮,提供了自創的複合分詞,可以把長詞再分成短詞,把散字按二元切詞法進行結合的功能。
SCWS 默認提供通用的網際網路信息詞庫,提供 PHP編寫的詞典導入導出工具 。自 1.1.1 版起,支持用戶自定義文本詞典,支持基於詞性的規則權重。
SCWS 軟體包中除包含核心庫代碼外,還包含一個命令行工具、詞典轉換工具。
版本情況
SCWS項目仍在不斷開發和更新中,當前最新版本為 1.2.0 版。
SCWS-1.1.x | C 代碼 | *Unix*/*PHP* | 準確: 95%, 召回: 91%, 速度: 1.2MB/sec PHP擴展分詞速度: 250KB/sec | |
php_scws.dll(1) | PHP擴展庫 | Windows/PHP 4.4.x | 準確: 95%, 召回: 91%, 速度: 40KB/sec | |
php_scws.dll(2) | PHP擴展庫 | Windows/PHP 5.2.x | 準確: 95%, 召回: 91%, 速度: 40KB/sec | |
php_scws.dll(3) | PHP擴展庫 | Windows/PHP 5.3.x | 準確: 95%, 召回: 91%, 速度: 40KB/sec |
C語言範例
一個簡單的分詞實例:
#include <scws.h>
#include <stdlib.h>
main()
{
scws_t s;
scws_res_t res, cur;
char *text = "Hello, 我名字叫李那曲是一個中國人, 我有時買Q幣來玩, 我還聽說過C#語言";
if (!(s = scws_new())) {
printf("error, can't init the scws_t!\n");
exit(-1);
}
scws_set_charset(s, "gbk");
scws_set_dict(s, "/USR/local/scws/etc/dict.xdb", SCWS_XDICT_XDB);
scws_set_rule(s, "/usr/local/scws/etc/rules.ini");
scws_send_text(s, text, strlen(text));
while (res = cur = scws_get_result(s))
{
while (cur != NULL)
{
printf("Word: %.*s/%s (IDF = %4.2f)\n",
cur->len, text+cur->off, cur->attr, cur->idf);
cur = cur->next;
}
scws_free_result(res);
}
scws_free(s);
}
編譯:gcc -o test -I/usr/local/scws/include -L/usr/local/scws/lib test.c -lscws -Wl,--rpath -Wl,/usr/local/scws/lib
PHP調用範例
例子1. 使用類方法分詞
<?php
$so = scws_new();
$so->set_charset('gbk');
// 這裡沒有調用 set_dict 和 set_rule 系統會自動試調用 ini 中指定路徑下的詞典和規則檔案
$so->send_text("我是一個中國人,我會C++語言,我也有很多T恤衣服");
while ($tmp = $so->get_result())
{
print_r($tmp);
}
$so->close();
?>
例子2. 使用函式提取高頻詞
<?php
$sh = scws_open();
scws_set_charset($sh, 'gbk');
scws_set_dict($sh, '/path/to/dict.xdb');
scws_set_rule($sh, '/path/to/rules.ini');
$text = "我是一個中國人,我會C++語言,我也有很多T恤衣服";
scws_send_text($sh, $text);
$top = scws_get_tops($sh, 5);
print_r($top);
?>