文檔目錄 

SCWS-1.2.3 安裝說明 

以 Linux(FreeBSD) 操作系統為例

1. 取得 scws-1.2.3 的代碼
wget http://www.482075.live/scws/down/scws-1.2.3.tar.bz2

2. 解開壓縮包
[[email protected] ~]$ tar xvjf scws-1.2.3.tar.bz2

3. 進入目錄執行配置腳本和編譯
[[email protected] ~]$ cd scws-1.2.3[[email protected] ~/scws-1.2.3]$ ./configure --prefix=/usr/local/scws ; make ; make install

注:這里和通用的 GNU 軟件安裝方式一樣,具體選項參數執行 ./configure --help 查看。
常用選項為:--prefix=<scws的安裝目錄>

4. 順利的話已經編譯并安裝成功到 /usr/local/scws 中了,執行下面命令看看文件是否存在
[[email protected] ~/scws-1.2.3]$ ls -al /usr/local/scws/lib/libscws.la

5. 試試執行 scws-cli 文件
[[email protected] ~/scws-1.2.3]$ /usr/local/scws/bin/scws -h
scws (scws-cli/1.2.3)
Simple Chinese Word Segmentation - Command line usage.
Copyright (C)2007 by hightman.
...

6 用 wget 下載并解壓詞典,或從主頁下載然后自行解壓再將 *.xdb 放入 /usr/local/scws/etc 目錄中
[[email protected] ~/scws-1.2.3]$ cd /usr/local/scws/etc
[[email protected] /usr/local/scws/etc]$ wget http://www.482075.live/scws/down/scws-dict-chs-gbk.tar.bz2
[[email protected] /usr/local/scws/etc]$ wget http://www.482075.live/scws/down/scws-dict-chs-utf8.tar.bz2
[[email protected] /usr/local/scws/etc]$ tar xvjf scws-dict-chs-gbk.tar.bz2
[[email protected] /usr/local/scws/etc]$ tar xvjf scws-dict-chs-utf8.tar.bz2

7. 寫個小程序測試一下
[[email protected] ~]$ cat > test.c
#include <scws.h>
#include <stdio.h>
main()
{
  scws_t s;
  s = scws_new();
  scws_free(s);
  printf("test ok!\n");
}

8. 編譯測試程序
gcc -o test -I/usr/local/scws/include -L/usr/local/scws/lib test.c -lscws -Wl,--rpath -Wl,/usr/local/scws/lib
./test

9. 這樣就好順利安裝完畢可以使用 libscws 這套 C-API 了

10. 如果您需要在 php 中調用分詞,建議繼續閱讀本文安裝 php 擴展,否則可跳過不看。

    假設您已經將 scws 按上述步驟安裝到 /usr/local/scws 中。
    安裝此擴展要求您的 php 和系統環境安裝了相應的 autoconf automake 工具及 phpize 。

    1) 進入源碼目錄的 phpext/ 目錄 ( cd ~/scws-1.2.3 )
    2) 執行 phpize (在PHP安裝目錄的bin/目錄下)
    3) 執行 ./configure --with-scws=/usr/local/scws 
       若 php 安裝在特殊目錄 $php_prefix, 則請在 configure 后加上 --with-php-config=$php_prefix/bin/php-config
    4) 執行 make 然后用 root 身份執行 make install     
    5) 在 php.ini 中加入以下幾行

[scws]
;
; 注意請檢查 php.ini 中的 extension_dir 的設定值是否正確, 否則請將 extension_dir 設為空,
; 再把 extension = scws.so 指定絕對路徑。
;
extension = scws.so
scws.default.charset = gbk
scws.default.fpath = /usr/local/scws/etc

    6) 命令行下執行 php -m 就能看到 scws 了或者在 phpinfo() 中看看關于 scws 的部分,記得要重啟 web 服務器
       才能使新的 php.ini 生效。
    7) 這樣就算安裝完成了,余下的工作只是PHP代碼編寫問題了。
       關于 PHP 擴展的使用說明請參看代碼中 phpext/README.md 文件或其它文檔章節。
				
	

[返回目錄]

Libscws - C API文檔 

概述
-----

libscws 是 SCWS 中使用 C 語言編寫的函數庫,沒有任何外部庫依賴,代碼力爭簡潔高效,
針對分詞詞典上做了一些優化。除分詞外,也可以用于自行設計的 XDB 文件和 XTree 存取。
所有的操作必須先包含以下頭文件:

