請注意,個人系統是Mac OS X 10.11.2數組
假設你已經下載好了上面的軟件。安全
第一步:編譯和安裝網絡
# 解壓 ➜ tar -xvf scws-1.2.2.tar.bz2 # 編譯和安裝 scws ./configure --prefix=/usr/local/Cellar/scws # --preifx=[安裝路徑] make -j4 make install # 編譯和安裝 php-scws ➜ cd phpext ➜ phpize ➜ ./configure --with-scws=/usr/local/Cellar/scws --with-php-config=/usr/local/Cellar/php56/5.6.16/bin/php-config ➜ make -j4 ➜ make install # 輸出 Installing shared extensions: /usr/local/Cellar/php56/5.6.16/lib/php/extensions/debug-non-zts-20131226/
<!-- more -->函數
這說明 php-sces 擴展被安裝到了,/usr/local/Cellar/php56/5.6.16/lib/php/extensions/debug-non-zts-20131226/ 路徑下。而後啓用這個 PHP 模塊:測試
# 兩種方法: # 1.直接在 php.ini 中配置;2.寫成單獨的配置文件(前提是啓用了加載附加 .ini 配置文件這個功能) # 配置內容都同樣: [scws] extension = "/usr/local/Cellar/php56/5.6.16/lib/php/extensions/debug-non-zts-20131226/scws.so" scws.default.charset = utf-8 scws.default.fpath = "/usr/local/Cellar/scws/etc"
解釋一下:
extension: 模塊連接庫路徑
scws.default.charset:scws 模塊執行時默認編碼集
scws.default.fpath:scws 配置文件路徑編碼
重啓PHP,看看模塊是否加載成功:debug
➜ kill -USR2 311 ➜ php -m | grep scws # 輸出 scws
第二步:詞庫code
# 解壓詞庫 ➜ tar -xvf scws-dict-chs-utf8.tar.bz2 # 輸出 x dict.utf8.xdb
將詞庫移動至安裝 scws 的 etc 目錄下:
➜ mv dict.utf8.xdb /usr/local/Cellar/scws/etc
<?php header('Content-type: text/html; charset=utf-8'); if (extension_loaded('scws')) { $module = 'scws'; $funcs = get_extension_funcs($module); echo "模塊包含如下函數:\n"; echo "---------------------------------------\n"; print_r($funcs); echo "---------------------------------------\n"; echo "模塊版本:\n"; echo scws_version(); } else { echo '模塊未找到!<br>'; }
輸出:
模塊包含如下函數: --------------------------------------- Array ( [0] => scws_open [1] => scws_new [2] => scws_close [3] => scws_set_charset [4] => scws_add_dict [5] => scws_set_dict [6] => scws_set_rule [7] => scws_set_ignore [8] => scws_set_multi [9] => scws_set_duality [10] => scws_send_text [11] => scws_get_result [12] => scws_get_tops [13] => scws_has_word [14] => scws_get_words [15] => scws_version ) --------------------------------------- 模塊版本: SCWS (Module version:0.2.2, Library version:1.2.2) - by hightman%
功能: 建立並返回一個 SimpleCWS
類操做對象。
返回值: 成功返回類操做句柄,失敗返回 false。
功能: 建立並返回一個分詞操做句柄。
返回值: 成功返回 scws 操做句柄,失敗返回 false。
功能: 關閉一個已打開的 scws 分詞操做句柄。
參數: scws_handle
即以前由 scws_open 打開的返回值。
返回值: 始終爲 true
功能: 設定分詞詞典、規則集、欲分文本字符串的字符集。
參數: charset
要新設定的字符集,只支持 utf8 和 gbk。(默認爲 gbk,utf8不要寫成utf-8)。
返回值: 始終爲 true
功能: 添加分詞所用的詞典,新加入的優先查找。
參數: dict_path
詞典的路徑,能夠是相對路徑或徹底路徑(遵循安全模式下的 open_basedir)。
參數: mode
可選,表示加載的方式,其值有:
- SCWS_XDICT_TXT 表示要讀取的詞典文件是文本格式,能夠和後2項結合用 - SCWS_XDICT_XDB 表示直接讀取 xdb 文件(此爲默認值) - SCWS_XDICT_MEM 表示將 xdb 文件所有加載到內存中,以 XTree 結構存放,可用異或結合另外2個使用。
返回值: 成功返回 true 失敗返回 false
功能: 設定分詞所用的詞典並清除已存在的詞典列表
參數: dict_path
詞典的路徑,能夠是相對路徑或徹底路徑(遵循安全模式下的 open_basedir)。
參數: mode
可選,表示加載的方式。參見 scws_add_dict
返回值: 成功返回 true 失敗返回 false
功能: 設定分詞所用的新詞識別規則集(用於人名、地名、數字時間年代等識別)。
參數: rule_path
規則集的路徑,能夠是相對路徑或徹底路徑(遵循安全模式下的 open_basedir)。
參數: mode
表示加載的方式。參見 scws_add_dict
返回值: 成功返回 true 失敗返回 false
功能: 設定分詞返回結果時是否去除一些特殊的標點符號之類。
參數: yes
若是爲 true 則結果中不返回標點符號,若是爲 false 則會返回,缺省爲 false。
返回值: 始終爲 true
功能: 設定分詞返回結果時是否複式分割,如「中國人」返回「中國+人+中國人」三個詞。
參數: mode
複合分詞法的級別,缺省不復合分詞。取值由下面幾個常量異或組合(也可用 1-15 來表示):
- SCWS_MULTI_SHORT (1)短詞 - SCWS_MULTI_DUALITY (2)二元(將相鄰的2個單字組合成一個詞) - SCWS_MULTI_ZMAIN (4)重要單字 - SCWS_MULTI_ZALL (8)所有單字
返回值: 始終爲 true
功能: 設定是否將閒散文字自動以二字分詞法聚合
參數: yes
設定值,若是爲 true 則結果中多個單字會自動按二分法聚分,若是爲 false 則不處理,缺省爲 false。
返回值: 始終爲 true
功能: 發送設定分詞所要切割的文本。
參數: text
要切分的文本的內容。
返回值: 成功返回 true 失敗返回 false
注意: 系統底層處理方式爲對該文本增長一個引用,故不論多長的文本並不會形成內存浪費;執行本函數時,若未加載任何詞典和規則集,則會自動試圖在 ini 指定的缺省目錄下查找缺省字符集的詞典和規則集。
功能: 根據 send_text 設定的文本內容,返回一系列切好的詞彙。
返回值: 成功返回切好的詞彙組成的數組,若無更多詞彙,返回 false。返回的詞彙包含的鍵值以下:
- word string 詞自己 - idf float 逆文本詞頻 - off int 該詞在原文本路的位置 - attr string 詞性
注意: 每次切詞後本函數應該循環調用,直到返回 false 爲止,由於程序每次返回的詞數是不肯定的。
功能: 根據 send_text 設定的文本內容,返回系統計算出來的最關鍵詞彙列表。
參數: limit
可選參數,返回的詞的最大數量,缺省是 10 。
參數: attr
可選參數,是一系列詞性組成的字符串,各詞性之間以半角的逗號隔開,這表示返回的詞性必須在列表中,若是以~開頭,則表示取反,詞性必須不在列表中,缺省爲NULL,返回所有詞性,不過濾。
返回值: 成功返回統計好的的詞彙組成的數組,返回 false。返回的詞彙包含的鍵值以下:
- word string 詞自己 - times int 詞在文本中出現的次數 - weight float 該詞計算後的權重 - attr string 詞性
功能: 根據 send_text 設定的文本內容,返回系統中詞性符合要求的關鍵詞彙。
參數: attr
是一系列詞性組成的字符串,各詞性之間以半角的逗號隔開,這表示返回的詞性必須在列表中,若是以~開頭,則表示取反,詞性必須不在列表中,若爲空則返回所有詞。
返回值: 成功返回符合要求詞彙組成的數組,返回 false。返回的詞彙包含的鍵值參見 scws_get_result
功能: 根據 send_text 設定的文本內容,返回系統中是否包括符合詞性要求的關鍵詞。
參數: attr
是一系列詞性組成的字符串,各詞性之間以半角的逗號隔開,這表示返回的詞性必須在列表中,若是以~開頭,則表示取反,詞性必須不在列表中,若爲空則返回所有詞。
返回值: 若是有則返回 true,沒有就返回 false。
功能: 返回 scws 版本號名稱信息(字符串)。
返回值: 返回string,scws 版本號名稱信息。
<?php echo "開始測試分詞:\n"; echo "------------------------------------------------\n"; // 記錄開始時間 $starttime = microtime(true); // 開始分詞 $keyword = <<<EOF 陳凱歌並非《無極》的惟一著做權人,一部電影的總體版權歸電影製片廠全部。 一部電影的做者包括導演、攝影、編劇等創做人員,這些創做人員對他們的創做是有版權的。不通過製片人受權,其餘人不能對電影作拷貝、發行、反映,不能經過網絡來傳播,既不能把電影改編成小說、連環畫等其餘藝術形式發表,也不能把一部幾個小時才能放完的電影改編成半個小時就能放完的短片。 著做權和版權在我國是同一個概念,是法律賦予做品創做者的專有權利。所謂專有權利就是沒有通過權利人許可又不是法律規定的例外,要使用這個做品,就必須通過做者受權,沒有受權就是侵權。 一九八零年春天 EOF;
$cws = scws_open(); // 設置分詞編碼 scws_set_charset($cws, "utf8"); // 設置分詞所用字典 scws_set_dict($cws, ini_get('scws.default.fpath') . '/dict.utf8.xdb'); // 設定分詞所用的識別規則集 scws_set_rule($cws, ini_get('scws.default.fpath') . '/rules.utf8.ini'); // 發送要分割的字符串 scws_send_text($cws, $keyword); // 設定分詞返回結果時是否去除一些特殊的標點符號之類 scws_set_ignore($cws, true); // 設定分詞返回結果時是否複式分割,如「中國人」返回「中國+人+中國人」三個詞 // scws_set_multi($cws, false); // 散文字自動以二字分詞法聚合 scws_set_duality($cws, true); echo "\n最關鍵詞彙列表\n"; echo "-------------------------------------------------------------\n"; echo "No. 關鍵詞 Attr Weight(times)\n"; echo "-------------------------------------------------------------\n"; $list = scws_get_tops($cws, 20, ''); $number = 1; foreach ($list as $value) { printf("%02d. %s \t\t\t %s \t %.2f(%d)\n", $number, $value['word'], $value['attr'], $value['weight'], $value['times']); $number++; } echo "-------------------------------------------------------------\n"; echo "\n返回切好的詞彙\n"; echo "-------------------------------------------------------------\n"; while ($result = scws_get_result($cws)) { foreach ($result as $value) { if ($value['len'] == 1 && $value['word'] == "\r") continue; if ($value['len'] == 1 && $value['word'] == "\n") echo $value['word']; else printf("%s:%s ", $value['word'], $value['attr']); } } scws_close($cws); // 對於分詞返回結果去除特殊標點符號 // scws_set_ignore($cws, true); // 對於分詞結果是否複試分割 // scws_set_multi($cws, SCWS_MULTI_ZMAIN);
$endtime = microtime(true); // 執行時間 echo "\n-------------------------------------------------------------\n\n"; echo '腳本執行了:'.bcsub($endtime, $starttime, 6)."秒"; echo "\n\n";
輸出:
開始測試分詞: ------------------------------------------------ 最關鍵詞彙列表 ------------------------------------------------------------- No. 關鍵詞 Attr Weight(times) ------------------------------------------------------------- 01. 電影 n 25.02(6) 02. 不能 v 19.08(4) 03. 通過 v 14.82(3) 04. 創做 vn 14.82(3) 05. 受權 v 14.79(3) 06. 版權 n 14.76(3) 07. 專有 vn 13.94(2) 08. 陳凱歌 nr 11.87(1) 09. 改編 v 11.82(2) 10. 一九八零年 t 10.72(1) 11. 無極 ns 10.02(1) 12. 權利 n 9.88(2) 13. 小時 n 9.68(2) 14. 人員 n 9.60(2) 15. 就是 n 9.52(2) 16. 不是 v 9.48(2) 17. 法律 n 9.32(2) 18. 沒有 v 9.30(2) 19. 做者 n 9.18(2) 20. 做品 n 9.12(2) ------------------------------------------------------------- 返回切好的詞彙 ------------------------------------------------------------- 陳凱歌:nr 並:c 不是:v 無極:ns 的:uj 惟一:b 著做權人:n 一部:n 部:n 電影:n 的:uj 總體:n 版權:n 歸:v 電影:n 製片廠:n 全部:v 一部:n 部:n 電影:n 的:uj 做者:n 包括:v 導演:n 攝影:vn 編劇:n 等:v 創做:vn 人員:n 這些:r 創做:vn 人員:n 對:p 他們:r 的:uj 創做:vn 是:v 是有:v 有:v 版權:n 的:uj 不:d 通過:v 製片人:n 受權:v 其餘人:rr 不能:v 對:p 電影:n 作:v 拷貝:n 發行:vn 反映:v 不能:v 經過:v 網絡:n 來:v 傳播:vn 既:c 不能:v 把:p 電影:n 改編:v 成:v 小說:n 連環畫:n 等:v 其餘:r 藝術:n 形式:n 發表:v 也 :d 不能:v 把:p 把一:m 一部:n 部幾:m 幾個:q 個:q 小時:n 才能:v 放:v 放完:v 完的:uj 的:uj 電影:n 改編:v 成半個:nr 小時:n 就 能:v 能放:v 放完:v 完的:uj 的:uj 短片:n 著做權:n 和:c 版權:n 在:p 我國:n 是:v 同一個:b 概念:n 是:v 法律:n 賦予:v 做品:n 創做者:n 的:uj 專有:vn 權利:n 所謂:v 專有:v n 權利:n 就是:n 沒有:v 通過:v 權利人:n 許可:v 又:d 不是:v 法律:n 規定:v 的:uj 例外:v 要:v 使用:v 這個:r 做品:n 就:d 必須:d 通過:v 做者:n 受權:v 沒有:v 受權:v 就是:n 侵權:vn 一九八零年:t 春天:t ------------------------------------------------------------- 腳本執行了:0.004200秒
搞定!
測試了一些詞,分詞準確性在90%左右。繼續對配置文件修改一下,應該能夠正常使用。