如何安裝 php scws(分詞元件)?

2020-07-16 10:05:33
centOs 環境下安裝 scws

1、安裝 bzip2 及 gcc gcc-c++
yum install bzip2
yum -y install gcc gcc-c++
2、下載  scws-1.2.3 的程式碼
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2
3、解壓
tar xvjf scws-1.2.3.tar.bz2
4、安裝
cd scws-1.2.3
./configure --prefix=/usr/local/scws
make ; 
make install
順利的話已經編譯並安裝成功到 /usr/local/scws 中了,執行下面命令看看檔案是否存在
ls -al /usr/local/scws/lib/libscws.la
5、用 wget 下載並解壓詞典,或從主頁下載然後自行解壓再將 *.xdb 放入 /usr/local/scws/etc 目錄中
cd /usr/local/scws/etc
wget http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2
wget http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
tar xvjf scws-dict-chs-gbk.tar.bz2
tar xvjf scws-dict-chs-utf8.tar.bz2
6、php擴充套件
如果您需要在 php 中呼叫分詞,建議繼續閱讀本文安裝 php 擴充套件,否則可跳過不看。
假設您已經將 scws 按上述步驟安裝到 /usr/local/scws 中。
安裝此擴充套件要求您的 php 和系統環境安裝了相應的 autoconf automake 工具及 phpize 。
1) 進入原始碼目錄的 phpext/ 目錄 
cd /var/scws-1.2.3/phpext
2) 執行 phpize (在PHP安裝目錄的bin/目錄下)[沒有安裝phpize 使用 yum install php-devel 安裝]
3) 執行 ./configure --with-scws=/usr/local/scws 
4) 若 php 安裝在特殊目錄 $php_prefix, 則請在 configure 後加上 --with-php-config=$php_prefix/bin/php-config
5) 在 php.ini [/etc/php.ini] 中加入以下幾行
[scws]
extension = scws.so
scws.default.charset = utf8
scws.default.fpath = /usr/local/scws/etc

Windows 環境下安裝 scws

php 擴充套件下載地址
1. 根據您當前用的 PHP 版本,下載相應已編譯好的 php_scws.dll 擴充套件庫。
   目前支援 PHP-4.4.x 和 PHP-5.2.x 系列,下載地址分別為:
   php-4.4.x: http://www.xunsearch.com/scws/down/php-4.4.x/php_scws.dll
   php-5.2.x: http://www.xunsearch.com/scws/down/php-5.2.x/php_scws.dll
   php-5.3.x: http://www.xunsearch.com/scws/down/php-5.3.x/php_scws.dll
2. 將下載後的  php_scws.dll 放到 php 安裝目錄的
   extensions/ 目錄中去(通常為:X:/php/extensions/或 X:/php/ext/)。
3. 建立一個本地目錄放規則集檔案和詞典檔案,建議使用:C:/program files/scws/etc
4. 從 scws 主頁上下載詞典檔案,解壓後將 *.xdb 放到上述目錄中
   詞典系列:http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2
           http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
           http://www.xunsearch.com/scws/down/scws-dict-cht-utf8.tar.bz2
5. 從 scws 主頁上下載規則集檔案,解壓後將 *.ini 放到第 3 步建立的目錄
   規則集檔案壓縮包:http://www.xunsearch.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.dll
scws.default.charset = gbk
scws.default.fpath = "c:/program files/scws/etc"
5. 重開 web 伺服器即可完成。

php 程式碼

