計(jì)算tf/idf
超過10年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jī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ò)營銷和我們一樣獲得訂單和生意!
在使用fileStr獲取新聞的內(nèi)容和長度后,我們就可以計(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該方法傳遞的參數(shù)$seg就是前面提到若的使用segment分詞方法返回的結(jié)果。這里使用的是它計(jì)算出來的['word']和['times']。
第一個(gè)for雙重循環(huán):第一個(gè)for循環(huán)得到每一篇文檔所有詞的信息,第二個(gè)for循環(huán)取出這篇文檔每個(gè)詞的信息,比如$seg[$i][$j]['times']是一個(gè)詞出現(xiàn)的次數(shù),再除以這篇文檔的長度$str[$i]['len']就可以得到詞頻。
第二個(gè)for雙重循環(huán):大概意思就是得到該文檔集的文檔頻率df后,使用公式idf=log(N/df),N表示文檔集總數(shù),df就是所計(jì)算詞的文檔頻率,最后得出idf(逆文檔頻率)。
新創(chuàng)建一個(gè)用來測(cè)試的php文件test.php,代碼如下
在瀏覽器中運(yùn)行(這個(gè)過程大概花費(fèi)20s),查看源代碼:
計(jì)算特征向量
萬事俱備,只欠東風(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該方法把對(duì)應(yīng)文檔的特征向量計(jì)算出來后,把他們保存在目錄名為vsm的目錄中,文件名和它們的新聞文檔文件名相同。修改test.php:
即可運(yùn)行,在系統(tǒng)目錄的vsm下可以看到多出了10個(gè)txt文件,里邊的內(nèi)容保存的分別是對(duì)應(yīng)文檔的特征向量。
附件:http://down.51cto.com/data/2364246
文章名稱:盲反饋檢索系統(tǒng)實(shí)驗(yàn)記錄三
網(wǎng)站鏈接:http://weahome.cn/article/gccgee.html