zoukankan      html  css  js  c++  java
  • SCWS中文分词,功能函数实例应用

    结合前文的demo演示,现写一个实用的功能函数,使用方法:
    header('Content-Type:text/html;charset=UTF-8');
    $text        = '我是一个中国人,我会C++语言,我也有很多T恤衣服,我想知道奥迪A6与第八代索纳塔哪个油耗低,谢谢花好月圆二手奥拓芽菜好吃悦翔V3怎么样卧槽日系车Q5';
    $so          = scws_new();
    $getFCstr = scwsFenCi($so,$text,$xattr='');
    echo $getFCstr;
    echo '<br />--------------------<br />';
    echo fenCi2Encode($getFCstr);

    /**
     * SCWS中文分词
     * @param  so    SCWS对象实例,如:$so = scws_new();
     * @param  text  待分词的中文文本
     * @param  xattr 过滤的词性(为空就是不过滤词性)
     * @return 返回分好词的字符串(多词空格间隔);失败返回false;
     * @author martinzhang
     */
    function scwsFenCi($so,$text,$xattr=''){
        if(!is_object($so)){return false;}
    
        //设定分词词典、规则集、欲分文本字符串的字符集(utf8 和 gbk)
        $so->set_charset('utf8');
    
        //强行设定分词所用的词典
        //$so->set_dict('D:/Program Files/AppServ/scws/etc/dict.utf8.xdb'); 
        
        //强行设定分词所用的新词识别规则集(用于人名、地名、数字时间年代等识别)
        //$so->set_rule('D:/Program Files/AppServ/scws/etc/rules.utf8.ini');
        
        $so->set_ignore('yes');     //设定分词返回结果时是否去除一些特殊的标点符号之类
        $so->set_duality(false);    //设定是否将闲散文字自动以二字分词法聚合
    
        //设定分词返回结果时是否复式分割,如“中国人”返回“中国+人+中国人”三个词。
        //也可用 1-15 来表示:(1)短词  (2)二元(将相邻的2个单字组合成一个词) (4)重要单字  (8)全部单字
        $so->set_multi(0);
    
        //发送设定分词所要切割的文本
        //执行本函数时,若未加载任何词典和规则集,则会自动试图在 ini 指定的缺省目录下查找缺省字符集的词典和规则集
        $so->send_text($text);
    
        $getWords = $so->get_words($xattr); //n,nz,un,ns,i
        //print_r($getWords);
        if(is_array($getWords)){
            foreach($getWords as $arrWord){
                if(preg_match('/[a-zA-Z0-9]{2,}/',$arrWord['word'],$arrMatch)){
                    $word_fc .= $arrWord['word'].' ';
                }elseif(strlen($arrWord['word'])>=4){
                    $word_fc .= $arrWord['word'].' ';
                }        
            }
            return trim($word_fc);
        }else{
            return false;
        }    
    }
    
    /**
     * 分词转码
     * @param  strKeywords 已经分词的字符串(词间“空格”分隔)
     * @return 返回分词的转码字符串
     * @author martinzhang
     */
    function fenCi2Encode($strKeywords){
        $pattern = array('/%/','/+/');
        $replace = array('',' ');
        return preg_replace($pattern,$replace,urlencode(trim($strKeywords)));
    }
    
    /**
     * 将搜索关键词 高亮
     * @param  keywordStr 关键词(多关键词以“空格”分隔)
     * @param  contentStr 待替换的内容部分
     * @param  color      设置高亮颜色(默认:#ff0000)
     * @return 返回替换后的新内容
     * @author martinzhang
     */
    function highLightKeyword($keywordStr,$contentStr,$color='#ff0000'){
        $arrKW = explode(' ',$keywordStr);
        $arrKW = array_unique($arrKW);
        $color == '' ? $color = '#ff0000' : $color = $color;
        foreach($arrKW as $val){
            $contentStr = str_replace($val,"<span style='color:{$color}'>$val</span>",$contentStr);
        }
        return $contentStr;
    }
  • 相关阅读:
    基于centos的freeradius高可用lvs(UDP)
    sql server 2012的AlwaysOn高可用
    python基础题型一
    用户访一个APP或者网页流程示意图
    DNS解析流程
    crontab的定时任务实例
    Xcode设置
    Nvidia Nsight + .NET
    C++ Pointer-to-Member Selector
    C++11
  • 原文地址:https://www.cnblogs.com/martinzhang/p/3291559.html
Copyright © 2011-2022 走看看