php 程式碼
<?php
$so = scws_new();
//$so->set_charset('utf-8');
// 這裡沒有呼叫 set_dict 和 set_rule 系統會自動試呼叫 ini 中指定路徑下的詞典和規則檔案
$so->send_text("我是一個中國人,我會C++語言,我也有很多T恤衣服 name is hai");
while ($tmp = $so->get_result())
{
  print_r($tmp);
}
$so->close();
?>
預定義常數
-----------
* `SCWS_XDICT_XDB`  詞典檔案為 XDB
* `SCWS_XDICT_MEM`  將詞典全部載入到記憶體裡
* `SCWS_XDICT_TXT`  詞典檔案為 TXT(純文字)
* `SCWS_MULTI_NONE`     不進行複合分詞
* `SCWS_MULTI_SHORT` 短詞複合  
* `SCWS_MULTI_DUALITY`   散字二元複合
* `SCWS_MULTI_ZMAIN` 重要單字
* `SCWS_MULTI_ZALL`     全部單字
預定義類
---------
這是一個類似 `Directory` 的內建式偽類操作,類方法建立請使用 `scws_new()` 函數,而不能直接用 `new SimpleCWS`。
否則不會包含有 handle 指標,將無法正確操作。它包含的方法有:
```php
class SimpleCWS  {
  resource handle;
  bool close(void);
  bool set_charset(string charset)
  bool add_dict(string dict_path[, int mode = SCWS_XDICT_XDB])
  bool set_dict(string dict_path[, int mode = SCWS_XDICT_XDB])
  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)
};
```
> **注意** 類方法的用與支 scws_xxx_xxx 系列函數用法一致,只不過免去第一引數,
> 故不另外編寫說明,請參見函數列表即可。
**例子1** 使用類方法分詞
```php
<?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
<?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);
?>
```
> **注意** 為方便使用,當 `SimpleCWS::send_text` 方法或 `scws_send_text()` 函數被呼叫前並且沒有
> 載入任何詞典和規則集時,系統會自動在 `scws.default.fpath` (ini設定)目錄中查詢相應的字元集詞典。
> 詞典和規則檔案的命名方式為 dict[.字元集].xdb 和 rules[.字元集].ini ,當字元集是 gbk 時中括號裡面的
> 部分則不需要,直接使用 dict.xdb 和 rules.ini 而不是 dict.gbk.xdb 。
> 
> 此外,輸入的文字,詞典、規則檔案這三者的字元集必須統一,如果不是預設的 gbk 字元集請呼叫 
> `SimpleCWS::set_charset` 或 `scws_set_charset` 來設定,否則可能出現意外錯誤。
函數詳解
--------
1. `mixed scws_new(void)` 建立並返回一個 `SimpleCWS` 類操作物件。
   > **返回值** 成功返回類操作控制代碼,失敗返回 false。
2. `mixed scws_open(void)` 建立並返回一個分詞操作控制代碼。
   > **返回值** 成功返回 scws 操作控制代碼,失敗返回 false。
3. `bool scws_close(resource scws_handle)`  
   `SimpleCWS::close(void)` 關閉一個已開啟的 scws 分詞操作控制代碼。
   > **引數 scws_handle** 即之前由 scws_open 開啟的返回值。  
   > **返回值** 始終為 true  
   > **注意** 後面的 API 中省去介紹 scws_handle 引數,含義和本函數相同。
4. `bool scws_set_charset(resource scws_handle, string charset)`  
   `bool SimpleCWS::set_charset(string charset)` 設定分詞詞典、規則集、欲分文字字串的字元集。
   > **引數 charset** 要新設定的字元集,目前只支援 utf8 和 gbk。(註:預設為 gbk,utf8不要寫成utf-8)  
   > **返回值** 始終為 true
5. `bool scws_add_dict(resource scws_handle, string dict_path [, int mode])`
   `bool SimpleCWS::add_dict(string dict_path [, int mode])` 新增分詞所用的詞典,新加入的優先查詢。
   > **引數 dict_path** 詞典的路徑,可以是相對路徑或完全路徑。(遵循安全模式下的 open_basedir)  
   > **引數 mode** 可選,表示載入的方式。其值有:
   >
   >   - SCWS_XDICT_TXT  表示要讀取的詞典檔案是文字格式,可以和後2項結合用
   >   - SCWS_XDICT_XDB  表示直接讀取 xdb 檔案(此為預設值)
   >   - SCWS_XDICT_MEM  表示將 xdb 檔案全部載入到記憶體中,以 XTree 結構存放,可用互斥或結合另外2個使用。
   >
   > **返回值** 成功返回 true 失敗返回 false
6. `bool scws_set_dict(resource scws_handle, string dict_path [, int mode])`  
   `bool SimpleCWS::set_dict(string dict_path [, int mode])` 設定分詞所用的詞典並清除已存在的詞典列表。
   > **引數 dict_path** 詞典的路徑,可以是相對路徑或完全路徑。(遵循安全模式下的 open_basedir)  
   > **引數 mode** 可選,表示載入的方式。參見 `scws_add_dict`  
   > **返回值** 成功返回 true 失敗返回 false
7. `bool scws_set_rule(resource scws_handle, string rule_path)`  
   `bool SimpleCWS::set_rule(string rule_path)` 設定分詞所用的新詞識別規則集(用於人名、地名、數位時間年代等識別)。
   > **引數 rule_path** 規則集的路徑,可以是相對路徑或完全路徑。(遵循安全模式下的 open_basedir)  
   > **引數 mode** 可選,表示載入的方式。參見 `scws_add_dict`  
   > **返回值** 成功返回 true 失敗返回 false
8. `bool scws_set_ignore(resource scws_handle, bool yes)`  
   `bool SimpleCWS::set_ignore(bool yes)` 設定分詞返回結果時是否去除一些特殊的標點符號之類。
   > **引數 yes** 設定值,如果為 true 則結果中不返回標點符號,如果為 false 則會返回,預設為 false。  
   > **返回值** 始終為 true
