91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

盲反饋檢索系統實驗記錄三

發布時間:2020-07-27 07:47:02 來源:網絡 閱讀:615 作者:jokance 欄目:web開發

計算tf/idf

在使用fileStr獲取新聞的內容和長度后,我們就可以計算他們的tf和idf:


//計算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'])]; //給每個詞賦予df
            $seg[$i][$j]['idf']=log(count($file_dir)/$seg[$i][$j]['df']);   //idf
        }
    } 
    return $seg;
}



該方法傳遞的參數$seg就是前面提到若的使用segment分詞方法返回的結果。這里使用的是它計算出來的['word']和['times']。

第一個for雙重循環:第一個for循環得到每一篇文檔所有詞的信息,第二個for循環取出這篇文檔每個詞的信息,比如$seg[$i][$j]['times']是一個詞出現的次數,再除以這篇文檔的長度$str[$i]['len']就可以得到詞頻。

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

新創建一個用來測試的php文件test.php,代碼如下

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


在瀏覽器中運行(這個過程大概花費20s),查看源代碼:

盲反饋檢索系統實驗記錄三

盲反饋檢索系統實驗記錄三


計算特征向量

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

計算特征向量的代碼封裝在方法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);
    }
}


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

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

即可運行,在系統目錄的vsm下可以看到多出了10個txt文件,里邊的內容保存的分別是對應文檔的特征向量。


附件:http://down.51cto.com/data/2364246
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太原市| 舞阳县| 宽甸| 宜春市| 邛崃市| 怀化市| 孟州市| 抚州市| 辽源市| 湟源县| 蕉岭县| 承德县| 百色市| 花莲市| 南京市| 萨迦县| 桦南县| 会东县| 延庆县| 江都市| 潢川县| 九寨沟县| 昌都县| 泰兴市| 舒兰市| 黑龙江省| 新田县| 庆云县| 武夷山市| 西吉县| 淳化县| 木里| 丽江市| 贵州省| 衡阳县| 泰宁县| 黑山县| 太保市| 普格县| 扎赉特旗| 九龙城区|