```c
#include 
```


數據類型
---------

1. **scws_t** scws 操作句柄(指針),大多數 API 的第一參數類型,通過 `scws_new()` 返回,
   不要嘗試拷貝 `struct scws_st` 數據,拷貝結果不保證可以正確工作。

   ```c
   typedef struct scws_st {
     struct scws_st *p;
     xdict_t d; // 詞典指針,可檢測是否為 NULL 來判斷是否加載成功
     rule_t r; // 規則集指針,可檢測是否為 NULL 來判斷是否加載成功
     unsigned char *mblen;
     unsigned int mode;
     unsigned char *txt;
     int len;
     int off;
     int wend;
     scws_res_t res0; // scws_res_t 解釋見后面
     scws_res_t res1;
     word_t **wmap;
     struct scws_zchar *zmap;
   } scws_st, *scws_t;
   ```

2. **scws_res_t** scws 分詞結果集,單鏈表結構,通過 `scws_get_result()` 返回,
   每次分詞返回的結果集次數是不定的,須循環調用直到返回 `NULL`。

   ```c
   typedef struct scws_result *scws_res_t;
   struct scws_result {
     int off;  // 該詞在原文本中的偏移
     float idf; // 該詞的 idf 值
     unsigned char len; // 該詞的長度
     char attr[3]; // 詞性
     scws_res_t next; // 下一個詞
   };
   ```

3. **scws_top_t** 高頻關鍵詞統計集,簡稱“詞表集”,這是 scws 中統計調用時返回的結構,也是一個單鏈表結構。

   ```c
   typedef struct scws_topword *scws_top_t;
   struct scws_topword
   {
     char *word; // 詞的字符串指針
     float weight; // 統計權重
     short times; // 出現次數
     char attr[2]; // 詞性,注意只有2字節,不保證 ’\0‘ 結尾
     scws_top_t next; // 下一個
   };
   ```

函數詳解
---------

1. `scws_t scws_new()` 分配或初始化與 scws 系列操作的 `scws_st` 對象。該函數將自動分配、初始化、并返回新對象的指針。
   只能通過調用 `scws_free()` 來釋放該對象。

   > **返回值** 初始化的 scws_st * (即 scws_t) 句柄。  
   > **錯誤** 在內存不足的情況下,返回NULL。

2. `scws_t scws_fork(scws_t p)` 在已有 scws 對象上產生一個分支,可以獨立用于某個線程分詞,但它繼承并共享父對象詞典、
   規則集資源。同樣需要調用 `scws_free()` 來釋放對象。在該分支對象上重設詞典、規則集不會影響父對象及其它分支。
 
   > **參數 p** 現有的 scws 對象(也可以是分支)  
   > **返回值** 克隆出來的分支 scws_st * (scws_t) 句柄。  
   > **錯誤** 在內存不足的情況下,返回NULL。  
   > **注意** 主要用于多線程環境,以便共享內存詞典、規則集。在 v1.2.0 及以前,分支對象設置詞典規則集會影響到原對象及其它兄弟分支。

3. `void scws_free(scws_t s)` 釋放 scws 操作句柄及對象內容,同時也會釋放已經加載的詞典和規則。

4. `void scws_set_charset(scws_t s, const char *cs)` 設定當前 scws 所使用的字符集。

   > **參數 cs** 新指定的字符集。若無此調用則系統缺省使用 gbk,還支持 utf8,指定字符集時參數的大小寫不敏感。  
   > **錯誤** 若指定的字符集不存在,則會自動使用 gbk 字符集替代。

5. `int scws_add_dict(scws_t s, const char *fpath, int mode)` 添加詞典文件到當前 scws 對象。

   > **參數 fpath** 詞典的文件路徑,詞典格式是 XDB或TXT 格式。  
   > **參數 mode** 有3種值,分別為預定義的:
   >
   >   - SCWS_XDICT_TXT  表示要讀取的詞典文件是文本格式,可以和后2項結合用
   >   - SCWS_XDICT_XDB  表示直接讀取 xdb 文件
   >   - SCWS_XDICT_MEM  表示將 xdb 文件全部加載到內存中,以 XTree 結構存放,可用異或結合另外2個使用。
   >
   >   具體用哪種方式需要根據自己的實際應用來決定。當使用本庫做為守護進程時推薦使用 mem 方式,
   >   當只是嵌入調用時應該使用 xdb 方式,將 xdb 文件加載進內存不僅占用了比較多的內存,
   >   而且也需要一定的時間(35萬條數據約需要0.3~0.5秒左右)。
   >
   > **返回值** 成功返回 0,失敗返回 -1。  
   > **注意** 若此前 scws 句柄已經加載過詞典,則新加入的詞典具有更高的優先權。