9. `bool scws_set_multi(resource scws_handle, int mode)`  
   `bool SimpleCWS::set_multi(bool yes)` 設定分詞返回結果時是否復式分割,如「中國人」返回「中國+人+中國人」三個詞。
   > **引數 mode** 複合分詞法的級別,預設不複合分詞。取值由下面幾個常數互斥或組合(也可用 1-15 來表示):
   >
   >   - SCWS_MULTI_SHORT   (1)短詞
   >   - SCWS_MULTI_DUALITY (2)二元(將相鄰的2個單字組合成一個詞)
   >   - SCWS_MULTI_ZMAIN   (4)重要單字
   >   - SCWS_MULTI_ZALL    (8)全部單字
   >
   > **返回值** 始終為 true
10. `bool scws_set_duality(resource scws_handle, bool yes)`  
    `bool SimpleCWS::set_duality(bool yes)` 設定是否將閒散文字自動以二字分詞法聚合
   > **引數 yes** 設定值,如果為 true 則結果中多個單字會自動按二分法聚分,如果為 false 則不處理,預設為 false。  
   > **返回值** 始終為 true
11. `bool scws_send_text(resource scws_handle, string text)`  
    `bool SimpleCWS::send_text(string text)` 傳送設定分詞所要切割的文字。
   > **引數 text** 要切分的文字的內容。  
   > **返回值** 成功返回 true 失敗返回 false  
   > **注意** 系統底層處理方式為對該文字增加一個參照,故不論多長的文字並不會造成記憶體浪費;
   > 執行本函數時,若未載入任何詞典和規則集,則會自動試圖在 ini 指定的預設目錄下查詢預設字元集的詞典和規則集。
12. `mixed scws_get_result(resource scws_handle)`  
    `mixed SimpleCWS::get_result()` 根據 send_text 設定的文字內容,返回一系列切好的詞彙。
   > **返回值** 成功返回切好的詞彙組成的陣列,若無更多詞彙,返回 false。返回的詞彙包含的鍵值如下:
   >
   >   - word _string_ 詞本身
   >   - idf _float_ 逆文字詞頻
   >   - off _int_ 該詞在原文字路的位置
   >   - attr _string_ 詞性
   >
   > **注意** 每次切詞後本函數應該迴圈呼叫,直到返回 false 為止,因為程式每次返回的詞數是不確定的。
13. `mixed scws_get_tops(resource scws_handle [, int limit [, string attr]])`  
    `mixed SimpleCWS::get_tops([int limit [, string attr]])` 根據 send_text 設定的文字內容,返回系統計算出來的最關鍵詞彙列表。
   > **引數 limit** 可選引數,返回的詞的最大數量,預設是 10  
   > **引數 attr** 可選引數,是一系列詞性組成的字串,各詞性之間以半形的逗號隔開,
   > 這表示返回的詞性必須在列表中,如果以~開頭,則表示取反,詞性必須不在列表中,預設為NULL,返回全部詞性,不過濾。  
   > **返回值** 成功返回統計好的的詞彙組成的陣列,返回 false。返回的詞彙包含的鍵值如下:
   >
   >   - word _string_ 詞本身
   >   - times _int_ 詞在文字中出現的次數
   >   - weight _float_ 該詞計算後的權重
   >   - attr _string_ 詞性
14. `mixed scws_get_words(resource scws_handle, string attr)`  
    `mixed SimpleCWS::get_words(string attr)` 根據 send_text 設定的文字內容,返回系統中詞性符合要求的關鍵詞彙。
   > **引數 attr** 是一系列詞性組成的字串,各詞性之間以半形的逗號隔開,
   > 這表示返回的詞性必須在列表中,如果以~開頭,則表示取反,詞性必須不在列表中,若為空則返回全部詞。  
   > **返回值** 成功返回符合要求詞彙組成的陣列,返回 false。返回的詞彙包含的鍵值參見 `scws_get_result`
15. `bool scws_has_words(resource scws_handle, string attr)`  
    `mixed SimpleCWS::has_words(string attr)` 根據 send_text 設定的文字內容,返回系統中是否包括符合詞性要求的關鍵詞。
   > **引數 attr** 是一系列詞性組成的字串,各詞性之間以半形的逗號隔開,
   > 這表示返回的詞性必須在列表中,如果以~開頭,則表示取反,詞性必須不在列表中,若為空則返回全部詞。  
   > **返回值** 如果有則返回 true,沒有就返回 false。
16. `string scws_version(void)`  
    `string SimpleCWS::version(void)` 返回 scws 版本號名稱資訊(字串)。

以上就是如何安裝 php scws(分詞元件)?的詳細內容,更多請關注TW511.COM其它相關文章!