Sphinxシリーズ記事SCWS中国語分詞

11913 ワード

ソフトウェアリスト
  • SCWS:1.2.2、ダウンロード
  • XDB辞書:ダウンロード
  • インストール
    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と書かない).戻り値:常にtrue
    bool 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%前後であった.プロファイルの変更を続行します.正常に使用できるはずです.