6. `int scws_set_dict(scws_t s, const char *fpath, int mode)` 清除并設定當前 scws 操作所有的詞典文件。

   > **參數 fpath** 詞典的文件路徑,詞典格式是 XDB或TXT 格式。  
   > **參數 mode** 有3種值,參見 `scws_add_dict`。  
   > **返回值** 成功返回 0,失敗返回 -1。  
   > **注意** 若此前 scws 句柄已經加載過詞典,則此調用會先釋放已經加載的全部詞典。和 `scws_add_dict` 的區別在于會覆蓋已有詞典。

7. `void scws_set_rule(scws_t s, const char *fpath)` 設定規則集文件。

   > **參數 fpath** 規則集文件的路徑。若此前 scws 句柄已經加載過規則集,則此調用會先釋放已經加載的規則集。  
   > **錯誤** 加載失敗,scws_t 結構中的 r 元素為 NULL,即通過 s->r == NULL 與否來判斷加載的失敗與成功。  
   > **注意** 規則集定義了一些新詞自動識別規則,包括常見的人名、地區、數字年代等。規則編寫方法另行參考其它部分。  

8. `void scws_set_ignore(scws_t s, int yes)` 設定分詞結果是否忽略所有的標點等特殊符號(不會忽略\r和\n)。

   > **參數 yes** 1 表示忽略,0 表示不忽略,缺省情況為不忽略。

9. `void scws_set_multi(scws_t s, int mode)` 設定分詞執行時是否執行針對長詞復合切分。(例:“中國人”分為“中國”、“人”、“中國人”)。

   > **參數 mode** 復合分詞法的級別,缺省不復合分詞。取值由下面幾個常量異或組合:
   >
   >   - SCWS_MULTI_SHORT   短詞
   >   - SCWS_MULTI_DUALITY 二元(將相鄰的2個單字組合成一個詞)
   >   - SCWS_MULTI_ZMAIN   重要單字
   >   - SCWS_MULTI_ZALL    全部單字

10. `void scws_set_duality(scws_t s, int yes)` 設定是否將閑散文字自動以二字分詞法聚合。

   > **參數 yes** 如果為 1 表示執行二分聚合,0 表示不處理,缺省為 0。  

11. `void scws_set_debug(scws_t s, int yes)` 設定分詞時對于疑難多路徑綜合分詞時,是否打印出各條路徑的情況。

   > **注意** 打印使用的是 `fprintf(stderr, ...)` 故不要隨便用,并且只有編譯時加入 --enable-debug 選項才有效。

12. `void scws_send_text(scws_t s, const char *text, int len)` 設定要切分的文本數據。

   > **參數 text** 文本字符串指針。  
   > **參數 len** 文本的長度。  
   > **注意** 該函數可安全用于二進制數據,不會因為字符串中包括 \0 而停止切分。
   > 這個函數應在 `scws_get_result()` 和 `scws_get_tops()` 之前調用。
   >
   > scws 結構內部維護著該字符串的指針和相應的偏移及長度,連續調用后會覆蓋之前的設定;故不應在多次的 scws_get_result 
   > 循環中再調用 scws_send_text() 以免出錯。

13. `scws_res_t scws_get_result(scws_t s)` 取回一系列分詞結果集。

   > **返回值** 結果集鏈表的頭部指針,該函數必須循環調用,當返回值為 NULL 時才表示分詞結束。  
   > **注意** 該分詞結果必須調用 `scws_free_result()` 釋放,參數為返回的鏈表頭指針。

14. `void scws_free_result(scws_res_t result)` 根據結果集的鏈表頭釋放結果集。

