計(jì)算tf/idf
創(chuàng)新互聯(lián)專注于安吉網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供安吉營銷型網(wǎng)站建設(shè),安吉網(wǎng)站制作、安吉網(wǎng)頁設(shè)計(jì)、安吉網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造安吉網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供安吉網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。在使用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è)用來測試的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)的詞,則對應(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該方法把對應(yīng)文檔的特征向量計(jì)算出來后,把他們保存在目錄名為vsm的目錄中,文件名和它們的新聞文檔文件名相同。修改test.php:
即可運(yùn)行,在系統(tǒng)目錄的vsm下可以看到多出了10個(gè)txt文件,里邊的內(nèi)容保存的分別是對應(yīng)文檔的特征向量。
附件:http://down.51cto.com/data/2364246另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。