国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

文章相似度計算

Jeffrrey / 2768人閱讀

摘要:文章內容相似度計算幾種方式及優缺點內置方法是內置的字符串相似度對比函數,是使用方式最便捷的一種但是因為它的時間復雜度是,處理時間會隨著內容長度增加若比較字以上的文章,或者比較文章的量級比較大不建議使用只是單篇文章對單篇文章可以使用。

文章內容相似度計算幾種方式及優缺點 PHP 內置方法 similar_text

similar_text 是PHP內置的字符串相似度對比函數,是使用方式最便捷的一種,但是因為它的時間復雜度是 O(N**3),處理時間會隨著內容長度增加,若比較5000字以上的文章,或者比較文章的量級比較大不建議使用,只是單篇文章對單篇文章可以使用。

通過分詞進行余弦相似度對比

解決方案是首先進行文章分詞可以用結巴或者迅搜分詞服務進行文章分詞,然后將需要對比的文章分詞結果存入redis,在有新文章進行對比的時候從redis將所有文章的分詞結果從內存中取出來然后進行相似度對比,逐詞進行相似度計算。相似度計算的準確性很高,但是對比的文章量非常大的時候,處理時間還是會很長,5000文章的相似度計算需要近30S

主要計算代碼:

Class TextSimilarity
{
    /**
     * [排除的詞語]
     *
     * @var array
     */
    private $_excludeArr = array("的", "了", "和", "呢", "啊", "哦", "恩", "嗯", "吧");

    /**
     * [詞語分布數組]
     *
     * @var array
     */
    private $_words = array();

    /**
     * [分詞后的數組一]
     *
     * @var array
     */
    private $_segList1 = array();

    /**
     * [分詞后的數組二]
     *
     * @var array
     */
    private $_segList2 = array();

    private static $test1 = array();
    private static $test2 = array();

    /**
     * [分詞兩段文字]
     *
     * @param [type] $text1 [description]
     * @param [type] $text2 [description]
     */
    public function __construct($text1, $text2)
    {
        $this->_segList1 = is_array( $text1 ) ? $text1 : $this->segment( $text1 );
        $this->_segList2 = is_array( $text2 ) ? $text2 : $this->segment( $text2 );
    }

    /**
     * [外部調用]
     *
     * @return [type] [description]
     */
    public function run()
    {
        $this->analyse();
        $rate = $this->handle();
        return $rate ? $rate : "errors";
    }

    /**
     * [分析兩段文字]
     */
    private function analyse()
    {
        //t1
        foreach ($this->_segList1 as $v) {
            if (!in_array($v, $this->_excludeArr)) {
                if (!array_key_exists($v, $this->_words)) {
                    $this->_words[$v] = array(1, 0);
                } else {
                    $this->_words[$v][0] += 1;
                }
            }
        }

        //t2
        foreach ($this->_segList2 as $v) {
            if (!in_array($v, $this->_excludeArr)) {
                if (!array_key_exists($v, $this->_words)) {
                    $this->_words[$v] = array(0, 1);
                } else {
                    $this->_words[$v][1] += 1;
                }
            }
        }
    }

    /**
     * [處理相似度]
     *
     * @return [type] [description]
     */
    private function handle()
    {
        $sum = $sumT1 = $sumT2 = 0;
        foreach ($this->_words as $word) {
            $sum += $word[0] * $word[1];
            $sumT1 += pow($word[0], 2);
            $sumT2 += pow($word[1], 2);
        }

        $rate = $sum / (sqrt($sumT1 * $sumT2));
        return $rate;
    }

    /**
     * [分詞  【http://www.xunsearch.com/scws/docs.php#pscws23】]
     *
     * @param [type] $text [description]
     *
     * @return [type] [description]
     *
     * @description 分詞只是一個簡單的例子,你可以使用任意的分詞服務
     */
    private function segment( $text )
    {
        $outText = array();
        $xs = new XS("demo");  // 必須先創建一個 xs 實例,否則會拋出異常
        $tokenizer = new XSTokenizerScws;   // 直接創建實例
        $tokenizer->setIgnore();
        //處理
        $outText = $tokenizer->setMulti(1)->getResult($text);
        $outText = array_column( $outText, "word");
        $res = $xs->getScwsServer();
        $res->close();
        return $outText;
    }
}
    
SimHash