15. `scws_top_t scws_get_tops(scws_t s, int limit, char *xattr)` 返回指定的關鍵詞表統計集,系統會自動根據詞語出現的次數及其 idf 值計算排名。

   > **參數 limit** 指定取回數據的最大條數,若傳入值為0或負數,則自動重設為10。  
   > **參數 xattr** 用來描述要排除或參與的統計詞匯詞性,多個詞性之間用逗號隔開。
   > 當以~開頭時表示統計結果中不包含這些詞性,否則表示必須包含,傳入 NULL 表示統計全部詞性。  
   > **返回值** 詞表集鏈表的頭指針,該詞表集必須調用 `scws_free_tops()` 釋放。

16. `void scws_free_tops(scws_top_t tops)` 根據詞表集的鏈表頭釋放詞表集。


17. `int scws_has_word(scws_t s, char *xattr)` 判斷text中是包括指定的詞性的詞匯。

   > **參數 xattr** 用來描述要排除或參與的統計詞匯詞性,多個詞性之間用逗號隔開。
   > 當以~開頭時表示統計結果中不包含這些詞性,否則表示必須包含,傳入 NULL 表示統計全部詞性。  
   > **返回值** 如果有返回 1 沒有則返回 0。

18. `scws_top_t scws_get_words(scws_t s, char *xattr)` 返回指定詞性的關鍵詞表,系統會根據詞語出現的先后插入列表。

   > **參數 xattr** 用來描述要排除或參與的統計詞匯詞性,多個詞性之間用逗號隔開。
   > 當以~開頭時表示統計結果中不包含這些詞性,否則表示必須包含,傳入 NULL 表示統計全部詞性。  
   > **返回值** 返回詞表集鏈表的頭指針,該詞表集必須調用 `scws_free_tops()` 釋放。



實例代碼
----------

下面是一個簡單的分詞實例代碼,假設您的 scws 已安裝至 `/usr/local` 目錄,下面是源碼:

```c
#include <stdio.h>
#include <scws/scws.h>
#define SCWS_PREFIX     "/usr/local/scws"

main()
{
  scws_t s;
  scws_res_t res, cur;
  char *text = "Hello, 我名字叫李那曲是一個中國人, 我有時買Q幣來玩, 我還聽說過C#語言";

  if (!(s = scws_new())) {
    printf("ERROR: cann't init the scws!\n");
    exit(-1);
  }
  scws_set_charset(s, "utf8");
  scws_set_dict(s, "/usr/local/scws/etc/dict.utf8.xdb", SCWS_XDICT_XDB);
  scws_set_rule(s, "/usr/local/scws/etc/rules.utf8.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);
}
```

將以上代碼復制保存為 test.c 然后執行下面指令編譯并測試運行:

```
gcc -o test -I/usr/local/scws/include -L/usr/local/scws/lib test.c -lscws
./test
```
	

[返回目錄]

SCWS-1.x.x 命令行工具 

1. **$prefix/bin/scws** 這是分詞的命令行工具,執行 scws -h 可以看到詳細幫助說明。
   ```
   Usage: scws [options] [[-i] input] [[-o] output]
   ```
   * _-i string|file_ 要切分的字符串或文件,如不指定則程序自動讀取標準輸入,每輸入一行執行一次分詞
   * _-o file_ 切分結果輸出保存的文件路徑,若不指定直接輸出到屏幕
   * _-c charset_ 指定分詞的字符集,默認是 gbk,可選 utf8
   * _-r file_ 指定規則集文件(規則集用于數詞、數字、專有名字、人名的識別)
   * _-d file[:file2[:...]]_ 指定詞典文件路徑(XDB格式,請在 -c 之后使用)
     ```
     自 1.1.0 起,支持多詞典同時載入,也支持純文本詞典(必須是.txt結尾),多詞典路徑之間用冒號(:)隔開,
     排在越后面的詞典優先級越高。
     
     文本詞典的數據格式參見 scws-gen-dict 所用的格式,但更寬松一些,允許用不定量的空格分開,只有<詞>是必備項目,
     其它數據可有可無,當詞性標注為“!”(嘆號)時表示該詞作廢,即使在較低優先級的詞庫中存在該詞也將作廢。
     ```
   * _-M level_ 復合分詞的級別:1~15,按位異或的 1|2|4|8 依次表示 短詞|二元|主要字|全部字,缺省不復合分詞。
   * _-I_ 輸出結果忽略跳過所有的標點符號
   * _-A_ 顯示詞性
   * _-E_ 將 xdb 詞典讀入內存 xtree 結構 (如果切分的文件很大才需要)
   * _-N_ 不顯示切分時間和提示
   * _-D_ debug 模式 (很少用,需要編譯時打開 --enable-debug)
   * _-U_ 將閑散單字自動調用二分法結合
   * _-t num_ 取得前 num 個高頻詞
   * _-a [~]attr1[,attr2[,...]]_ 只顯示某些詞性的詞,加~表示過濾該詞性的詞,多個詞性之間用逗號分隔
   * _-v_ 查看版本

