Sphinxシリーズ記事SCWS中国語分詞
ソフトウェアリスト SCWS:1.2.2、ダウンロード XDB辞書:ダウンロード インストール
For Mac/Linux
私のシステムはMac OS X 10.11.2です.
上のソフトウェアをダウンロードしたとします.
ステップ1:コンパイルとインストール
これは、php-sces拡張が、/usr/local/cellar/php 56/5.6.16/lib/php/extensions/debug-non-zts-20131262/パスの下にインストールされていることを示しています.このPHPモジュールを有効にします.
説明:extension:モジュールリンクライブラリパスscws.default.charset:scwsモジュール実行時のデフォルト符号化セットscws.default.fpath:scwsプロファイルパス
PHPを再起動し、モジュールが正常にロードされたかどうかを確認します.
ステップ2:辞書
辞書をscwsをインストールするetcディレクトリに移動します.
インストールが成功したかどうかをテスト
出力:
SCWSは関数の詳細を持っています
mixed scws_new(void)
機能:
戻り値:クラス操作ハンドルを正常に返し、falseを返すことに失敗しました.
mixed scws_open(void)
機能:分詞操作ハンドルを作成して返します.
戻り値:scws操作ハンドルを正常に返し、falseを返すことに失敗しました.
bool scws_close(resource scws_handle)
機能:開いているscws分詞操作ハンドルを閉じます.
パラメータ:
戻り値:常にtrue
bool scws_set_charset(resource scws_handle, string charset)
機能:分詞辞書、ルールセット、テキスト文字列を区別する文字セットを設定します.
パラメータ:
bool scws_add_dict(resource scws_handle, string dict_path [, int mode])
機能:分詞を追加するために使用される辞書、新しく追加された優先検索.
パラメータ:
パラメータ:
戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
bool scws_set_dict(resource scws_handle, string dict_path [, int mode])
機能:分詞に使用する辞書を設定し、既存の辞書リストを消去する
パラメータ:
戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
bool scws_set_rule(resource scws_handle, string rule_path)
機能:分詞に用いる新語識別ルールセット(人名,地名,デジタルタイム年代などの識別に用いる)を設定する.
パラメータ:
戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
bool scws_set_ignore(resource scws_handle, bool yes)
機能:分詞が結果を返すときに特殊な句読点などを除去するかどうかを設定します.
パラメータ:
戻り値:常にtrue
bool scws_set_multi(resource scws_handle, int mode)
機能:分詞が結果を返すときに複式分割するかどうかを設定し、例えば「中国人」が「中国+人+中国人」の3つの語を返す.
パラメータ:
戻り値:常にtrue
bool scws_set_duality(resource scws_handle, bool yes)
機能:閑散文字を自動的に二字分詞で集約するかを設定する
パラメータ:
戻り値:常にtrue
bool scws_send_text(resource scws_handle, string text)
機能:分詞を設定してカットするテキストを送信します.
パラメータ:
戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
注意:システムの最下位処理は、テキストに参照を追加するため、どのくらいのテキストでもメモリの浪費はありません.この関数を実行すると、辞書とルールセットがロードされていない場合、iniで指定したデフォルトディレクトリの下でデフォルト文字セットの辞書とルールセットを自動的に検索しようとします.
mixed scws_get_result(resource scws_handle)
機能:send_によるtextで設定したテキストの内容は、一連のカットされた語彙を返します.
戻り値:カットされた語彙からなる配列を正常に返し、より多くの語彙がなければfalseを返します.返される語彙に含まれるキーの値は次のとおりです.
注意:この関数はfalseを返すまで繰り返し呼び出すべきです.プログラムが返すたびに単語数が不確定になるからです.
mixed scws_get_tops(resource scws_handle [, int limit [, string attr]])
機能:send_によるtextが設定したテキストの内容は,システムが計算した最も重要な語彙のリストに戻る.
パラメータ:
パラメータ:
戻り値:統計された語彙からなる配列を正常に返し、falseを返します.返される語彙に含まれるキーの値は次のとおりです.
mixed scws_get_words(resource scws_handle, string attr)
機能:send_によるtextが設定したテキスト内容は,システム内の語性が要求に合致するキー語彙に戻る.
パラメータ:
戻り値:要求語彙に合致する配列を正常に返し、falseを返します.返される語彙に含まれるキー値は、
bool scws_has_word(resource scws_handle, string attr)
機能:send_によるtextが設定したテキスト内容は,システムに語性要求に合致するキーワードが含まれているか否かを返す.
パラメータ:
戻り値:ある場合はtrueを返し、ない場合はfalseを返します.
string scws_version(void)
機能:scwsバージョン番号情報(文字列)を返します.
戻り値:string、scwsバージョン番号情報を返します.
分詞機能のテスト
出力:
やった!
まとめ
いくつかの語をテストし,分詞の正確性は90%前後であった.プロファイルの変更を続行します.正常に使用できるはずです.
For Mac/Linux
私のシステムはMac OS X 10.11.2です.
上のソフトウェアをダウンロードしたとします.
ステップ1:コンパイルとインストール
#
➜ 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/
これは、php-sces拡張が、/usr/local/cellar/php 56/5.6.16/lib/php/extensions/debug-non-zts-20131262/パスの下にインストールされていることを示しています.この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を再起動し、モジュールが正常にロードされたかどうかを確認します.
➜ kill -USR2 311
➜ php -m | grep scws
#
scws
ステップ2:辞書
#
➜ tar -xvf scws-dict-chs-utf8.tar.bz2
#
x dict.utf8.xdb
辞書をscwsをインストールするetcディレクトリに移動します.
➜ mv dict.utf8.xdb /usr/local/Cellar/scws/etc
インストールが成功したかどうかをテスト
";
echo "---------------------------------------
";
print_r($funcs);
echo "---------------------------------------
";
echo " :
";
echo scws_version();
} else {
echo ' !
';
}
出力:
:
---------------------------------------
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%
SCWSは関数の詳細を持っています
mixed scws_new(void)
機能:
SimpleCWS
クラスのアクションオブジェクトを作成して返します.戻り値:クラス操作ハンドルを正常に返し、falseを返すことに失敗しました.
mixed scws_open(void)
機能:分詞操作ハンドルを作成して返します.
戻り値:scws操作ハンドルを正常に返し、falseを返すことに失敗しました.
bool scws_close(resource scws_handle)
機能:開いているscws分詞操作ハンドルを閉じます.
パラメータ:
scws_handle
、すなわちscws_Openが開いている戻り値.戻り値:常にtrue
bool scws_set_charset(resource scws_handle, string charset)
機能:分詞辞書、ルールセット、テキスト文字列を区別する文字セットを設定します.
パラメータ:
charset
新しく設定する文字セットはutf 8とgbkのみをサポートします.(デフォルトはgbk、utf 8はutf-8と書かない).戻り値:常にtruebool scws_add_dict(resource scws_handle, 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の戻りに失敗しました
bool scws_set_dict(resource scws_handle, string dict_path [, int mode])
機能:分詞に使用する辞書を設定し、既存の辞書リストを消去する
パラメータ:
dict_path
辞書のパス.相対パスまたは完全パス(セキュリティモードのopen_basedirに従う)であってもよい.パラメータ:mode
オプションで、ロード方法を示します.scws_add_dict
参照戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
bool scws_set_rule(resource scws_handle, string rule_path)
機能:分詞に用いる新語識別ルールセット(人名,地名,デジタルタイム年代などの識別に用いる)を設定する.
パラメータ:
rule_path
ルール・セットのパス.相対パスまたは完全パス(セキュリティ・モードのopen_basedirに従う)です.パラメータ:mode
はロードの仕方を示します.scws_add_dict
参照戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
bool scws_set_ignore(resource scws_handle, bool yes)
機能:分詞が結果を返すときに特殊な句読点などを除去するかどうかを設定します.
パラメータ:
yes
trueの場合、結果には句読点は返されず、falseの場合は返され、デフォルトはfalseです.戻り値:常にtrue
bool scws_set_multi(resource scws_handle, int mode)
機能:分詞が結果を返すときに複式分割するかどうかを設定し、例えば「中国人」が「中国+人+中国人」の3つの語を返す.
パラメータ:
mode
複合分詞法のレベルで、デフォルトでは分詞は複合されません.値は、次の定数または組合せ(1〜15で表すこともできる):- SCWS_MULTI_SHORT (1)
- SCWS_MULTI_DUALITY (2) ( 2 )
- SCWS_MULTI_ZMAIN (4)
- SCWS_MULTI_ZALL (8)
戻り値:常にtrue
bool scws_set_duality(resource scws_handle, bool yes)
機能:閑散文字を自動的に二字分詞で集約するかを設定する
パラメータ:
yes
に値を設定し、trueの場合、結果の複数の単語が自動的に二分法で集約され、falseの場合は処理されず、デフォルトはfalseです.戻り値:常にtrue
bool scws_send_text(resource scws_handle, string text)
機能:分詞を設定してカットするテキストを送信します.
パラメータ:
text
で分割するテキストの内容.戻り値:trueの正常な戻りに失敗falseの戻りに失敗しました
注意:システムの最下位処理は、テキストに参照を追加するため、どのくらいのテキストでもメモリの浪費はありません.この関数を実行すると、辞書とルールセットがロードされていない場合、iniで指定したデフォルトディレクトリの下でデフォルト文字セットの辞書とルールセットを自動的に検索しようとします.
mixed scws_get_result(resource scws_handle)
機能:send_によるtextで設定したテキストの内容は、一連のカットされた語彙を返します.
戻り値:カットされた語彙からなる配列を正常に返し、より多くの語彙がなければfalseを返します.返される語彙に含まれるキーの値は次のとおりです.
- word string
- idf float
- off int
- attr string
注意:この関数はfalseを返すまで繰り返し呼び出すべきです.プログラムが返すたびに単語数が不確定になるからです.
mixed scws_get_tops(resource scws_handle [, int limit [, string attr]])
機能:send_によるtextが設定したテキストの内容は,システムが計算した最も重要な語彙のリストに戻る.
パラメータ:
limit
オプションのパラメータで、返される語の最大数、デフォルトは10です.パラメータ:
attr
オプションパラメータは、一連の語性からなる文字列であり、各語性の間は半角のカンマで区切られている.これは、返される語性がリストにある必要があることを示している.~で始まると、逆を表す.語性はリストにない必要があり、デフォルトはNULLで、すべての語性を返し、フィルタしない.戻り値:統計された語彙からなる配列を正常に返し、falseを返します.返される語彙に含まれるキーの値は次のとおりです.
- word string
- times int
- weight float
- attr string
mixed scws_get_words(resource scws_handle, string attr)
機能:send_によるtextが設定したテキスト内容は,システム内の語性が要求に合致するキー語彙に戻る.
パラメータ:
attr
は一連の語性からなる文字列で、各語性の間は半角のカンマで区切られており、これは返される語性がリストにある必要があることを示し、~で始まると取逆を示し、語性がリストにない必要があり、空であればすべての語を返す.戻り値:要求語彙に合致する配列を正常に返し、falseを返します.返される語彙に含まれるキー値は、
scws_get_result
を参照してください.bool scws_has_word(resource scws_handle, string attr)
機能:send_によるtextが設定したテキスト内容は,システムに語性要求に合致するキーワードが含まれているか否かを返す.
パラメータ:
attr
は一連の語性からなる文字列で、各語性の間は半角のカンマで区切られており、これは返される語性がリストにある必要があることを示し、~で始まると取逆を示し、語性がリストにない必要があり、空であればすべての語を返す.戻り値:ある場合はtrueを返し、ない場合はfalseを返します.
string scws_version(void)
機能:scwsバージョン番号情報(文字列)を返します.
戻り値:string、scwsバージョン番号情報を返します.
分詞機能のテスト
";
echo "------------------------------------------------
";
//
$starttime = microtime(true);
//
$keyword = <<
$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 "
";
echo "-------------------------------------------------------------
";
echo "No. Attr Weight(times)
";
echo "-------------------------------------------------------------
";
$list = scws_get_tops($cws, 20, '');
$number = 1;
foreach ($list as $value) {
printf("%02d. %s \t\t\t %s \t %.2f(%d)
",
$number, $value['word'], $value['attr'], $value['weight'], $value['times']);
$number++;
}
echo "-------------------------------------------------------------
";
echo "
";
echo "-------------------------------------------------------------
";
while ($result = scws_get_result($cws)) {
foreach ($result as $value) {
if ($value['len'] == 1 && $value['word'] == "\r")
continue;
if ($value['len'] == 1 && $value['word'] == "
")
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 "
-------------------------------------------------------------
";
echo ' :'.bcsub($endtime, $starttime, 6)." ";
echo "
";
出力:
:
------------------------------------------------
-------------------------------------------------------------
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%前後であった.プロファイルの変更を続行します.正常に使用できるはずです.