SimHash的原理是將很長的一段文字降維成一個0和1組成的字符串,然后計算兩個01字符串的相似度,從而算出兩篇文章的相似程度。也是將文章先分詞,計算存量文章的相似度存入redis或者mysql,需要的時候取出來對比,對比速度20000篇文章的計算時間基本上在2s以內,但是當文章字數非常小并且重復詞非常多的時候會出現文章不相同但是相似度非常高的問題。
主要計算代碼:

    class SimHash
{
    protected static $length = 256;
    protected static $search = array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
    protected static $replace = array("0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111");
    /**
     * [排除的詞語]
     *
     * @var array
     */
    private static $_excludeArr = array("的", "了", "和", "呢", "啊", "哦", "恩", "嗯", "吧","你","我"," ");

    public static function get(array &$set)
    {
        $boxes = array_fill(0, self::$length, 0);
        if (is_int(key($set)))
            $dict = array_count_values($set);
        else
            $dict = &$set;

        foreach ($dict as $element => $weight) {
            if ( in_array($element, self::$_excludeArr )){
                continue;
            }

            $hash = hash("sha256", $element);
            $hash = str_replace(self::$search, self::$replace, $hash);
            $hash = substr($hash, 0, self::$length);
            $hash = str_pad($hash, self::$length, "0", STR_PAD_LEFT);

            for ( $i=0; $i < self::$length; $i++ ) {
                $boxes[$i] += ($hash[$i] == "1") ? $weight : -$weight;
            }
        }
        $s = "";
        foreach ($boxes as $box) {
            if ($box > 0)
                $s .= "1";
            else
                $s .= "0";
        }
        return $s;
    }

    public static function hd($h1, $h2)
    {
        $dist = 0;
        for ($i=0;$i           
               
                                           
                       
                 

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29724.html

相關文章

  • 基于Tags的簡單內容推薦的實現

    摘要:原來為了簡單方便,自己小網站上的文章頁的相關內容推薦就是從數據庫里隨機抽取數據來填充一個列表,所以一點相關性都沒有,更本沒有辦法引導用戶去訪問推薦內容。 原來為了簡單方便,自己小網站上的文章頁的相關內容推薦就是從數據庫里隨機抽取數據來填充一個列表,所以一點相關性都沒有,更本沒有辦法引導用戶去訪問推薦內容。 算法選擇 如何能做到相似內容的推薦呢,礙于小網站還跑在虛擬主機上(對的,連一個自...

    CrazyCodes 評論0 收藏0
  • 基于Tags的簡單內容推薦的實現

    摘要:原來為了簡單方便,自己小網站上的文章頁的相關內容推薦就是從數據庫里隨機抽取數據來填充一個列表,所以一點相關性都沒有,更本沒有辦法引導用戶去訪問推薦內容。 原來為了簡單方便,自己小網站上的文章頁的相關內容推薦就是從數據庫里隨機抽取數據來填充一個列表,所以一點相關性都沒有,更本沒有辦法引導用戶去訪問推薦內容。 算法選擇 如何能做到相似內容的推薦呢,礙于小網站還跑在虛擬主機上(對的,連一個自...

    邱勇 評論0 收藏0
  • 推薦系統02--協同過濾

    摘要:如果做推薦系統不知道基于物品的協同過濾,那等同于做程序員不懂得冒泡排序。基于物品的八卦基于物品的協同過濾算法誕生于年,是由亞馬遜首先提出的,并在年由其發明者發表了相應的論文。 不管你有沒有剁過手,你對看了這個商品的還看了這樣的推薦形式一定不陌生。無論是貓還是狗,或者是其他電商網站,這樣的推薦產品可以說是推薦系統的標配了。 類似的還有,如點評標記類網站的喜歡了這部電影的還喜歡了,社交媒...

    jaysun 評論0 收藏0
  • 基于用戶的協同過濾算法

    摘要:最近寫搜索引擎文章寫多了,來一篇之前寫的老文,給那些對推薦算法感興趣想入門的人吧,最近也在做推薦廣告系統,又翻出來看了看。 最近寫搜索引擎文章寫多了,來一篇之前寫的老文,給那些對推薦算法感興趣想入門的人吧,最近也在做推薦廣告系統,又翻出來看了看。 什么是推薦算法 推薦算法最早在1992年就提出來了,但是火起來實際上是最近這些年的事情,因為互聯網的爆發,有了更大的數據量可以供我們使用,推...

    goji 評論0 收藏0

發表評論

0條評論

Jeffrrey

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<