簡介:這是再談中文分詞--php類的詳細頁面,介紹了和php,有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=342970' scrolling='no'>
因為公司搜尋要求 故在網站上 尋找了一些中文分詞系統。 看來看去都不是特別滿意,後來看到了一款:
SCWS 是 Simple Chinese Words Segmentation 的縮寫,即簡易中文分詞系統。
這款中文分詞使用起來比較方便的。
scws中文分詞說明
這是一套基於詞頻詞典的機械中文分詞引擎,它能將一整段的漢字基本正確的切分成詞。詞是漢語的基本語素單位,而書寫的時候不像英語會在詞之間用空格分開,所以如何準確而又快速的分詞一直是中文分詞的攻關痛點。
SCWS 在概念上並無創新成分,採用的是自行採集的詞頻詞典,並輔以一定程度上的專有名稱、人名、地名、數字年代等規則集,經小範圍測試大概準確率在 90% ~ 95% 之間,已能基本滿足一些中小型搜尋引擎、關鍵字提取等場合運用。 SCWS 採用純 C 代碼開發,以 Unix-Like OS 為主要平台環境,提供共用函數庫,方便植入各種現有軟體系統。此外它支援 GBK,UTF-8,BIG5 等漢字編碼,切詞效率高。
SCWS - PHP 擴充之文檔
==運行時配置==scws.default.charset (default = gbk) , Changeable = PHP_INI_ALLscws.default.fpath (default = NULL) , Changeable = PHP_INI_ALL有關 PHP_INI_* 常量進一步的細節與定義參見PHP手冊。==資源類型==本擴充定義了一種資源類型:一個 scws 指標,指向正在被操作的 scws 對象。==預定義常量==本擴充模組未定義任何常量。==預定義類==這是一個類似 Directory 的內建式偽類操作,類方法建立請使用 scws_new() 函數,而不要直接用 new SimpledCWS。否則不會包含有 handle 指標,將無法正確操作。包含的方法有:class SimpledCWS { resource handle; bool close(void); bool set_charset(string charset) bool set_dict(string dict_path) bool set_rule(string rule_path) bool set_ignore(bool yes) bool set_multi(int mode) bool set_duality(bool yes) bool send_text(string text) mixed get_result(void) mixed get_tops([int limit [, string xattr]]) bool has_word(string xattr) mixed get_words(string xattr) string version(void)}; 例子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);?>注意:為方便使用,當 send_text 方法或 scws_send_text 函數被調用前,沒有載入詞典和規則集時,系統會自動在scws.default.fpath(ini配置)中尋找相應的字元集詞典。詞典和規則檔案的命名方式為 dict[.字元集].xdb 和 rules[.字元集].ini ,當字元集是 gbk 時中括弧裡面的部分則不需要,直接使用 dict.xdb 和 rules.ini 而不是 dict.gbk.xdb 。此外,輸入的文字,詞典,規則檔案這三者的字元集必須統一,如果不是預設的 gbk 字元集請調用 set_charset 或 scws_set_charset來設定,否則可能出現意外錯誤。==函數列表:==mixed scws_new(void)說明:建立並返回一個 SimpledCWS 類操作對象。參數:無傳回值:成功返回類操作控制代碼,失敗返回 falsemixed scws_open(void)說明:建立並返回一個分詞操作控制代碼參數:無傳回值:成功返回 scws 操作控制代碼,失敗返回 falsebool scws_close(resource scws_handle)說明:關閉一個已開啟的 scws 分詞操作控制代碼返回:始終為 true參數:scws_handle 即之前由 scws_open 開啟返回的。bool scws_set_charset(resource scws_handle, string charset)說明:設定分詞詞典、規則集、欲分文本字串的字元集,系統預設是 gbk 字集。返回:始終為 true參數:scws_handle 即之前由 scws_open 開啟返回的; charset 是要新設定的字元集,目前只支援 utf8 和 gbk。bool scws_add_dict(resource scws_handle, string dict_path [, int mode])說明:添加分詞所用的詞典,新加入的優先尋找。返回:成功返回 true 失敗返回 false參數:scws_handle 即之前由 scws_open 開啟返回的; dict_path 是詞典的路徑,可以是相對路徑或完全路徑。(遵查安全模式下的open_basedir) mode 是選擇性參數,表示載入的方式,其值有三:SCWS_XDICT_XDB SCWS_XDICT_MEM SCWS_XDICT_TXT 其中 SCWS_XDICT_TXT 表示文本詞典,可結合另外2個值使用bool scws_set_dict(resource scws_handle, string dict_path [, int mode])說明:設定分詞所用的詞典並清除已存在的詞典列表。返回:成功返回 true 失敗返回 false參數:scws_handle 即之前由 scws_open 開啟返回的; dict_path 是詞典的路徑,可以是相對路徑或完全路徑。(遵查安全模式下的open_basedir) mode 是選擇性參數,表示載入的方式,其值有三:SCWS_XDICT_XDB SCWS_XDICT_MEM SCWS_XDICT_TXT 其中 SCWS_XDICT_TXT 表示文本詞典,可結合另外2個值使用bool scws_set_rule(resource scws_handle, string rule_path)說明:設定分詞所用的新詞識別規則集(用於人名、地名、數字時間年代等識別)。返回:成功返回 true 失敗返回 false參數:scws_handle 即之前由 scws_open 開啟返回的; rule_path 是規則集的路徑,可以是相對路徑或完全路徑。(遵查安全模式下的open_basedir)bool scws_set_ignore(resource scws_handle, bool yes)說明:設定分詞返回結果時是否去除一些特殊的標點符號之類。返回:始終為 true參數:scws_handle 即之前由 scws_open 開啟返回的; yes 設定值,如果為 true 則結果中不返回標點符號,如果為 false 則會返回,預設為 false。bool scws_set_multi(resource scws_handle, int mode)說明:設定分詞返回結果時是否複式分割,如“中國人”返回“中國+人+中國人”三個詞。返回:始終為 true參數:scws_handle 即之前由 scws_open 開啟返回的; mode 設定值,1~15。1|2|4|8 = short|duality|zmain|zall 按位異或的 1 | 2 | 4 | 8 分別表示: 短詞 | 二元 | 主要單字 | 所有單字 1.1.8 起 1,2,4,8 分別對應常量 SCWS_MULTI_SHORT SCWS_MULTI_DUALITY SCWS_MULTI_ZMAIN SCWS_MULTI_ZALLbool scws_set_duality(resource scws_handle, bool yes)說明:設定是否將閑散文字自動以二字分詞法彙總返回:始終為 true參數:scws_handle 即之前由 scws_open 開啟返回的; yes 設定值,如果為 true 則結果中多個單字會自動按二分法聚分,如果為 false 則不處理,預設為 false。bool scws_send_text(resource scws_handle, string text)說明:發送設定分詞所要切割的文本返回:成功返回 true 失敗返回 false參數:scws_handle 即之前由 scws_open 開啟返回的; text 是文本的內容。注1:系統底層處理方式為對該文本增加一個引用,故不論多長的文本並不會造成記憶體浪費;注2:執行本函數時,若未載入任何詞典和規則集,則會自動試圖在ini指定的預設目錄下尋找詞典和規則集。mixed scws_get_result(resource scws_handle)說明:根據 send_text 設定的常值內容,返回一系列切好的詞彙。返回:成功返回切好的詞彙組成的數組, 若無更多詞彙,返回 false。參數:scws_handle 即之前由 scws_open 開啟返回的。注1:每次切割後本函數應該迴圈調用,直到返回 false 為止,因為程式每次返回的詞數是不確定的。注2:返回的詞彙包含的索引值有:word (string, 詞本身) idf (folat, 逆文本詞頻) off (long, 在文本中的位置) attr(string, 詞性表示)mixed scws_get_tops(resource scws_handle [, int limit [, string attr]] )說明:根據 send_text 設定的常值內容,返回系統計算出來的最關鍵詞彙列表。返回:成功返回切好的詞彙組成的數組, 若無更多詞彙,返回 false。參數:scws_handle 即之前由 scws_open 開啟返回的; limit 選擇性參數,返回的詞的最大數量,預設是 10; attr 選擇性參數,是一系列詞性組成的字串,各詞性之間以半形的逗號隔開, 這表示返回的詞性必須在列表中,如果以~開頭,則表示取反,詞性必須不在列表中, 預設為NULL,返回全部詞性,不過濾。mixed scws_get_words(resource scws_handle, string attr )說明:根據 send_text 設定的常值內容,返回系統中詞性符合要求的關鍵詞彙。返回:成功返回符合要求詞彙組成的數組,返回 false。參數:scws_handle 即之前由 scws_open 開啟返回的; attr 是一系列詞性組成的字串,各詞性之間以半形的逗號隔開, 這表示返回的詞性必須在列表中,如果以~開頭,則表示取反,詞性必須不在列表中, 若為空白則返回全部詞性,不過濾。bool scws_has_words(resource scws_handle, string attr )說明:根據 send_text 設定的常值內容,返回系統中是否包括符合詞性要求的關鍵詞。返回:如果有則返回 true,沒有就返回 false。參數:scws_handle 即之前由 scws_open 開啟返回的; attr 是一系列詞性組成的字串,各詞性之間以半形的逗號隔開, 這表示要判斷的詞只要有一個符合詞性要求就立即返回 true, 若為空白則只要 text 不為空白就返回 true.mixed scws_version(void)說明:返回 scws 版本號碼名稱資訊。返回:字串參數:無類對象用法參照函數用法,區別就是不需要傳入第一參數(會自動從handle的屬性中取值)。
php_scws.dll/Win32 安裝說明
1. 根據您當前用的 PHP 版本,下載相應已編譯好的 php_scws.dll 擴充庫。 目前支援 PHP-4.4.x 和 PHP-5.2.x 系列,分別為: php-4.4.x: http://www.ftphp.com/scws/down/php-4.4.x/php_scws.dll php-5.2.x: http://www.ftphp.com/scws/down/php-5.2.x/php_scws.dll php-5.3.x: http://www.ftphp.com/scws/down/php-5.3.x/php_scws.dll2. 將下載後的 php_scws.dll 放到 php 安裝目錄的 extensions/ 目錄中去(通常為:X:/php/extensions/或 X:/php/ext/)。3. 建立一個本地目錄放規則集檔案和詞典檔案,建議使用:C:/program files/scws/etc4. 從 scws 首頁上下載詞典檔案,解壓後將 *.xdb 放到上述目錄中 詞典系列:http://www.ftphp.com/scws/down/scws-dict-chs-gbk.tar.bz2http://www.ftphp.com/scws/down/scws-dict-chs-utf8.tar.bz2http://www.ftphp.com/scws/down/scws-dict-cht-utf8.tar.bz25. 從 scws 首頁上下載規則集檔案,解壓後將 *.ini 放到第 3 步建立的目錄 規則集檔案壓縮包:http://www.ftphp.com/scws/down/rules.tgz 解壓後有三個檔案分別為 rules.ini rules.utf8.ini rules_cht.utf8.ini 將三件檔案拷到第 3 步所述的目錄中6. 修改 php.ini 通常位於 C:/windows/php.ini 或 C:/winnt/php.ini 之類的目錄, 在 php.ini 的末尾加入以下幾行:[scws];; 注意請檢查 php.ini 中的 extension_dir 的設定值是否正確, 否則請將 extension_dir 設為空白,; 再把 php_scws.dll 指定為絕對路徑。;extension = php_scws.dllscws.default.charset = gbkscws.default.fpath = "c:/program files/scws/etc"5. 重開 網頁伺服器即可完成。
實際示範
輸入:銷售人員 輸出:Array ( [0] => Array ( [word] => 人員 [times] => 1 [weight] => 4.80000019073 [attr] => n ) [1] => Array ( [word] => 銷售 [times] => 1 [weight] => 4.59999990463 [attr] => vn ) ) 湖州人才人事網 www.hzgz.cc 也使用了中文分詞的效果 大家也可以去看看。參考地址:http://www.ftphp.com/scws/
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/342970.html pageNo:6