欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

盲反饋檢索系統(tǒng)實(shí)驗(yàn)記錄三

計(jì)算tf/idf

超過(guò)10年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站制作、成都網(wǎng)站制作,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序定制開發(fā),微信開發(fā),重慶APP軟件開發(fā),同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷和我們一樣獲得訂單和生意!

在使用fileStr獲取新聞的內(nèi)容和長(zhǎng)度后,我們就可以計(jì)算他們的tf和idf:

//計(jì)算tf\idf
static public function tf_df($seg){
    $str=self::fileStr();
    $file_dir=self::fileDir(TEXT_PATH);
    $df=array();
    for($i=0;$i<count($seg);$i++){
        for($j=0;$j<count($seg[$i]);$j++){ 
        $seg[$i][$j]['tf']=$seg[$i][$j]['times']/$str[$i]['len'];   //詞頻tf
        array_push($df,$seg[$i][$j]['word']);   //所有詞合并,df
        }
    }
    $df=array_count_values($df);    //文檔頻率df
    for($i=0;$i<count($seg);$i++){
        for($j=0;$j<count($seg[$i]);$j++){
            $seg[$i][$j]['df']=$df[($seg[$i][$j]['word'])]; //給每個(gè)詞賦予df
            $seg[$i][$j]['idf']=log(count($file_dir)/$seg[$i][$j]['df']);   //idf
        }
    } 
    return $seg;
}

該方法傳遞的參數(shù)$seg就是前面提到若的使用segment分詞方法返回的結(jié)果。這里使用的是它計(jì)算出來(lái)的['word']和['times']。

第一個(gè)for雙重循環(huán):第一個(gè)for循環(huán)得到每一篇文檔所有詞的信息,第二個(gè)for循環(huán)取出這篇文檔每個(gè)詞的信息,比如$seg[$i][$j]['times']是一個(gè)詞出現(xiàn)的次數(shù),再除以這篇文檔的長(zhǎng)度$str[$i]['len']就可以得到詞頻。

第二個(gè)for雙重循環(huán):大概意思就是得到該文檔集的文檔頻率df后,使用公式idf=log(N/df),N表示文檔集總數(shù),df就是所計(jì)算詞的文檔頻率,最后得出idf(逆文檔頻率)。

新創(chuàng)建一個(gè)用來(lái)測(cè)試的php文件test.php,代碼如下

<?php
    require_once 'init.inc.php';
    $str=Tool::fileStr();
    $top=Tool::segment($str);
    $seg=Tool::tf_df($top);
    print_r($seg);
?>

在瀏覽器中運(yùn)行(這個(gè)過(guò)程大概花費(fèi)20s),查看源代碼:

盲反饋檢索系統(tǒng)實(shí)驗(yàn)記錄三

盲反饋檢索系統(tǒng)實(shí)驗(yàn)記錄三

計(jì)算特征向量

萬(wàn)事俱備,只欠東風(fēng)。到這里,我們已經(jīng)得到了所有詞項(xiàng)的tf和idf,他們的權(quán)重=tf*idf.在這里我們又會(huì)使用到之前已經(jīng)創(chuàng)建好的詞表(保存在dic.txt),詞表中的每一個(gè)詞代表空間中的一個(gè)維度,dic.txt中有1000多個(gè)詞,因而空間中就有1000多維。我們把每篇文檔的詞項(xiàng)都映射到這1000多個(gè)維度里,每個(gè)維度的值表示該詞項(xiàng)的權(quán)重,若該篇文檔不存在詞典中出現(xiàn)的詞,則對(duì)應(yīng)的維度值設(shè)為0.(這里利用的是向量空間模型的知識(shí))。

計(jì)算特征向量的代碼封裝在方法vsm中:

//特征向量,并寫入文件(tf/idf以及存在seg中)
static public function vsm($seg){
    $file_dir=self::fileDir(TEXT_PATH);
    $dic_str=file_get_contents('dic.txt');
    $dic_arr=explode(',',$dic_str);
                                                                                                       
    $vsm_arr=array();   //向量空間
    for($i=0;$i<count($dic_arr);$i++){
        $vsm_arr[$dic_arr[$i]]=0;   //初始化為0
    }
                                                                                                       
    for($i=0;$i<count($seg);$i++){
        for($j=0;$j<count($seg[$i]);$j++){
            if(in_array($seg[$i][$j]['word'],$dic_arr)){
                $vsm_arr[($seg[$i][$j]['word'])]=$seg[$i][$j]['tf']*$seg[$i][$j]['idf'];
            }
        }
        //將vsm寫入文件
        $vsm_str=implode(',',$vsm_arr);
        $fp=fopen(ROOT_PATH.'/vsm/'.$file_dir[$i],'w');
        fwrite($fp,$vsm_str);
        fclose($fp);
    }
}

該方法把對(duì)應(yīng)文檔的特征向量計(jì)算出來(lái)后,把他們保存在目錄名為vsm的目錄中,文件名和它們的新聞文檔文件名相同。修改test.php:

<?php
    require_once 'init.inc.php';
    $str=Tool::fileStr();   //取出文檔集內(nèi)容
    $top=Tool::segment($str);   //分詞
    Tool::dic($top);    //建立詞典
    $seg=Tool::tf_df($top); //計(jì)算tf/idf
    Tool::vsm($seg);    //計(jì)算特征向量
?>

即可運(yùn)行,在系統(tǒng)目錄的vsm下可以看到多出了10個(gè)txt文件,里邊的內(nèi)容保存的分別是對(duì)應(yīng)文檔的特征向量。

附件:http://down.51cto.com/data/2364246

文章標(biāo)題:盲反饋檢索系統(tǒng)實(shí)驗(yàn)記錄三
文章源于:http://www.chinadenli.net/article44/gccgee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣云服務(wù)器品牌網(wǎng)站設(shè)計(jì)網(wǎng)站排名小程序開發(fā)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作