2. **$prefix/bin/scws-gen-dict** 詞典轉換工具
   ```
   Usage: scws-gen-dict [options] [-i] dict.txt [-o] dict.xdb
   ```
   * _-c charset_ 指定字符集,默認為 gbk,可選 utf8
   * _-i file_ 文本文件(txt),默認為 dict.txt
   * _-o file_ 輸出 xdb 文件的路徑,默認為 dict.xdb
   * _-p num_ 指定 XDB 結構 HASH 質數(通常不需要)
   * _-U_ 反向解壓,將輸入的 xdb 文件轉換為 txt 格式輸出 (TODO)

   > 文本詞典格式為每行一個詞,各行由 4 個字段組成,字段之間用若干個空格或制表符(\t)分隔。
   > 含義(其中只有 <詞> 是必須提供的),`#` 開頭的行視為注釋忽略不計:
   > ```
   > #<詞>  <詞頻(TF)>  <詞重(IDF)>  <詞性(北大標注)>
   > 新詞條 12.0        2.2          n
   > ```
	

[返回目錄]

SCWS - PHP 擴展之文檔 

簡介
-----

[SCWS][1] 是一個簡易的中文分詞引擎,它可以將輸入的文本字符串根據設定好的選項切割后以數組形式返回每一個詞匯。
它為中文而編寫,支持 gbk 和 utf8 字符集,適當的修改詞典后也可以支持非中文的多字節語言切詞(如日文、韓文等)。
除分詞外,還提供一個簡單的關鍵詞匯統計功能,它內置了一個簡單的算法來排序。

更多相關情況請訪問 scws 主頁:


需求
-----

本擴展需要 scws-1.x.x 的支持。


安裝
-----

這是一個 php 擴展,除 windows 上的 php_scws.dll 外只提供源代碼,需要自行下載并編譯,具體參見[這里][2]。


運行時配置
----------

`scws.default.charset`  default = gbk, Changeable = PHP_INI_ALL  
`scws.default.fpath` default = NULL, Changeable = PHP_INI_ALL


> 有關 PHP_INI_* 常量進一步的細節與定義參見 PHP 手冊。


資源類型
----------

本擴展定義了一種資源類型:scws 指針,指向正在被操作的 scws 對象。


預定義常量
-----------

