Scws.class.php 2.98 KB
<?php
class Util_Ws_Adapter_Scws extends Util_Ws_Adapter_Abstract 
{
    private $_scws = null;
    public function __construct($options = array())
    {
        $this->_scws = scws_new();
        if(isset($options['charset']))
        {
            $charset = $options['charset'];
        }
        else
        {
            $charset = 'utf8';
        }
        $this->_scws->set_charset($charset);
        if(isset($options['rule_path']))
        {
            $this->_scws->set_rule($options['rule_path']);
        }
        if(isset($options['dict_path']))
        {
            $this->_scws->set_dict($options['dict_path']);
        }
    }
    
    /**
     * 获取分词
     * 
     * @param string $inputs
     * @return mixed
     */
    public function getWords($inputs)
    {
        $res = array();
        $this->_scws->send_text($inputs);
        while($tmp = $this->get_result())
        {
            $res[] = $tmp;
        }
        return $res;
    }
    
    /**
     * 获取最关键词汇列表
     * 
     * @param string $inputs
     * @param int $limit 返回的词的最大数量
     * @param int $attr 是一系列词性组成的字符串,各词性之间以半角的逗号隔开
     */
    public function getTopWords($inputs, $limit = 10, $attr = '')
    {
        $this->_scws->send_text($inputs);
        return $this->_scws->get_tops($limit, $attr);
    }
    
    /**
     * 添加字典
     * 
     * @param string $dict_path
     * @param int $mode(SCWS_XDICT_XDB: 读取 xdb 文件 , SCWS_XDICT_MEM: 将 xdb 文件全部加载到内存中,以 XTree 结构存放, SCWS_XDICT_TXT: 文本词典)
     */
    public function addDict($dict_path, $mode = '')
    {
        $this->_scws->add_dict($dict_path, $mode);
        return $this;
    }
    
    /**
     * 设定分词返回结果时是否去除一些特殊的标点符号之类
     * 
     * @param boolean $state
     */
    public function setIgnore($state)
    {
        $this->_scws->set_ignore($state);
        return $this;
    }
    
    /**
     * 设定分词返回结果时是否复合分割,
     * 如“中国人”返回“中国+人+中国人”三个词。
     * 
     * @param int $mode( 按位异或的  1 | 2 | 4 | 8 分别表示: 短词 | 二元 | 主要单字 | 所有单字)
     */
    public function setMulti($mode)
    {
        $this->_scws->set_multi($mode);
        return $this;
    }
    
    /**
     * 设定是否将闲散文字自动以二字分词法聚合
     * 
     * @param boolean $state
     */
    public function setDuality($state)
    {
        $this->_scws->set_duality($state);
        return $this;
    }

    /**
     * 是否包括符合词性要求的关键词
     * 
     * @param string $inputs
     * @param string $attr
     * @return boolean
     */
    public function hasWords($inputs, $attr = '')
    {
        $this->_scws->send_text($inputs);
        return $this->_scws->has_words($attr);
    }
    
    public function __destruct()
    {
        $this->_scws->close();
    }
}