php權重計算方法代碼分享

來源:互聯網
上載者:User

 權重計算,稍加修改亦可用於分詞,詞頻統計,全文和spam檢測等

代碼如下:<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +------------------------------------------------------------------------//  Name       :   權重計算                                         //  Description:   稍加修改,亦可用於分詞,詞頻統計,全文檢索索引和垃圾檢測//  Date       :   2013/12/16 08:51 class weight {    protected $aDict = array(array());    protected $aItems = array();    protected $sLastRule;    protected $aMatchs = array();    protected $aShow = array();  private function init() {  //清空記錄的匹配表和輸出結果  unset($this->aShow); }     public function newItems($mItems) {  //匯入新的項目  $this->aItems = (is_array($mItems))? $mItems: array($mItems);  $this->init(); }  public function newTable(array $aTable) {        //匯入新的對照表,並產生字典        foreach($aTable as $iTableKey=>$sTableLine) {            $aTableLine = explode(',', str_replace('|', ',', $sTableLine));             $setter = function($v, $k, $paraMeter) {                $k1 = $paraMeter[0]; $oWeight = $paraMeter[1];                $oWeight->genDict($v, $k1);            };            array_walk($aTableLine, $setter, array($iTableKey, $this));        }        $this->init(); }     public function getShow($sRule = 'max') {  //擷取最終的顯示結果        if(empty($this->aItems) || empty($this->aDict))            return array();  if (empty($this->aShow) || $sRule != $this->sLastRule)             return $this->genShow($sRule);        return $this->aShow; }     public function genShow($sRule) {        $aShow = array();        $aMatchs = array();  $getter = function($v, $k, $oWeight) use(&$aShow, &$aMatchs, $sRule) {   $t = array_count_values($oWeight->matchWord($v));            $aMatchs[] = $t;            switch ($sRule) {                case 'max':                    $aShow[$k] = array_keys($t, max($t));                     break;            }  };  array_walk($this->aItems, $getter, $this);  $this->aShow = $aShow;  $this->aMatchs = $aMatchs;  return $aShow;    }     private function genDict($mWord, $iKey = '') {        $iInsertPonit = count($this->aDict);        $iCur = 0; //當前節點號        foreach (str_split($mWord) as $iChar) {            if (isset($this->aDict[$iCur][$iChar])) {                $iCur = $this->aDict[$iCur][$iChar];                continue;            }            $this->aDict[$iInsertPonit] = array();            $this->aDict[$iCur][$iChar] = $iInsertPonit;            $iCur = $iInsertPonit;            $iInsertPonit++;        }        $this->aDict[$iCur]['acc'][] = $iKey;      }         function matchWord($sLine) {            $iCur = $iOffset = $iPosition = 0;            $sLine .= "";            $iLen = strlen($sLine);            $aReturn = array();            while($iOffset < $iLen) {                $sChar = $sLine{$iOffset};                if(isset($this->aDict[$iCur][$sChar])) {                    $iCur = $this->aDict[$iCur][$sChar];                    if(isset($this->aDict[$iCur]['acc'])) {                        $aReturn = array_merge($aReturn, $this->aDict[$iCur]['acc']);                         $iPosition = $iOffset + 1;                        $iCur = 0;                    }                } else {                    $iCur = 0;                    $iOffset = $iPosition;                    $iPosition = $iOffset + 1;                }                ++$iOffset;            }            return $aReturn;        }} ?>   外部調用樣本 代碼如下:$aItems = array(    'chinaisbig',    'whichisnot',    'totalyrightforme',);$aTable = array(    'china,is|small',    'china,big|me',    'china,is|big,which|not,me',    'totaly|right,for,me',); $oWeight = new ttrie;$oWeight->newItems($aItems);$aResult = $oWeight->newTable($aTable); 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.