* `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 版本號名稱信息(字符串)。


其它
------

本說明由 hightman 首次編寫于 2007/06/07,最近于 2013/01/07 更新。


[1]: http://www.482075.live/scws/
[2]: https://github.com/hightman/scws/blob/master/README.md
	

[返回目錄]

php_scws.dll/Win32 安裝說明 

1. 根據您當前用的 PHP 版本,下載相應已編譯好的 php_scws.dll 擴展庫。
   目前支持 PHP-4.4.x 和 PHP-5.2.x 系列,下載地址分別為:

   php-4.4.x: http://www.482075.live/scws/down/php-4.4.x/php_scws.dll
   php-5.2.x: http://www.482075.live/scws/down/php-5.2.x/php_scws.dll
   php-5.3.x: http://www.482075.live/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.482075.live/scws/down/scws-dict-chs-gbk.tar.bz2
           http://www.482075.live/scws/down/scws-dict-chs-utf8.tar.bz2
           http://www.482075.live/scws/down/scws-dict-cht-utf8.tar.bz2

5. 從 scws 主頁上下載規則集文件,解壓后將 *.ini 放到第 3 步建立的目錄
   規則集文件壓縮包:http://www.482075.live/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 服務器即可完成。
	

[返回目錄]

PSCWS23 使用文檔 

PSCWS2 和 PSCWS3 這兩個類對應的文件分別為 pscws2.class.php 和 pscws3.class.php ,分別為
第二版及第三版。在 PHP 代碼中的調用方法如下:

// 加入頭文件, 若用第3版則文件名應為 pscws3.class.php
require '/path/to/pscws2.class.php';

// 建立分詞類對像, 參數為詞典路徑
$pscws = new PSCWS2('/path/to/dict/dict.xdb');

//
// 接下來, 設定一些分詞參數或選項
// 包括: set_dict, set_ignore_mark, set_autodis, set_debug ... 等方法
// 

// 調用 segment 方法執行詞匯切割, segment 的第二參數為回調函數, 這將使系統自動將切好的詞
// 組成的數組作為參數傳遞給該回調函數去執行,若為空則將詞組成的數組返回。

$res = $pscws->segment($string);
print_r($res);

或 (特別地,回調函數視情況會多次調用)

function seg_cb($res) { print_r($res); }
$pscws->segment($string, 'seg_cb');

--- 類方法完全手冊 ---
(注: 構造函數可傳入詞典路徑作為參數, 這與另外調用 set_dict 效果是一樣的)

class PSCWS2 { | class PSCWS3 {
  
  void set_dict(string dict_fpath);
  說明:設置分詞引擎所采用的詞典文件。
  參數:dict_fpath 為詞典路徑,內部會根據詞典路徑的后綴名采用相應的處理方式。
  返回值:無。
  錯誤:若有錯誤會給出 WARNING 級的錯誤提示。

  void set_ignore_mark(bool set);
  說明:設置分詞結果是否忽略標點符號。
  參數:set 必須為布爾型的 true 或 false,分別表示要忽略和不忽略。
  返回值:無。

  void set_autodis(bool set);
  說明:設置分詞算法是否啟用自動識別人名。
  參數:set 必須為布爾型的 true 或 false,分別表示要識別和不識別。
  返回值:無。

  void set_debug(bool set);
  說明:設置分詞過程是否輸出分詞過程的調試信息。
  參數:set 必須為布爾型的 true 或 false,分別表示要輸出和不輸出。
  返回值:無。

  void set_statistics(bool set);
  說明:設置分詞過程是否記錄各詞匯出現的次數及位置。
  參數:set 必須為布爾型的 true 或 false,分別表示要記錄和不記錄。
  返回值:無。
  其它:在 segment() 方法執行結束后調用 get_statistics() 方法獲取統計信息。

  Array &get_statistics(void);
  說明:返回上次 segment() 調用的分詞結果的各詞匯出現的次數及位置信息(引用返回)。
  參數:無。
  返回值:以詞匯為鍵名,其值由次數(times)和(poses)位置列表數組組成。
  其它:該方法應該在 segment() 方法后調用,每次 segment() 調用前統計信息自動清零。

  mixed &segment(string text [, string cb]);
  說明:對字符串 text 執行分詞。
  參數:text 為要執行分詞的字符串;
        cb 是處理分詞結果的回調函數名稱,它接受由切好的詞語組成的數組這一參數。
  返回值:當 cb 參數沒有傳入時,返回切好的詞語組成的數組成(可以以引用方式返回),
          若采用回調函數處理分詞結果,則直接返回 true。
  其它:cb 函數在一次 segment() 過程中可能是多次調用的。
        若沒有傳入 cb 參數,segment() 將會在 text 分詞結果后再將結果一次返回,
    當 text 很長時速度較慢,建議將 text 按明顯的換行標記切分后再依次調用
    segment() 方法進行切詞以提高效率!
};
	

[返回目錄]

PSCWS4 使用文檔 

PSCWS4 類對應的文件為 pscws4.class.php。在 PHP 代碼中的調用方法如下:

// 加入頭文件
require '/path/to/pscws4.class.php';

// 建立分詞類對像, 參數為字符集, 默認為 gbk, 可在后面調用 set_charset 改變
$pscws = new PSCWS4('utf8');

//
// 接下來, 設定一些分詞參數或選項, set_dict 是必須的, 若想智能識別人名等需要 set_rule 
//
// 包括: set_charset, set_dict, set_rule, set_ignore, set_multi, set_debug, set_duality ... 等方法
// 
$pscws->set_dict('/path/to/etc/dict.xdb');
$pscws->set_rule('/path/to/etc/rules.ini');

// 分詞調用 send_text() 將待分詞的字符串傳入, 緊接著循環調用 get_result() 方法取回一系列分好的詞
// 直到 get_result() 返回 false 為止
// 返回的詞是一個關聯數組, 包含: word 詞本身, idf 逆詞率(重), off 在text中的偏移, len 長度, attr 詞性
//

$pscws->send_text($text);
while ($some = $pscws->get_result())
{
   foreach ($some as $word)
   {
      print_r($word);
   }
}

// 在 send_text 之后可以調用 get_tops() 返回分詞結果的詞語按權重統計的前 N 個詞
// 常用于提取關鍵詞, 參數用法參見下面的詳細介紹.
// 返回的數組元素是一個詞, 它又包含: word 詞本身, weight 詞重, times 次數, attr 詞性
$tops = $pscws->get_tops(10, 'n,v');
print_r($tops);

--- 類方法完全手冊 ---
(注: 構造函數可傳入字符集作為參數, 這與另外調用 set_charset 效果是一樣的)

class PSCWS4 {

  void set_charset(string charset);
  說明:設定分詞詞典、規則集、欲分文本字符串的字符集,系統缺省是 gbk 字集。
  返回:無。
  參數:charset 是設定的字符集,目前只支持 utf8 和 gbk。(注:big5 也可作 gbk 處理)
  注意:輸入要切分的文本,詞典,規則文件這三者的字符集必須統一為該 charset 值。
  
  bool set_dict(string dict_fpath);
  說明:設置分詞引擎所采用的詞典文件。
  參數:dict_path 是詞典的路徑,可以是相對路徑或完全路徑。
  返回:成功返回 true 失敗返回 false。
  錯誤:若有錯誤會給出 WARNING 級的錯誤提示。
  
  void set_rule(string rule_path);
  說明:設定分詞所用的新詞識別規則集(用于人名、地名、數字時間年代等識別)。
  返回:無。
  參數:rule_path 是規則集的路徑,可以是相對路徑或完全路徑。
  
  void set_ignore(bool yes)
  說明:設定分詞返回結果時是否去除一些特殊的標點符號之類。
  返回:無。
  參數:yes 設定值,如果為 true 則結果中不返回標點符號,如果為 false 則會返回,缺省為 false。
  
  void set_multi(int mode);
  說明:設定分詞返回結果時是否復合分割,如“中國人”返回“中國+人+中國人”三個詞。
  返回:無。
  參數:mode 設定值,1 ~ 15。
        按位異或的 1 | 2 | 4 | 8 分別表示: 短詞 | 二元 | 主要單字 | 所有單字
    
  void set_duality(bool yes);
  說明:設定是否將閑散文字自動以二字分詞法聚合。
  返回:無。
  參數:yes 設定值,如果為 true 則結果中多個單字會自動按二分法聚分,如果為 false 則不處理,缺省為 false。

  void set_debug(bool yes);
  說明:設置分詞過程是否輸出N-Path分詞過程的調試信息。
  參數:yes 設定值,如果為 true 則分詞過程中對于多路徑分法分給出提示信息。
  返回:無。
  
  void send_text(string text)
  說明:發送設定分詞所要切割的文本。
  返回:無。
  參數:text 是文本的內容。
  注意:執行本函數時,請先加載詞典和規則集文件并設好相關選項。
  
  mixed get_result(void)
  說明:根據 send_text 設定的文本內容,返回一系列切好的詞匯。
  返回:成功返回切好的詞匯組成的數組, 若無更多詞匯,返回 false。
  參數:無。
  注意:每次切割后本函數應該循環調用,直到返回 false 為止,因為程序每次返回的詞數是不確定的。
        返回的詞匯包含的鍵值有:word (string, 詞本身) idf (folat, 逆文本詞頻) off (int, 在文本中的位置) attr(string, 詞性)
    
  mixed get_tops( [int limit [, string attr]] )
  說明:根據 send_text 設定的文本內容,返回系統計算出來的最關鍵詞匯列表。
  返回:成功返回切好的詞匯組成的數組, 若無更多詞匯,返回 false。
  參數:limit 可選參數,返回的詞的最大數量,缺省是 10;
        attr 可選參數,是一系列詞性組成的字符串,各詞性之間以半角的逗號隔開,
             這表示返回的詞性必須在列表中,如果以~開頭,則表示取反,詞性必須不在列表中,
         缺省為空,返回全部詞性,不過濾。
         
  string version(void);
  說明:返回本版號。
  返回:版本號(字符串)。
  參數:無。
  
  void close(void);
  說明:關閉釋放資源,使用結束后可以手工調用該函數或等系統自動回收。
  返回:無。
  參數:無。
};
	

[返回目錄]

詞典詞性標注詳解 

由于詞典條目多達26萬條之巨,在整理的時候已經把很多明顯不對的標注或詞條清理了,
但仍然肯定有很多錯誤的條目。

主要表現在不是詞的列在詞里,還有詞性標注錯誤的。本詞典中的標注使用的是北大
版本的標注集(見附錄),在使用中發現錯誤的請大家協助跟蹤匯報。這是一個長期
艱巨的任務,希望本著有一糾一的原則。如有匯報,請遵守格式為:

詞 原attr 正確attr
--------------------------
XXX - - (表示錯誤或不需要的詞,應刪除)不需要的詞指能自動識別了的。
XXX n c (原來標注為n 實際應該為 c)

---- 附北大詞性標注版本 ----
Ag 
形語素 
形容詞性語素。形容詞代碼為a,語素代碼g前面置以A。 

a 
形容詞 
取英語形容詞adjective的第1個字母。 

ad 
副形詞 
直接作狀語的形容詞。形容詞代碼a和副詞代碼d并在一起。 

an 
名形詞 
具有名詞功能的形容詞。形容詞代碼a和名詞代碼n并在一起。 

b 
區別詞 
取漢字“別”的聲母。 

c 
連詞 
取英語連詞conjunction的第1個字母。 

Dg 
副語素 
副詞性語素。副詞代碼為d,語素代碼g前面置以D。 

d 
副詞 
取adverb的第2個字母,因其第1個字母已用于形容詞。 

e 
嘆詞 
取英語嘆詞exclamation的第1個字母。 

f 
方位詞 
取漢字“方” 

g 
語素 
絕大多數語素都能作為合成詞的“詞根”,取漢字“根”的聲母。 

h 
前接成分 
取英語head的第1個字母。 

i 
成語 
取英語成語idiom的第1個字母。 

j 
簡稱略語 
取漢字“簡”的聲母。 

k 
后接成分 
  
l 
習用語 
習用語尚未成為成語,有點“臨時性”,取“臨”的聲母。 

m 
數詞 
取英語numeral的第3個字母,n,u已有他用。 

Ng 
名語素 
名詞性語素。名詞代碼為n,語素代碼g前面置以N。 

n 
名詞 
取英語名詞noun的第1個字母。 

nr 
人名 
名詞代碼n和“人(ren)”的聲母并在一起。 

ns 
地名 
名詞代碼n和處所詞代碼s并在一起。 

nt 
機構團體 
“團”的聲母為t,名詞代碼n和t并在一起。 

nz 
其他專名 
“?!钡穆暷傅牡?個字母為z,名詞代碼n和z并在一起。 

o 
擬聲詞 
取英語擬聲詞onomatopoeia的第1個字母。 

ba 介詞 把、將   
bei 介詞 被   
p 
介詞 
取英語介詞prepositional的第1個字母。 

q 
量詞 
取英語quantity的第1個字母。 

r 
代詞 
取英語代詞pronoun的第2個字母,因p已用于介詞。 

s 
處所詞 
取英語space的第1個字母。 

Tg 
時語素 
時間詞性語素。時間詞代碼為t,在語素的代碼g前面置以T。 

t 
時間詞 
取英語time的第1個字母。 

dec 助詞 的、之   
deg 助詞 得   
di 助詞 地   
etc 助詞 等、等等   
as 助詞 了、著、過   
msp 助詞 所   
u 
其他助詞 
取英語助詞auxiliary 

Vg 
動語素 
動詞性語素。動詞代碼為v。在語素的代碼g前面置以V。 

v 
動詞 
取英語動詞verb的第一個字母。 

vd 
副動詞 
直接作狀語的動詞。動詞和副詞的代碼并在一起。 

vn 
名動詞 
指具有名詞功能的動詞。動詞和名詞的代碼并在一起。 

w 
其他標點符號 
  
x 
非語素字 
非語素字只是一個符號,字母x通常用于代表未知數、符號。 

y 
語氣詞 
取漢字“語”的聲母。 

z 
狀態詞 
取漢字“狀”的聲母的前一個字母。
	

[返回目錄]

青海快三开奖走势图_ 兼职招聘工资日结网 横店东磁股票分析 3月连续涨停股票 广西11先5开奖走势图 大神娱乐棋牌 2020网络赚钱项目 股票k线图基础知识 宝博棋牌客服 玩网络捕鱼赌博有什么技巧 幸运飞艇四码不死打法