




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于關(guān)鍵詞提取的 TFIDF 和 TextRank 方法的對(duì)比研究題目:開發(fā)一個(gè)程序,在該程序中,允許輸入一段文本(以界面或者文件輸入方式均可), 該程序自動(dòng)抽取出包含的關(guān)鍵詞,并按照關(guān)鍵詞的權(quán)重由高到低排序后輸出。完成日期: 2016.06.05一、需求分析以文本的形式讀入數(shù)據(jù),將每個(gè)單詞抽象成一棵樹,將單詞與單詞之間的關(guān) 系抽象為圖。TFIDF算法部分以EXCEL形式將所有數(shù)據(jù)輸出,TextRank算法部分直接以窗 口形式輸出排名前十位的數(shù)據(jù)。本程序的目的是在提取文本關(guān)鍵詞的同時(shí),比較TFDIF和TextRank算法的準(zhǔn)確性和性能方面的差異。測(cè)試數(shù)據(jù)(附后)。二、概要設(shè)計(jì)抽象數(shù)據(jù)類型映射樹
2、定義如下:ADT Map 數(shù)據(jù)對(duì)象 ID: ID 是類型為 char 的元素集合,即為一個(gè)單詞中的單個(gè)字 符,稱為字符集。數(shù)據(jù)對(duì)象 val :val 是類型為 double 或 int 的元素集合,為每個(gè)單詞對(duì)應(yīng) 的 TF 值或 IDF 值,稱為頻率集。數(shù)據(jù)對(duì)象 is_end :is_end 是類型為 bool 的元素集合,判斷當(dāng)前子結(jié)點(diǎn)是 否為單詞末尾數(shù)據(jù)關(guān)系 R :R= IDVal IDVal= word num| word ID , num val,表示從 word 至U num 之間的一一映射 運(yùn)算符重載:下標(biāo)運(yùn)算符 :運(yùn)算對(duì)象為 string 值,返回對(duì)應(yīng) string 值的子樹所代
3、表的 val 值。算術(shù)運(yùn)算符 = :運(yùn)算對(duì)象為 double 或 int 值,等式左值的 val 值 替換為等式右值,并返回當(dāng)前子樹。算術(shù)運(yùn)算符 +-*/ :運(yùn)算對(duì)象為 double 或 int 值,對(duì)其 val 值進(jìn)行運(yùn)算,并返回當(dāng)前子樹。相等運(yùn)算符 = 和!= : 運(yùn)算對(duì)象為 val 值,判斷其 val 值是否相等, 返回對(duì)應(yīng)的 bool 值?;静僮鳎篒nitMap(&T);操作結(jié)果:構(gòu)造空樹。DestroyMap(&T);初始條件:樹 T 存在。操作結(jié)果:構(gòu)造空樹。CreateMap(&T, word);初始條件:樹 T 存在且 word 為 string 值。 操作結(jié)果:按照 wor
4、d 的字符順序自上而下遍歷,如果有字 符結(jié)點(diǎn)未創(chuàng)造,則構(gòu)造新子結(jié)點(diǎn),直到字符結(jié)束。MapEmpty(T);初始條件:樹 T 存在。操作結(jié)果:若T為空樹,則返回True,否則False。MapDepth(&T);初始條件:樹T存在。操作結(jié)果:返回樹的深度。Root(&T);初始條件:樹T存在。操作結(jié)果:返回 T 的根。Value(&T, value);初始條件:樹T存在,value為T中某個(gè)結(jié)點(diǎn)的值。 操作結(jié)果:返回 value 的值。Assign(&T, word, value);初始條件:樹T存在,且word結(jié)點(diǎn)也存在。操作結(jié)果:結(jié)點(diǎn) word 的 value 值替換為當(dāng)前 value 。P
5、arent(&T, word);初始條件:樹T存在,且word結(jié)點(diǎn)也存在。操作結(jié)果:返回 word 結(jié)點(diǎn)的雙親。InsertWord (&T, word);初始條件:樹 T 存在。操作結(jié)果:往樹加入 word 值,并將其 value 值默認(rèn)初始化DeleteChild(&T, word);初始條件:樹 T 存在,且 word 結(jié)點(diǎn)也存在。操作結(jié)果:將 word 對(duì)應(yīng)子節(jié)點(diǎn)的 is_end 值改為 false 。TraverseMap(&T, visit() );初始條件:樹 T 存在, visit 是對(duì)結(jié)點(diǎn)操作的應(yīng)用函數(shù)。操作結(jié)果:按某種次序?qū)?T 的每個(gè)結(jié)點(diǎn)調(diào)用 visit 一次且至 多一次
6、。一旦 visit 失敗,則操作失敗。ADT Map抽象數(shù)據(jù)類型圖定義如下ADT Graph數(shù)據(jù)對(duì)象 n:n 是具有相同特征的數(shù)據(jù)元素集合,稱為頂點(diǎn)集。 數(shù)據(jù)關(guān)系:DR=|v,w n且表示從v指向w的 弧基本操作:CreateGraph(&G, V, VR) ;初始條件:V是圖的頂點(diǎn)集,VR是圖中弧的集合操作結(jié)果:按V和VR的定義構(gòu)造圖GDestroyGraph(&G);初始條件:圖G存在操作結(jié)果:銷毀圖 GLocateVex (G,u);初始條件:圖G已存在,u和G中頂點(diǎn)有相同特征 操作結(jié)果:若G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置, 否則返回其它信息GetVex(G, v);初始條件:圖G
7、存在,v是G中某個(gè)頂點(diǎn) 操作結(jié)果:返回 v 的值PutVex(&G, v, value);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn)操作結(jié)果:對(duì) v 賦值 valueFirstAdjVex(G, v);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn)操作結(jié)果:返回v的第一個(gè)鄰接頂點(diǎn)。若頂點(diǎn)在 G中沒有鄰 接頂點(diǎn),則返回“空”NextAdjVex(G, v, w);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn),w是v的鄰接頂點(diǎn)操作結(jié)果:返回v的(相對(duì)于w的)下一個(gè)鄰接頂點(diǎn)。若 w是 v 的最后一個(gè)鄰接點(diǎn),則返回 空”InsertVex (&G,v);初始條件:圖G存在,v和G中頂點(diǎn)有相同特征 操作結(jié)果:在圖中增添新頂點(diǎn)
8、vDeleteVex (&G,v);初始條件:圖G存在,v是G中某個(gè)頂點(diǎn) 操作結(jié)果:刪除G中頂點(diǎn)v及其相關(guān)的弧InsertArc(&G, v, w)初始條件:圖G存在,v和w是G中兩個(gè)頂點(diǎn) 操作結(jié)果:在圖G中增添弧v,w,若G是無(wú)向的,則還應(yīng) 增添對(duì)稱弧 w,vDeleteArc(&G, v, w)初始條件:圖G存在,v和w是G中兩個(gè)頂點(diǎn)操作結(jié)果:刪除G中的弧vv,w,若G是無(wú)向的,則還應(yīng)刪 除對(duì)稱弧DFSTraverse(G, v, visit()初始條件:圖G存在,v是G中某個(gè)頂點(diǎn),visit是對(duì)頂點(diǎn) 的應(yīng)用函數(shù)操作結(jié)果:從頂點(diǎn)v起深度優(yōu)先遍歷圖 G,并對(duì)每個(gè)頂點(diǎn)調(diào) 用函數(shù) visit()
9、 一次且至多一次。一旦 visit() 失敗,則操作失敗BFSTraverse(G, v, visit()初始條件:圖G存在,v是G中某個(gè)頂點(diǎn),visit是對(duì)頂點(diǎn) 的應(yīng)用函數(shù)操作結(jié)果:從頂點(diǎn)v起廣度優(yōu)先遍歷圖 G,并對(duì)每個(gè)頂點(diǎn)調(diào) 用函數(shù) visit() 一次且至多一次。一旦visit() 失敗,則操作失敗ADT Graph本程序包含兩大模塊, TF-IDF 算法部分和 TextRank 算法部分主函數(shù)部分void mai n () TF-IDF 算法;TextRank 算法;TF-IDF 算法構(gòu)建語(yǔ)料庫(kù)(語(yǔ)料庫(kù)的原料來(lái)源于超過(guò)八億詞的文本)導(dǎo)入語(yǔ)料庫(kù)讀入文本分析所讀入的單詞合并語(yǔ)料庫(kù)輸出到EX
10、CELTextRank 算法讀入數(shù)據(jù)分析所讀入的單詞構(gòu)造矩陣套用公式結(jié)果排序輸出前十名各模塊之間的調(diào)用關(guān)系如下:導(dǎo)入語(yǔ)料庫(kù)分析所讀入的單詞讀入文本f、合并語(yǔ)料庫(kù)構(gòu)造矩陣7套用公式fX輸出到EXCEL結(jié)果排序輸出前十名三、詳細(xì)設(shè)計(jì)設(shè)計(jì)思路TF-IDF和TextRank關(guān)鍵詞提取算法,進(jìn)本程序以實(shí)現(xiàn)關(guān)鍵詞抽取為目的,選取了 行兩者的效率和準(zhǔn)確性的比較研究。TFIDF 算法. TF-IDF算法簡(jiǎn)介TF-IDF是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一個(gè)詞組 或短語(yǔ)的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時(shí)會(huì)隨著它在語(yǔ)料庫(kù)中出現(xiàn)的頻率成反比下降。在一組文
11、檔中,刻畫某一文檔特征的特征項(xiàng)可以根 據(jù)其在這組文檔中出現(xiàn)的頻率賦予相應(yīng)的權(quán)重,只有在少數(shù)文檔中出現(xiàn)的較特殊的詞,權(quán) 重要比在多篇文檔中出現(xiàn)的詞的權(quán)重要高。TF-IDF加權(quán)的各種形式常被搜索引擎應(yīng)用,作為文件與用戶查詢之間相關(guān)程度的度量或評(píng)級(jí)。. TF-IDF算法原理TF-IDF實(shí)際上是 TF和IDF的組合。TF即詞頻(Term Frequency),IDF即逆向文檔)。頻率(In verse Docume nt Freque ncyTF (詞頻)就是某個(gè)詞在文章中出現(xiàn)的次數(shù),此文章為需要分析的文本。為了統(tǒng)一標(biāo)準(zhǔn),有如下兩種計(jì)算方法TF (詞頻)某個(gè)詞在文章中出現(xiàn)的次數(shù)該篇文章的總次數(shù)TF詞頻
12、_某個(gè)詞在文章中出現(xiàn)的次數(shù)_ 該篇文章出現(xiàn)最多的單詞的次數(shù)IDF (逆向文檔頻率)為該詞的常見程度,需要構(gòu)建一個(gè)語(yǔ)料庫(kù)來(lái)模擬語(yǔ)言的使用環(huán)境。IDF逆向文檔頻率語(yǔ)料庫(kù)的文檔總數(shù)包含該詞的文檔總數(shù)+ 1【2】如果一個(gè)詞越常見,那么其分母就越大,IDF值就越小。? ?=?司頻 X?逆文檔頻率)之后,將每個(gè)單詞的 TF-IDF值按從大到小降序排列,排在最前面的幾個(gè)詞即為關(guān)鍵!詞。. TF-IDF算法實(shí)現(xiàn). 構(gòu)建映射Map類C+STL函數(shù)庫(kù)中已經(jīng)包含了 map的庫(kù)函數(shù),但為了使用起來(lái)更加方便、更便于個(gè)性化定制操作,于是使用自己定制的Map類模板。這個(gè)類函數(shù)主要是構(gòu)建單詞的stri ng 值與其TF、ID
13、F值的一一對(duì)應(yīng)關(guān)系,方便直接用string 值下標(biāo)訪問(wèn)其int值或double值,簡(jiǎn)化寫代碼的工作量。同時(shí)模板類中主要采取樹形結(jié)構(gòu),建立一棵查找樹,利用vector的空間動(dòng)態(tài)分配的靈活性,從stri ng 的第一個(gè)字母開始一個(gè)一個(gè)往下找。每個(gè)Map類代表*一個(gè)字母,從根部開始向下遍歷,利用bool值判斷該處是否為一個(gè)單詞結(jié)尾。代碼如下:映射函數(shù)Map類Type為存儲(chǔ)的 TF、IDF、TF-IDF值,如 int、double 等 旨在通過(guò)string類型下標(biāo)訪問(wèn)其Type值template class Mappublic :/Type 值,類型為 int、doubleType val = NUL
14、L/*下標(biāo)運(yùn)算符重載中值為string類型如果該string值已存在,則返回對(duì)應(yīng)val如果不存在則新建一個(gè),返回初始值*/Type&operator (string item)Map&temp = find( item );/引用類函數(shù)find()查找到的值if (temp != NULL/找到,則返回對(duì)應(yīng)val一個(gè)并返回新的值create( item); return find( item ).val;/*算術(shù)運(yùn)算符=重載左值為找到的Map.val引用右值為對(duì)應(yīng)的val值返回當(dāng)前Map勺引用*Map&operator = (Typeitem ):*類函數(shù)列表find為查找函數(shù),找到則返回其值
15、,沒找到則新建一個(gè)返回初值create為創(chuàng)建新值得函數(shù)*/Mapfi nd( stri ng word);void create( stringword);private :/是否為單詞結(jié)尾/代表當(dāng)前類的字母/子節(jié)點(diǎn)集合bool is_e nd = false char ID;vector childs;/*find查找函數(shù)如果該string值已存在,則返回對(duì)應(yīng)值如果不存在則新建一個(gè),返回初始值*/template Map Map:fi nd(stri ng word)for ( auto &r : childs)/遍歷類函數(shù)的所有子節(jié)點(diǎn)直到找到對(duì)應(yīng)項(xiàng)if (r-ID = word0 & r-
16、is_end)/如果相等且為單詞末尾return r-find(word.substr(1, word.size() - 1);/ 遞歸調(diào)用 find函數(shù),一次減少一個(gè)字符return NULL/返回空類|/*create創(chuàng)建函數(shù)遞歸創(chuàng)建字母樹*template vclass Typevoid Map:create( string word) return/如果找到,則減少第一個(gè)字符,繼續(xù)遞歸向下遍歷r-creat( word.substr(1, word.size() - 1);return ;Map*temp = n ewMap/沒找到,則新建一個(gè)Maptemp-ID = word 0;/
17、將其所代表的字符ID設(shè)為當(dāng)前word的第一個(gè)字符childs.push_back(temp);/子節(jié)點(diǎn)中增加這一 Maptemp-creat( word.substr(1, word.size() - 1);/ 繼續(xù)遞歸創(chuàng)建后續(xù)字符return ;構(gòu)建語(yǔ)料庫(kù)為了使語(yǔ)料庫(kù)更符合本程序的應(yīng)用場(chǎng)景,語(yǔ)料庫(kù)采用自己構(gòu)建的語(yǔ)料庫(kù)。語(yǔ)料庫(kù)素材來(lái)源于小說(shuō)新聞等,總詞數(shù)超過(guò)8億詞。因?yàn)槊科臋n有幾十萬(wàn)字,為了使詞語(yǔ)的ITF更具普遍性,假設(shè)每1000詞為一篇文章。然后每次將文章先存入一個(gè)臨時(shí)語(yǔ)料庫(kù)中,進(jìn)行分析處理后,將處理后的詞加入臨時(shí)語(yǔ)料庫(kù)。之后再將臨時(shí)語(yǔ)料庫(kù)合并入總的語(yǔ)料庫(kù),流程圖如下:定義語(yǔ)料庫(kù) 定義臨時(shí)
18、語(yǔ)料庫(kù) 循環(huán)讀入文件corpus r.first +;/合并語(yǔ)料庫(kù)中對(duì)應(yīng)數(shù)值/建立語(yǔ)料庫(kù)/語(yǔ)料庫(kù),由字/文章總數(shù),作為計(jì)算頻mapstring , double corpus; 母string到岀現(xiàn)頻率double的映射 longlongint times = 0;率的基數(shù)ofstreamoutput( corpus.csv);/輸岀到excel表格中存儲(chǔ)吠*導(dǎo)入制作好的語(yǔ)料庫(kù)存在一一映射corpus中*/void buildCorpus() |ifstream input( corpus.csv );/ 打開文件stri ng item;/定義臨時(shí)存儲(chǔ)變量string和doubledoubl
19、e val;while (!input.eof()庫(kù)映射中in put item val; corpus item = val; 丁/讀入文件,存儲(chǔ)到語(yǔ)料/*分析處理讀入的string短語(yǔ)先刪去字符前的不必要符號(hào)如數(shù)字、標(biāo)點(diǎn)(等等將剩下的大寫字符轉(zhuǎn)化為小寫|_保留字符中的標(biāo)點(diǎn),女口 Mr.Bill等再刪除字符后的不必要標(biāo)點(diǎn),如.,:等等返回修改后的字符*/string analysis(string item )string temp =;bool flag = false ;個(gè)字母時(shí),flag變?yōu)閠rue,否則為false,濾過(guò)不必要的前綴for ( auto &r : item )/遍歷s
20、tring中每一個(gè)字符if (r =,| r =;)continue ;/定義空字符/flag標(biāo)記,當(dāng)碰到第/濾過(guò),;等符號(hào)if (r = a )/ 碰到字母標(biāo)記 trueflag = true ;if (r = A )/ 轉(zhuǎn)化大小寫flag = true ;r += 32;if (flag)/如果已碰到字母,則在緩存string中加入該字符temp += r;if (temp.size() = 0)/如果是空字符,直接returnreturn temp;for ( auto i = temp.rbegin(); i= temp.rend(); i+)/從尾開始遍歷string ,刪去stri
21、ng中不必要的后綴 1if ( *i = a)/若碰到字母,則跳岀循break;temp.pop_back();/ 刪去后綴return temp;/返回處理過(guò)的字符str ing/*遍歷臨時(shí)語(yǔ)料庫(kù)的數(shù)值將其合并到總的語(yǔ)料庫(kù)*/void print(mapstring , double &frequency )for ( auto &r : frequency )/ 遍歷臨時(shí)語(yǔ)料庫(kù)if (corpus.find(r.first)= corpus.end()/ 第一次岀現(xiàn)則將在總語(yǔ)料庫(kù)中新建一個(gè),并將其初始化corpus r.first = 0.0;/*創(chuàng)建語(yǔ)料庫(kù)通過(guò)文件讀入文章由于部分文章為小
22、說(shuō),有幾十萬(wàn)字,于是統(tǒng)一按每1000字為一篇文章語(yǔ)料庫(kù)素材中所有文章的總次數(shù)大概有8億詞將該文章中出現(xiàn)的單詞存入臨時(shí)語(yǔ)料庫(kù)中每一千字更新總語(yǔ)料庫(kù)corpus,清空臨時(shí)語(yǔ)料庫(kù)frequency |最后計(jì)算每個(gè)單詞的IDF值 */void readDictEn()int words = 0;/記錄當(dāng)前已讀入的 word詞數(shù),每一千字更新一次maestri ng , double freque ncy;/ 臨時(shí)語(yǔ)料庫(kù),存放string單詞到double頻率的一一映射Ion glo ngintent = 0;臨時(shí)變量,記錄臨時(shí)語(yǔ)料庫(kù)被清零多少次for ( int i = 1; i = 633; i+)
23、/ 遍歷語(yǔ)料庫(kù)素材 TXT文檔,共有633個(gè)TXT文檔,每篇文檔平均12萬(wàn)詞/*每篇文檔的命名方式為EN(i),i為文檔編號(hào)先利用stringstream流創(chuàng)建文件名的字符串再用ifstream流打開對(duì)應(yīng)文件*/cout i : ;/輸岀當(dāng)前讀入文件狀態(tài)ostr in gstream out;/stri ngstream流,存儲(chǔ)文件名字符串/打開文件/臨時(shí)存儲(chǔ)變量/讀入文件/將讀入字符串處理成所out EN ( i item;item = an alysis(item);需要求if (item.empty()/空字符串則略過(guò)continue ;if (frequency.find(item)=
24、 frequency.end()/ 女口果是新的字符串,則在語(yǔ)料庫(kù)里新建一個(gè)并初始化frequency item = 0.0;frequency item +; words+;if (words = 1000)篇文章時(shí),合并語(yǔ)料庫(kù)并清空臨時(shí)語(yǔ)料庫(kù)pr in t(freque ncy); freque ncy.clear(); cn t+;words = 0;/增加岀現(xiàn)次數(shù)/讀入一千詞時(shí),即讀入for ( auto &r : corpus)r.sec ond /= (ent + 1);r.sec ond = abs(log(r.sec on d); output r.first r.second
25、 freque ncy;/打開文件/單詞總數(shù),包括相同的單詞/這篇文章的語(yǔ)料庫(kù)while (!file.eof()/循環(huán)讀入文章中所有單過(guò)程類似/以下過(guò)程與構(gòu)建語(yǔ)料庫(kù)file item; item = an alysis(item);if (item.empty()continue ;if (idle.find(item)!= idle.end()continue ;if (frequency.find(item)= frequency.end()frequency item = 0.0;frequency item +; words+;/輸岀數(shù)據(jù)到Exceloutput.open( data
26、.csv);for ( auto &r : frequency)r.sec ond /= words;r.second *= corpus r.first ;output r.first, r.second PageRank的基本思想主要是:一個(gè)網(wǎng)頁(yè)的重要程度取決于鏈接到它的網(wǎng)頁(yè)的數(shù)量以及這些網(wǎng)頁(yè)的重要程度。比如有n個(gè)網(wǎng)頁(yè),對(duì)于其中一個(gè)網(wǎng)頁(yè)??,所有鏈接到??的頁(yè)面集合記為In ?所有?鏈接到的頁(yè)面集 合記為Out ?,則其重要程度為:1Importanee ?=Importanee ?Out ?3n ?此處的求和號(hào)可以通過(guò)矩陣計(jì)算來(lái)模擬實(shí)現(xiàn),并通過(guò)不斷地迭代,重要性的值會(huì)不斷 收斂為一常值,
27、最后可以求出最后的網(wǎng)頁(yè)重要性。TextRank就是仿造這算法設(shè)計(jì)?!?】算法思路TextRank總體思路與PageRank類似。因?yàn)槲谋局胁淮嬖诖翱谂c鏈接,所以要模擬造 出窗口。在這里不妨設(shè) k個(gè)詞為一個(gè)窗口,其中每個(gè)單詞為一個(gè)鏈接,當(dāng)一個(gè)窗口中的單 詞與另一個(gè)窗口中的單詞一樣時(shí),即視為兩個(gè)窗口有鏈接。當(dāng)然也可以脫離PageRa nk的思想來(lái)解釋這一算法。對(duì)于一個(gè)句子,其中的一個(gè)單詞 與這個(gè)句子的剩余單詞都有關(guān)聯(lián)性。同時(shí),這個(gè)句子中的每一個(gè)單詞又與另外其他句子中 相同的單詞也有關(guān)聯(lián)性。也就是說(shuō),一個(gè)單詞的重要性不僅僅取決于單詞的重要性,還與 該句子中其他單詞的重要性相關(guān)。但為了使構(gòu)造出來(lái)的矩陣
28、運(yùn)算更為簡(jiǎn)便,在此將單詞句子假定為長(zhǎng)度為k,每個(gè)單詞為k的第一個(gè)單詞。這樣,每k個(gè)單詞就構(gòu)成一個(gè)句子,句子與句子中任意兩個(gè)單詞之間就構(gòu)成一條邊,最后形成的圖是一個(gè)無(wú)向圖。為了加快運(yùn)算速度,圖采用鄰接矩陣的方式 存儲(chǔ)。而且,經(jīng)過(guò)實(shí)際檢驗(yàn)可以發(fā)現(xiàn),該矩陣并不稀疏,所以直接轉(zhuǎn)化為二維數(shù)組。每次 計(jì)算時(shí)就不斷按照公式迭代。如此循環(huán)遍歷下去,這樣不僅得到的矩陣運(yùn)算方便計(jì)算,而 且對(duì)結(jié)果的準(zhǔn)確性也沒有影響。迭代公式如下:Importanee ?1=1- ?+?Importanee ?Out ?In Word其中d是阻尼系數(shù),一般設(shè)置為0.85。初始時(shí),可以先設(shè)重要性為1。容易看出,經(jīng)過(guò)多次迭代后,該重要性
29、的值會(huì)逐漸收斂為一常數(shù)。. TextRank算法實(shí)現(xiàn)TextRank所主要用到的主要是圖的鄰接矩陣存儲(chǔ),矩陣相乘合并等數(shù)據(jù)結(jié)構(gòu)算法。流 程圖如下:定義鄰接矩陣阻尼向量讀入文件正序遍歷去除前綴構(gòu)造結(jié)構(gòu)體將矩陣結(jié)果信息轉(zhuǎn)存到結(jié)構(gòu)體中對(duì)其進(jìn)行排序算法代碼如下:ifstream EnF ile; ofstream output; str in gstream tempFile;set idle;mapstring , int EnMatr打印前十個(gè)結(jié)果 int EnRank = 0;con sti nt k = 8;int key1000010000;作為關(guān)鍵詞抽取結(jié)果double d 510000;
30、double ans10000;/*讀入文件并去除停用詞仿造TF-IDF的方法,對(duì)讀入的詞進(jìn)行分析處理將文章中處理過(guò)的詞按照原來(lái)的順序存入stringstream流tempFile中將每個(gè)詞按照構(gòu)造語(yǔ)料庫(kù)的方法,存入語(yǔ)料庫(kù)中構(gòu)建單詞圖的鄰接矩陣*/void scan( string namifstream stop( Stop.txt);while (!stop.eof()stri ng temp;stop temp;idle.i nsert(temp);EnFile.open( nam; stri ng temp;while (!EnFile.eof()keyEnMatr temp EnMa
31、tr r +;keyEnMatr temp EnMatr r +;EnF ile temp; temp = an alysis(temp);if (idle.find(temp)!= idle.end()continue ;if (temp =)continue ;if (EnMatr.find(temp)= EnMatr.end()EnMatr temp = EnRank+; tempFile temp /*讀入文件并去除停用詞仿造TF-IDF的方法,對(duì)讀入的詞進(jìn)行分析處理將文章中處理過(guò)的詞按照原來(lái)的順序存入stringstream流tempFile中將每個(gè)詞按照構(gòu)造語(yǔ)料庫(kù)的方法,存入語(yǔ)料庫(kù)中構(gòu)建單詞圖的鄰接矩陣*/void build()stri ng bufferk;fc)r ( int i = 0; i bufferi;for ( int i = 0; !tempFile.eof(); i = (i + 1) % k)/ 將string 流中的數(shù)據(jù)讀入循環(huán)數(shù)組中/為節(jié)省空間,數(shù)組只開k項(xiàng),利用循環(huán)數(shù)組存儲(chǔ)更新stri ng temp = bufferi;for ( auto &r : buffer)/ 構(gòu)造鄰接矩陣if (r = temp)con ti nuetempFile
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化創(chuàng)意產(chǎn)品研發(fā)資金申請(qǐng)2025年政策扶持與產(chǎn)業(yè)升級(jí)策略報(bào)告
- 2025年新能源汽車廢舊電池回收處理技術(shù)及案例分析報(bào)告
- 2025年生物科技行業(yè)可持續(xù)發(fā)展目標(biāo)(SDGs)實(shí)踐與產(chǎn)業(yè)融合報(bào)告
- 煤炭清潔高效燃燒技術(shù)在煤炭洗選加工中的應(yīng)用與發(fā)展報(bào)告
- 醫(yī)療器械臨床試驗(yàn)質(zhì)量管理與規(guī)范化2025年發(fā)展趨勢(shì)研究報(bào)告
- 2025年建筑信息模型(BIM)在施工全過(guò)程精細(xì)化管理中的應(yīng)用策略報(bào)告
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)量子密鑰分發(fā)技術(shù)在智慧醫(yī)療領(lǐng)域的應(yīng)用與挑戰(zhàn)報(bào)告
- 2025年電商平臺(tái)內(nèi)容營(yíng)銷與種草經(jīng)濟(jì)產(chǎn)業(yè)鏈研究報(bào)告
- 深度解析:2025年工業(yè)互聯(lián)網(wǎng)平臺(tái)AR交互技術(shù)在制造領(lǐng)域的應(yīng)用創(chuàng)新報(bào)告
- 綠色環(huán)保產(chǎn)業(yè)資金申請(qǐng)政策變化與應(yīng)對(duì)策略報(bào)告2025
- 2023-2024學(xué)年海南省??谑兴哪昙?jí)(下)期末數(shù)學(xué)試卷
- 南通市如東縣醫(yī)療衛(wèi)生單位招聘事業(yè)編制工作人員筆試真題2024
- 歷史●甘肅卷丨2024年甘肅省普通高中學(xué)業(yè)水平等級(jí)性考試高考?xì)v史真題試卷及答案
- 糧油倉(cāng)儲(chǔ)管理員(高級(jí))職業(yè)技能鑒定參考試題(附答案)
- 2024北京朝陽(yáng)區(qū)四年級(jí)(下)期末語(yǔ)文試題及答案
- 2025年中考語(yǔ)文??甲魑难侯}《10個(gè)主題+15篇范文》
- 2025年新音樂節(jié)明星藝人歌手演出場(chǎng)費(fèi)報(bào)價(jià)單
- 主要施工機(jī)械設(shè)備、勞動(dòng)力、設(shè)備材料投入計(jì)劃及其保證措施
- 云南省昆明市官渡區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期期末考試數(shù)學(xué)試題
- 手術(shù)器械臺(tái)的準(zhǔn)備及注意事項(xiàng)
- 清華大學(xué)學(xué)報(bào)投稿模板
評(píng)論
0/150
提交評(píng)論