亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

文章相似度計(jì)算

Jeffrrey / 2847人閱讀

摘要:文章內(nèi)容相似度計(jì)算幾種方式及優(yōu)缺點(diǎn)內(nèi)置方法是內(nèi)置的字符串相似度對比函數(shù),是使用方式最便捷的一種但是因?yàn)樗臅r(shí)間復(fù)雜度是,處理時(shí)間會(huì)隨著內(nèi)容長度增加若比較字以上的文章,或者比較文章的量級比較大不建議使用只是單篇文章對單篇文章可以使用。

文章內(nèi)容相似度計(jì)算幾種方式及優(yōu)缺點(diǎn) PHP 內(nèi)置方法 similar_text

similar_text 是PHP內(nèi)置的字符串相似度對比函數(shù),是使用方式最便捷的一種,但是因?yàn)樗臅r(shí)間復(fù)雜度是 O(N**3),處理時(shí)間會(huì)隨著內(nèi)容長度增加,若比較5000字以上的文章,或者比較文章的量級比較大不建議使用,只是單篇文章對單篇文章可以使用。

通過分詞進(jìn)行余弦相似度對比

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

主要計(jì)算代碼:

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

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

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

    /**
     * [分詞后的數(shù)組二]
     *
     * @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 );
    }

    /**
     * [外部調(diào)用]
     *
     * @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 分詞只是一個(gè)簡單的例子,你可以使用任意的分詞服務(wù)
     */
    private function segment( $text )
    {
        $outText = array();
        $xs = new XS("demo");  // 必須先創(chuàng)建一個(gè) xs 實(shí)例,否則會(huì)拋出異常
        $tokenizer = new XSTokenizerScws;   // 直接創(chuàng)建實(shí)例
        $tokenizer->setIgnore();
        //處理
        $outText = $tokenizer->setMulti(1)->getResult($text);
        $outText = array_column( $outText, "word");
        $res = $xs->getScwsServer();
        $res->close();
        return $outText;
    }
}
    
SimHash

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

    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           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/29724.html

相關(guān)文章

  • 基于Tags的簡單內(nèi)容推薦的實(shí)現(xiàn)

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

    CrazyCodes 評論0 收藏0
  • 基于Tags的簡單內(nèi)容推薦的實(shí)現(xiàn)

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

    邱勇 評論0 收藏0
  • 推薦系統(tǒng)02--協(xié)同過濾

    摘要:如果做推薦系統(tǒng)不知道基于物品的協(xié)同過濾,那等同于做程序員不懂得冒泡排序?;谖锲返陌素曰谖锲返膮f(xié)同過濾算法誕生于年,是由亞馬遜首先提出的,并在年由其發(fā)明者發(fā)表了相應(yīng)的論文。 不管你有沒有剁過手,你對看了這個(gè)商品的還看了這樣的推薦形式一定不陌生。無論是貓還是狗,或者是其他電商網(wǎng)站,這樣的推薦產(chǎn)品可以說是推薦系統(tǒng)的標(biāo)配了。 類似的還有,如點(diǎn)評標(biāo)記類網(wǎng)站的喜歡了這部電影的還喜歡了,社交媒...

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

    摘要:最近寫搜索引擎文章寫多了,來一篇之前寫的老文,給那些對推薦算法感興趣想入門的人吧,最近也在做推薦廣告系統(tǒng),又翻出來看了看。 最近寫搜索引擎文章寫多了,來一篇之前寫的老文,給那些對推薦算法感興趣想入門的人吧,最近也在做推薦廣告系統(tǒng),又翻出來看了看。 什么是推薦算法 推薦算法最早在1992年就提出來了,但是火起來實(shí)際上是最近這些年的事情,因?yàn)榛ヂ?lián)網(wǎng)的爆發(fā),有了更大的數(shù)據(jù)量可以供我們使用,推...

    goji 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<