基于VSM模型的文本相似度的比較_第1頁
基于VSM模型的文本相似度的比較_第2頁
基于VSM模型的文本相似度的比較_第3頁
基于VSM模型的文本相似度的比較_第4頁
基于VSM模型的文本相似度的比較_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

..畢業(yè)設(shè)計〔論文題目:基于VSM模型的文本相似性的比較姓名XXXXX學(xué)號AAAAA所在學(xué)院BBBBB專業(yè)班級CCCCC指導(dǎo)教師DDDDD日期摘要在互聯(lián)網(wǎng)迅速發(fā)展的時代,網(wǎng)絡(luò)上的信息數(shù)量越來越多,種類也比較紛雜。雖然能在我們查詢相關(guān)信息是提供大量選擇,但是靠人工瀏覽的方式在浩瀚的信息庫中找到自己最需要最相關(guān)的信息,無疑給用戶帶來了麻煩,而且效率也十分低下。為了解決這一個問題,關(guān)于判斷文本相似度的技術(shù)應(yīng)運(yùn)而生,目前廣泛運(yùn)用于計算機(jī),電信等行業(yè)。本文著重闡述了計算文本相似度的過程中會遇到的難題,以及解決這些難題需要用到的相應(yīng)算法,最后利用VSM模型進(jìn)行簡單的設(shè)計與運(yùn)用,完成基于web的相似網(wǎng)頁檢測程序關(guān)鍵字:文本相似度;相似網(wǎng)頁檢測;VSM模型ABSTRACTWiththeInternetdevelopingrapidly,therearemoreandmoreInformationontheInternet,andthevarietiesofInformationisbecomingmorecomplex.AlthoughwehaveabiggerchancetousetheInformation,itisverydifficultandinefficientforuserstofindtheInformationwhichtheyaremostneededintheInformationDatabase.Tosolvethisproblem,therelevanttechnologyisinventedandnowwidelyusedinComputerandTelecomfield.Thispassageismainlydemonstratedtheproblemswemaymeetwhenwecalculatethetextsimilarityandtherelevantalgorithmsolvingtheproblemsabove.Intheend,weuseVSMmodeltodesignandcompletetheProject-SimilarWebdetectionBasedOnWebKeyWords:textsimilarity;similarwebdetection;VSMmodel目錄TOC\o"1-4"\h\z\u摘要-1-ABSTRACT-2-目錄-3-第一章緒論-6-1.1選題背景-6-1.2研究意義-6-1.3國內(nèi)外研究現(xiàn)狀-6-國外文本相似度研究狀況-6-國內(nèi)文本相似度研究情況-7-1.4開發(fā)語言-8-1.5本文的主要工作和論文結(jié)構(gòu)-8-主要工作-8-論文結(jié)構(gòu)-9-第二章系統(tǒng)原理介紹-10-2.1原理概述-10-2.2系統(tǒng)相關(guān)知識點簡介-10-向量空間模型-10-中文分詞技術(shù)-11-統(tǒng)計方法-12-算法-13-數(shù)據(jù)降維-16-相似度計算方法-16-2.3系統(tǒng)實現(xiàn)思想-17-第三章系統(tǒng)分析與設(shè)計-19-3.1系統(tǒng)需求分析-19-3.2系統(tǒng)功能概述-19-系統(tǒng)流程-19-功能模塊介紹-20-3.3系統(tǒng)性能要求-21-第四章系統(tǒng)實現(xiàn)-22-4.1系統(tǒng)運(yùn)行環(huán)境-22-4.2核心相關(guān)代碼分析-22-分詞類的介紹-22-核心代碼解析-23-第五章系統(tǒng)測試-29-5.1文章分詞測試-29-5.2獲取關(guān)鍵字測試-29-5.3抓取網(wǎng)頁內(nèi)容測試-30-5.4計算文本相似度-30-第六章總結(jié)與展望-31-6.1總結(jié)-31-6.2展望-31-致謝-33-參考文獻(xiàn)-34-附錄Ⅰ中文-35-附錄Ⅱ譯文-39-第一章緒論1.1選題背景隨著internet的迅猛發(fā)展,人們的生活越來越離不開網(wǎng)絡(luò)。www<worldwideweb>技術(shù)以其使用直觀、高效、簡單等優(yōu)點逐步成為Internet上最為重要的信息發(fā)布與交互方式,據(jù)美國因特網(wǎng)監(jiān)制公司Netcraft發(fā)布的數(shù)據(jù)表明,截止20XX2月底,全球互聯(lián)網(wǎng)網(wǎng)站數(shù)量超過1.6億,達(dá)162662053,較前一個月增加了450萬。網(wǎng)頁數(shù)量也達(dá)到百億級別。1.2研究意義由于WWW的迅猛發(fā)展,越來越多的信息可供用戶在網(wǎng)上查詢,但是信息膨脹和豐富的同時,加大了用戶尋求自己最需要信息的負(fù)擔(dān),特別是目前用戶對查詢信息提出了新的需求,除了需要高效率,高準(zhǔn)確性等要求外,用戶有時需要在互聯(lián)網(wǎng)上搜索與一篇文檔〔例如txt文件、word文檔等或一張圖片最相關(guān)、最相似的信息,這就給目前的技術(shù)提出了新的挑戰(zhàn),而與文本相似度有關(guān)的算法應(yīng)運(yùn)而生。同時,我國學(xué)術(shù)論文抄襲現(xiàn)象頻頻發(fā)生,非法復(fù)制等文檔侵權(quán)問題也比較嚴(yán)重。在如今的高校中,學(xué)生的論文抄襲、作業(yè)抄襲現(xiàn)象更是屢見不鮮。學(xué)生日益對自己的作業(yè)馬虎了事,隨便抄抄了事。尤其是對于有些枯燥的專業(yè)課程通常要進(jìn)行實驗并撰寫電子實驗報告,這就給不想動手動腦的同學(xué)以可乘之機(jī)。這種現(xiàn)象長此發(fā)展下去,不僅老師不能把握學(xué)生專業(yè)課程學(xué)習(xí)的情況,而且學(xué)生學(xué)習(xí)的積極性也會嚴(yán)重下降,抄襲的風(fēng)氣將影響到整個高校的學(xué)術(shù)氛圍。那么文本進(jìn)行相似度檢測應(yīng)用就成了眼下一個現(xiàn)實的需求。1.3國內(nèi)外研究現(xiàn)狀1.3.1國外文本相似度基本研究狀況目前,國內(nèi)外有很多學(xué)者在研究文本相似度計算問題并且已經(jīng)有很多文本相似度模型被提出并得到廣泛應(yīng)用,如字符串相似度,文檔結(jié)構(gòu)相似度以及統(tǒng)計相似度等模型。字符串相似度模型將文檔構(gòu)成的基本單位視為字符串,通過將一個字符串轉(zhuǎn)換為另一個字符串的替換、插入和刪除操作次數(shù)或最大匹配字符串來計算相似度,如Levenshtein距離和Likelt方法。Nirenberg等也提出了兩種串匹配的方法,即更規(guī)范的"切塊+匹配+重組"方法和整句級匹配的方法。這兩種方法所采用的相似度衡量機(jī)制都是詞組合法。該系統(tǒng)的相似度計算采用罰分制,兩個句子匹配所得到的總罰分值由句子中每個對應(yīng)單詞對的比較所得的罰分組合而成。文檔結(jié)構(gòu)相似度模型通過文檔結(jié)構(gòu)上的相似程度來計算文檔的相似度,如:Lambros等提出同時依據(jù)句子的表層結(jié)構(gòu)和內(nèi)容計算相似度的方法。在計算相似度時,系統(tǒng)使用了兩級動態(tài)規(guī)劃技術(shù),應(yīng)用動態(tài)規(guī)劃算法允許在兩個長度不同的句子之間計算語句相似度。統(tǒng)計相似度模型:如GerardSalton和McGill于早期提出的向量空間模型,他的思想是把文檔簡化為以特征項的權(quán)重為分量的向量表示,通過詞頻統(tǒng)計與向量降維處理來計算相似度?;谙蛄康奈谋鞠嗨贫扔嬎惴椒ㄊ悄壳爸髁鞯奈谋鞠嗨贫扔嬎惴椒?該方法將要比較相似度的文本根據(jù)文本中的詞語將文本映射為n維空間向量,然后通過比較向量間的關(guān)系來確定文本間的相似度,其中最常見的方式是計算空間向量間的余弦值,但傳統(tǒng)向量空間模型就利用文本而不是用詞來表示詞語之間的關(guān)系?,F(xiàn)在研究的主流方向就是基于空間向量模型。除了以上的模型以后還有一些其他方法被提出和發(fā)展。如:挪威Agdcr大學(xué)的VladimirOleshchuk等人提出基于本體的文本相似度比較方法,將本體論引入了文本相似度計算,它能計算文本的語義相似度。此外還有學(xué)者在研究句子間相似度的計算,如哥倫比亞大學(xué)的CarbonellJ.等人的最大邊緣相關(guān)的MMR方法。1.3.2國內(nèi)文本相似度研究情況在國內(nèi),國內(nèi)學(xué)者盤謙紅、王炬提出利用屬性論計算文本相似度,建立了文本屬性重心剖分模型,通過坐標(biāo)點與坐標(biāo)點的距離計算關(guān)鍵字與關(guān)鍵字的相關(guān)性,通過坐標(biāo)點與單純形的關(guān)系計算關(guān)鍵詞與文本的相關(guān)度。張煥炯、王國勝、鐘義信〔2001提出了基于漢明距離的文本相似度計算,該方法提出了漢明碼的概念。與其他的文本相似度計算公式相比較,因為該方法只是利用模2加等運(yùn)算,其方便性是不言而喻的,他完全避開了諸如在歐式空間中求相似度的大量乘法運(yùn)算,因此,可以較大的提高速度。其次,它跳出了傳統(tǒng)的借用空間的理念,而是用碼字的方式來表征文本信息的特征,可以不僅限于關(guān)鍵字等孤立的信息,這為聯(lián)合的描述文本的信息提供了可能。1.4開發(fā)語言JAVA語言。JAVA是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計語言和Java平臺〔即JavaEE,JavaME,JavaSE的總稱。Java自面世后就非常流行,發(fā)展迅速,對C++語言形成了有力沖擊。Java技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機(jī)、移動和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。選擇JAVA作為開發(fā)語言,一方面是因為自己對這種語言比較熟知,另一方面是因為它的確有著一些優(yōu)于其他語言的特點:<1>Java是簡單的Java與C++極為相似,但卻簡單得多。高級編程語言的所有特性中,不是絕對需要的都已刪去了。例如,Java沒有算符過載、標(biāo)題文件、預(yù)處理、指針運(yùn)算、結(jié)構(gòu)、聯(lián)合、多維數(shù)組、模板及隱式類型變換。<2>Java是編譯型的當(dāng)運(yùn)行Java程序時,它首先被編譯成字節(jié)代碼。字節(jié)代碼非常類似于機(jī)器指令,所以Java程序非常高效。然而,字節(jié)代碼并不專對一種特定的機(jī)器,所以Java程序無需重新編譯便可在眾多不同的計算機(jī)上執(zhí)行。<3>Java是可移植的Java程序是一次編譯,處處運(yùn)行。所以Java的移植卻很容易,而且不需要進(jìn)行重新編譯。<4>Java是健全的Java程序不可能造成計算機(jī)崩潰。Java系統(tǒng)仔細(xì)檢測對內(nèi)存的每次訪問,確認(rèn)它是合法的,而且不致引起任何問題。不過,即使Java程序也可能有錯誤。如果出現(xiàn)某種出乎意料之事,程序不會崩潰,而把該例外拋棄。1.5本文的主要工作和論文結(jié)構(gòu)1.5.1主要工作本文先介紹空間向量模型以及中文分詞的相關(guān)基本知識,在此基礎(chǔ)上,利用Java語言對某篇TXT文檔進(jìn)行分詞、詞頻統(tǒng)計、選出關(guān)鍵詞、調(diào)用Baidu搜索網(wǎng)頁相關(guān)內(nèi)容、下載網(wǎng)頁頁面、網(wǎng)頁去標(biāo)簽獲取主題內(nèi)容、計算余弦值得出相似度,通過上述過程完成基于WEB的相似網(wǎng)頁檢測。本文的研究內(nèi)容體現(xiàn)在以下四個方面:<1>VSM空間向量模型<2>中文分詞策略<3>HTML解析策略<4>計算文本相似度1.5.2論文結(jié)構(gòu)本文共分為六個章節(jié),具體章節(jié)內(nèi)容安排如下:第一章:緒論,介紹了選題背景和研究意義,然后粗略的講述了國內(nèi)外相關(guān)研究情況,最后介紹了本文的研究內(nèi)容和文章結(jié)構(gòu)。第二章:系統(tǒng)原理介紹,主要介紹了系統(tǒng)需要用到的相關(guān)知識點,例如向量空間模型、中文分詞技術(shù)、相似度的計算方式、下載網(wǎng)頁內(nèi)容并進(jìn)行解析等。第三章:系統(tǒng)分析與設(shè)計,主要闡述了基于WEB相似檢測的需求和項目設(shè)計的思想和流程。第四章:系統(tǒng)實現(xiàn),系統(tǒng)的核心代碼和算法抽取出來進(jìn)行詳細(xì)的講解和闡述。第五章:系統(tǒng)測試,抽取一個TXT文件進(jìn)行測試,查看結(jié)果是否符合預(yù)期要求。第六章:總結(jié)與展望,總結(jié)做畢業(yè)設(shè)計過程的經(jīng)驗,吸取教訓(xùn),展望未來的生活。最后是參考文獻(xiàn)和致謝。第二章系統(tǒng)原理介紹2.1原理概述本系統(tǒng)是基于向量空間模型〔VSM來設(shè)計的。我們將一篇文檔都看成一個向量,每個詞作為向量的一個維度,而詞的頻率看成其值〔有向,即向量,這樣每篇文章的詞及其頻率就構(gòu)成了一個i維空間圖,兩個文檔的相似度就是兩個空間圖的接近程度,即它們之間夾角的大小,我們通過計算余弦系數(shù)來體現(xiàn)。計算機(jī)不會像人一樣自動識別文檔里的每個詞,所以要對文檔進(jìn)行分詞處理,然后統(tǒng)計詞頻,最后根據(jù)余弦系數(shù)計算公式得出相似度比較結(jié)果。2.2系統(tǒng)相關(guān)知識點簡介2.2.1向量空間模型VSM模型〔VSM:VectorSpaceModel即向量空間模型,由Salton等人于20世紀(jì)70年代提出,并成功地應(yīng)用于著名的SMART文本檢索系統(tǒng)。向量空間模型的基本思想為將文本簡化為特征向量表示,將相似度計算問題簡化為空間向量的運(yùn)算,由此使得問題的復(fù)雜性大大降低。該方法根據(jù)文本中的詞語將文本映射為n維空間向量,通過計算空間向量的余弦值來確定文本的相似度,即利用空間的相似性來解決文本上的相似性,直觀易懂。通過向量空間模型,文本數(shù)據(jù)就轉(zhuǎn)換成了計算機(jī)可以處理的結(jié)構(gòu)化數(shù)據(jù),兩個文檔之間的相似性問題轉(zhuǎn)變成了兩個向量之間的相似性問題。我們可以這樣來理解一下向量空間模型。對于每篇文檔來說,它都是由很多詞條組成的。對此,我們可以對文檔〔Document和其所包含的詞條〔Term之間的關(guān)系進(jìn)行一個研究。我們可以將一篇文檔看成一個向量D〔term1,term2,……,termn。這樣,假設(shè)某兩篇文檔中都出現(xiàn)了term1和term2,就可以用一個二維的坐標(biāo)來表示文檔和詞條之間的關(guān)系,如圖2-1所示。從圖中可看出,文檔1中Term1共出現(xiàn)3次,Term2出現(xiàn)1次;而文檔2中Term2出現(xiàn)3次,Term1出現(xiàn)1次。所以,可以用向量D1〔3,1、D2〔1,3來表示這兩篇文檔。以此類推,一個搜索引擎的索引庫,可以看成是一個由詞條組成的N維向量空間。每一篇文檔均為其中的一個向量。在這種情況下,文檔之間就出現(xiàn)了特定的關(guān)系。例如,當(dāng)兩篇文檔內(nèi)容相近時,它們的詞條也就差不多。因此,從邏輯上看,它們可能就會在這個向量空間中處于一種很"接近"的位置。此時,"接近"真實含義指的是這兩個向量之間的夾角比較小。Term1Term2文檔1文檔2圖2-1文檔和詞條的向量空間Term1Term2文檔1文檔2圖2-1文檔和詞條的向量空間2.2.2中文分詞技術(shù)眾所周知,中文是世界上最復(fù)雜的語言之一。那么要對文本進(jìn)行相似度計算,首先就要進(jìn)行分詞處理。分詞,即將一段文本拆分成多個詞。現(xiàn)有的分詞方式主要有單字分詞、二分法、詞典分詞。單字分詞,顧名思義即在對中文文本進(jìn)行分詞時,以字為單位進(jìn)行切分。按這種方式建立索引,則索引中所有的詞條的集合就是中文漢字庫的一個子集合。字索引比較靈活,但需要復(fù)雜的單字匹配算法,以及大量的CPU運(yùn)算。二分法,即將每兩個字當(dāng)作一個詞語進(jìn)行切分,然后建立索引。它明顯的減少了每個詞條后位置信息的長度。如Lucene的CJKAnalyzer就是對中文采取二分的方式進(jìn)行分詞。本系統(tǒng)采用IKAnalyzer分詞器進(jìn)行分詞,也相當(dāng)于使用詞典分詞,是目前來講分詞比較準(zhǔn)確的一種方法,即通過構(gòu)造一個常用詞詞典來對遇到的文本進(jìn)行詞語的切分。中國科學(xué)院計算技術(shù)所研究的ICTCLAS在中文分詞領(lǐng)域是較為先進(jìn)的分詞系統(tǒng),其分詞詞典也是世界公認(rèn)的精準(zhǔn)。使用詞典分詞法在文本中匹配單詞時用到一些常用的算法:正向最大匹配算法:從左到右將待分詞文本中的幾個連續(xù)字符與詞庫匹配,如果匹配上,則切分出一個詞。逆向最大匹配算法:從被處理文檔的末端開始匹配掃描,每次取最末端的2i個字符〔i字字串作為匹配字段,若匹配失敗,則去掉匹配字段最前面的一個字,繼續(xù)匹配。其采用的分詞詞典是逆序詞典,對文檔進(jìn)行處理時先要進(jìn)行倒排處理,生成逆序文檔。有的時候,需多種方式對文本進(jìn)行切分,當(dāng)它們切分的結(jié)果相同,表示這個詞就是真正需要的詞。2.2.3TF統(tǒng)計方法TF的全稱TermFrequency,也就是詞條頻率。用數(shù)學(xué)方法來描述即某個詞語出現(xiàn)的次數(shù)除以該文檔中的詞條總數(shù)。常用于情報檢索與文本挖掘,用以評估一個詞對于一個文檔的重要程度。如今在信息科學(xué)領(lǐng)域,比較經(jīng)典的詞頻統(tǒng)計方法有基于匹配的詞頻統(tǒng)計算法和基于樹結(jié)構(gòu)的詞頻統(tǒng)計算法。對于單關(guān)鍵詞匹配算法國內(nèi)外都有了深入的研究,比較著名的匹配算法有BF<BruteForce>算法、KMP<Knuth-Morris-Pratt>算法、BM<Boyer-Moore>算法等。<1>BF算法BF算法亦稱蠻力算法。其基本思想是:首先S[1]和T[1]比較,若相等,則再比較S[2]和T[2],一直到T[M]為止;若S[1]和T[1]不等,則T向右移動一個字符的位置,再依次進(jìn)行比較。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],則匹配成功;否則失敗。<2>KMP算法KMP算法是由高德納〔DonaldErvinKnuth和VaughanPratt在1977年合作發(fā)明的。其基本思想為:假設(shè)在模式匹配的進(jìn)程中,執(zhí)行T[i]和W[j]的匹配檢查。若T[i]=W[j],則繼續(xù)檢查T[i+1]和W[j+1]是否匹配。若T[i]<>W[j],則分成兩種情況:若j=1,則模式串右移一位,檢查T[i+1]和W[1]是否匹配;若1<j<=m,則模式串右移j-next<j>位,檢查T[i]和W[next<j>]是否匹配。重復(fù)此過程直到j(luò)=m或i=n結(jié)束。<3>BM算法BM算法由BobBoyer和JStrotherMoore在1977年提出,它是一個非常有效的字符串匹配算法。它的基本思想是:假設(shè)將主串中自位置i起往左的一個子串與模式進(jìn)行從右到左的匹配過程中,若發(fā)現(xiàn)不匹配,則下次應(yīng)從主串的i+dist<si>位置開始重新進(jìn)行新一輪的匹配,其效果相當(dāng)于把模式和主串向右滑過一段距離distance〔si,即跳過distance〔si個字符而無需進(jìn)行比較?;谄ヅ涞脑~頻統(tǒng)計方法,不可避免的是要對待處理的文檔進(jìn)行多次掃描。當(dāng)待處理文檔數(shù)據(jù)量比較大時,這無疑是要付出更高的時間和空間代價。針對這個問題,有學(xué)者又提出了基于樹結(jié)構(gòu)的詞頻統(tǒng)計算法。其基本思想是:首先根據(jù)已有的關(guān)鍵詞集合構(gòu)建一棵查找樹,然后利用這個查找樹對文檔進(jìn)行掃描,從而進(jìn)行關(guān)鍵詞的統(tǒng)計。進(jìn)行詞頻統(tǒng)計時,非常好的是每當(dāng)從文檔中讀取一個詞與查找樹比較時,只需對文檔掃描一遍,則可統(tǒng)計出所有關(guān)鍵詞的信息。這種方法減少了一些不必要的匹配過程,大大提高了統(tǒng)計效率。2.2.4TF-IDF算法TF-IDF簡介TF-IDF〔termfrequency–inversedocumentfrequency是一種用于資訊檢索與資訊探勘的常用加權(quán)技術(shù)。TF-IDF是一種統(tǒng)計方法,用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。TF-IDF加權(quán)的各種形式常被搜尋引擎應(yīng)用,作為文件與用戶查詢之間相關(guān)程度的度量或評級。除了TF-IDF以外,因特網(wǎng)上的搜尋引擎還會使用基于連結(jié)分析的評級方法,以確定文件在搜尋結(jié)果中出現(xiàn)的順序。在一份給定的文件里,詞頻<termfrequency,TF>指的是某一個給定的詞語在該文件中出現(xiàn)的次數(shù)。這個數(shù)字通常會被歸一化〔分子一般小于分母區(qū)別于IDF,以防止它偏向長的文件?!餐粋€詞語在長文件里可能會比短文件有更高的詞頻,而不管該詞語重要與否。逆向文件頻率<inversedocumentfrequency,IDF>是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數(shù)目除以包含該詞語之文件的數(shù)目,再將得到的商取對數(shù)得到。某一特定文件內(nèi)的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產(chǎn)生出高權(quán)重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。TF-IDF主要思想如果某個詞或短語在一篇文章中出現(xiàn)的頻率TF高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。TFIDF實際上是:TF*IDF,TF詞頻<TermFrequency>,IDF反文檔頻率<InverseDocumentFrequency>。TF表示詞條在文檔d中出現(xiàn)的頻率〔另一說:TF詞頻<TermFrequency>指的是某一個給定的詞語在該文件中出現(xiàn)的次數(shù)。IDF的主要思想是:如果包含詞條t的文檔越少,也就是n越小,IDF越大,則說明詞條t具有很好的類別區(qū)分能力。如果某一類文檔C中包含詞條t的文檔數(shù)為m,而其它類包含t的文檔總數(shù)為k,顯然所有包含t的文檔數(shù)n=m+k,當(dāng)m大的時候,n也大,按照IDF公式得到的IDF的值會小,就說明該詞條t類別區(qū)分能力不強(qiáng)?!擦硪徽f:IDF反文檔頻率<InverseDocumentFrequency>是指果包含詞條的文檔越少,IDF越大,則說明詞條具有很好的類別區(qū)分能力。但是實際上,如果一個詞條在一個類的文檔中頻繁出現(xiàn),則說明該詞條能夠很好代表這個類的文本的特征,這樣的詞條應(yīng)該給它們賦予較高的權(quán)重,并選來作為該類文本的特征詞以區(qū)別與其它類文檔。這就是IDF的不足之處.在一份給定的文件里,詞頻〔termfrequency,TF指的是某一個給定的詞語在該文件中出現(xiàn)的頻率。這個數(shù)字是對詞數(shù)<termcount>的歸一化,以防止它偏向長的文件?!餐粋€詞語在長文件里可能會比短文件有更高的詞數(shù),而不管該詞語重要與否。對于在某一特定文件里的詞語來說,它的重要性可表示為:以上式子中是該詞在文件中的出現(xiàn)次數(shù),而分母則是在文件中所有字詞的出現(xiàn)次數(shù)之和。逆向文件頻率〔inversedocumentfrequency,IDF是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數(shù)目除以包含該詞語之文件的數(shù)目,再將得到的商取對數(shù)得到:其中|D|:語料庫中的文件總數(shù):包含詞語的文件數(shù)目〔即的文件數(shù)目如果該詞語不在語料庫中,就會導(dǎo)致被除數(shù)為零,因此一般情況下使用然后某一特定文件內(nèi)的高詞語頻率,以及該詞語在整個文件集合中的低文件頻率,可以產(chǎn)生出高權(quán)重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。TF-IDF算法示例有很多不同的數(shù)學(xué)公式可以用來計算TF-IDF。這邊的例子以上述的數(shù)學(xué)公式來計算。詞頻<TF>是一詞語出現(xiàn)的次數(shù)除以該文件的總詞語數(shù)。假如一篇文件的總詞語數(shù)是100個,而詞語"母牛"出現(xiàn)了3次,那么"母牛"一詞在該文件中的詞頻就是3/100=0.03。一個計算文件頻率<DF>的方法是測定有多少份文件出現(xiàn)過"母牛"一詞,然后除以文件集里包含的文件總數(shù)。所以,如果"母牛"一詞在1,000份文件出現(xiàn)過,而文件總數(shù)是10,000,000份的話,其逆向文件頻率就是log<10,000,000/1,000>=4。最后的TF-IDF的分?jǐn)?shù)為0.03*4=0.12。根據(jù)關(guān)鍵字k1,k2,k3進(jìn)行搜索結(jié)果的相關(guān)性就變成TF1*IDF1+TF2*IDF2+TF3*IDF3。比如document1的term總量為1000,k1,k2,k3在document1出現(xiàn)的次數(shù)是100,200,50。包含了k1,k2,k3的docuement總量分別是1000,10000,5000。documentset的總量為10000。TF1=100/1000=0.1TF2=200/1000=0.2TF3=50/1000=0.05IDF1=log<10000/1000>=log<10>=2.3IDF2=log<10000/100000>=log<1>=0;IDF3=log<10000/5000>=log<2>=0.69這樣關(guān)鍵字k1,k2,k3與docuement1的相關(guān)性=0.1*2.3+0.2*0+0.05*0.69=0.2645其中k1比k3的比重在document1要大,k2的比重是0.在某個一共有一千詞的網(wǎng)頁中"原子能"、"的"和"應(yīng)用"分別出現(xiàn)了2次、35次和5次,那么它們的詞頻就分別是0.002、0.035和0.005。我們將這三個數(shù)相加,其和0.042就是相應(yīng)網(wǎng)頁和查詢"原子能的應(yīng)用"相關(guān)性的一個簡單的度量。概括地講,如果一個查詢包含關(guān)鍵詞w1,w2,...,wN,它們在一篇特定網(wǎng)頁中的詞頻分別是:TF1,TF2,...,TFN?!睺F:termfrequency>。那么,這個查詢和該網(wǎng)頁的相關(guān)性就是:TF1+TF2+...+TFN。TF-IDF算法深度剖析在上面的例子中,詞"的"站了總詞頻的80%以上,而它對確定網(wǎng)頁的主題幾乎沒有用。我們稱這種詞叫"應(yīng)刪除詞"〔Stopwords>,也就是說在度量相關(guān)性是不應(yīng)考慮它們的頻率。在漢語中,應(yīng)刪除詞還有"是"、"和"、"中"、"地"、"得"等等幾十個。忽略這些應(yīng)刪除詞后,上述網(wǎng)頁的相似度就變成了0.007,其中"原子能"貢獻(xiàn)了0.002,"應(yīng)用"貢獻(xiàn)了0.005。細(xì)心的讀者可能還會發(fā)現(xiàn)另一個小的漏洞。在漢語中,"應(yīng)用"是個很通用的詞,而"原子能"是個很專業(yè)的詞,后者在相關(guān)性排名中比前者重要。因此我們需要給漢語中的每一個詞給一個權(quán)重,這個權(quán)重的設(shè)定必須滿足下面兩個條件:<1>一個詞預(yù)測主題能力越強(qiáng),權(quán)重就越大,反之,權(quán)重就越小。我們在網(wǎng)頁中看到"原子能"這個詞,或多或少地能了解網(wǎng)頁的主題。我們看到"應(yīng)用"一次,對主題基本上還是一無所知。因此,"原子能"的權(quán)重就應(yīng)該比應(yīng)用大。<2>應(yīng)刪除詞的權(quán)重應(yīng)該是零。我們很容易發(fā)現(xiàn),如果一個關(guān)鍵詞只在很少的網(wǎng)頁中出現(xiàn),我們通過它就容易鎖定搜索目標(biāo),它的權(quán)重也就應(yīng)該大。反之如果一個詞在大量網(wǎng)頁中出現(xiàn),我們看到它仍然不很清楚要找什么內(nèi)容,因此它應(yīng)該小。概括地講,假定一個關(guān)鍵詞w在Dw個網(wǎng)頁中出現(xiàn)過,那么Dw越大,w的權(quán)重越小,反之亦然。在信息檢索中,使用最多的權(quán)重是"逆文本頻率指數(shù)"〔Inversedocumentfrequency縮寫為IDF,它的公式為log〔D/Dw其中D是全部網(wǎng)頁數(shù)。比如,我們假定中文網(wǎng)頁數(shù)是D=10億,應(yīng)刪除詞"的"在所有的網(wǎng)頁中都出現(xiàn),即Dw=10億,那么它的IDF=log<10億/10億=log<1>=0。假如專用詞"原子能"在兩百萬個網(wǎng)頁中出現(xiàn),即Dw=100萬,則它的權(quán)重IDF=log<500>=6.2。又假定通用詞"應(yīng)用",出現(xiàn)在五億個網(wǎng)頁中,它的權(quán)重IDF=log<2>則只有0.7。也就只說,在網(wǎng)頁中找到一個"原子能"的比配相當(dāng)于找到九個"應(yīng)用"的匹配。利用IDF,上述相關(guān)性計算個公式就由詞頻的簡單求和變成了加權(quán)求和,即TF1*IDF1+TF2*IDF2+...+TFN*IDFN。在上面的例子中,該網(wǎng)頁和"原子能的應(yīng)用"的相關(guān)性為0.0161,其中"原子能"貢獻(xiàn)了0.0126,而"應(yīng)用"只貢獻(xiàn)了0.0035。這個比例和我們的直覺比較一致了。2.2.5數(shù)據(jù)降維數(shù)據(jù)降維,是詞頻統(tǒng)計中所要考慮的一個因素。當(dāng)文檔中的詞條數(shù)目很多,即向量的維度較高,那么為了提高效率,我們需要降低維度,即去除一些無關(guān)緊要的詞語,減少詞語的數(shù)量。而且采取降維的策略在一定程度上,還可以提高精度。文本特征向量降維主要有如下的兩類:<1>特征選擇:是指代去除那些不能表示信息或者表示的信息量很小的詞<從廣義上說:不存在不能表示信息或者意義的詞,否則它就沒有了存在的必要,自然這個詞就無法存在>,以提高文本相似度計算的效率并且減少復(fù)雜度,基本上可以被分為如下幾種方法:①根據(jù)單詞的IDF值來進(jìn)行判斷:當(dāng)單詞的IDF值小于一個閾值或者大于另一個閾值的時候都要去除;②根據(jù)單詞的文本頻度TF值來判斷:當(dāng)單詞的TF值小于或者大于某個給定的闕值也要去除;③根據(jù)X2統(tǒng)計量進(jìn)行判斷:其值越大,單詞與文本之間的獨立性越小,相關(guān)性越大,所以要去除X2小的詞;·④根據(jù)互信息MI來進(jìn)行判斷:<MI>越大,兩個單詞之問的關(guān)系就越強(qiáng)。其中第一種方法效果較好。<2>特征重構(gòu):是通過合并或轉(zhuǎn)化特征項來構(gòu)造新的特征項,以達(dá)到降維的目的,一些文獻(xiàn)中使用的奇異值分解方法就是這種思想的一種實現(xiàn)。2.2.6相似度計算方法基于向量空間模型,我們將兩篇文檔理解為兩個向量,將它們之間的相似度理解為這兩個向量在空間上的接近程度,即它們之間的夾角。我們通過計算余弦系數(shù)來比較兩篇文章的相似度,余弦系數(shù)計算方法為,向量內(nèi)積/各個向量的模的乘積,如圖2-2所示。圖2-2兩個向量余弦值的計算其中,、分別為待比較的兩個文本的特征向量,、分別為向量的第i維,n為特征向量的維數(shù)。余弦計算的好處是其值正好是一個介于0到1的數(shù),如果向量一致就是1,如果正交就是0,符合相似度百分比的特性。為了讓過程更加的簡潔明了,下面舉例說明:假設(shè)共有十個詞:W1,W2,,W10,而共有三篇文章,d1,d2,d3。統(tǒng)計出文章的詞頻表,如圖2-3所示。文檔W1W2W3W4W5W6W7W8W9W10d112579d23468d3101112131415圖2-3詞頻表的統(tǒng)計結(jié)果假設(shè)計算d1和d2的文本相似度,根據(jù)圖2-2公式可得結(jié)論,如圖2-4所示。圖2-4向量余弦值的示例計算2.3系統(tǒng)實現(xiàn)思想我們將兩篇文檔當(dāng)作兩個向量,通過計算相似度來宏觀的表現(xiàn)它們的接近程度。本系統(tǒng)主要按如下的思路進(jìn)行:根據(jù)2.2節(jié)相關(guān)技術(shù)的介紹,本系統(tǒng)采用向量空間模型,主要流程可以細(xì)分為如下模塊進(jìn)行,分詞處理,詞頻統(tǒng)計,選擇關(guān)鍵字調(diào)用百度搜索查詢,下載網(wǎng)頁并解析,相似度計算。注釋:分詞處理主要利用IKAnalyzer分詞器〔下面統(tǒng)一簡稱為IK分詞器IKAnalyzer是一個開源的,基于java語言開發(fā)的輕量級的中文分詞工具包。從20XX12月推出1.0版開始,IKAnalyzer已經(jīng)推出了4個大版本。最初,它是以開源項目Luence為應(yīng)用主體的,結(jié)合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開始,IK發(fā)展為面向Java的公用分詞組件,獨立于Lucene項目,同時提供了對Lucene的默認(rèn)優(yōu)化實現(xiàn)。在2012版本中,IK實現(xiàn)了簡單的分詞歧義排除算法,標(biāo)志著IK分詞器從單純的詞典分詞向模擬語義分詞衍化。其相關(guān)特性如下:<1>采用了特有的"正向迭代最細(xì)粒度切分算法",具有60萬字/秒的高速處理能力。<2>采用了多子處理器分析模式,支持:英文字母〔IP地址、Email、URL、數(shù)字〔日期,常用中文數(shù)量詞,羅馬數(shù)字,科學(xué)計數(shù)法,中文詞匯〔姓名、地名處理等分詞處理。對中英聯(lián)合支持不是很好,在這方面的處理比較麻煩.需再做一次查詢,同時是支持個人詞條的<3>優(yōu)化的詞典存儲,更小的內(nèi)存占用。支持用戶詞典擴(kuò)展定義<4>針對Lucene全文檢索優(yōu)化的查詢分析器IKQueryParser;采用歧義分析算法優(yōu)化查詢關(guān)鍵字的搜索排列組合,能極大的提高Lucene檢索的命中率。第三章系統(tǒng)分析與設(shè)計3.1系統(tǒng)需求分析隨著計算機(jī)的普及和網(wǎng)絡(luò)的飛速發(fā)展,互聯(lián)網(wǎng)上以及各種電子文檔的數(shù)量以空前的速度增長,人們獲取知識的途徑也發(fā)生了深刻的變化。面對如此巨大的知識海洋,如何快速查找相關(guān)信息變得非常重要。如果沒有有效的組織和提取方式,普通用戶查找自己想要的信息所用的時間可能比了解信息本身所花費(fèi)的時間還長,這是人們無法容忍的。文本相似度是表示兩個或多個文本之間匹配程度的一個度量參數(shù),相似度大,說明文本相似程度高,反之文本相似度低。對于文本聚類、信息檢索、問答系統(tǒng)、網(wǎng)頁去重、文本分類等很多領(lǐng)域,文本相似度的有效計算問題是其進(jìn)行信息處理的關(guān)鍵。論文抄襲是一種嚴(yán)重的造假行為。當(dāng)前出現(xiàn)的各種學(xué)術(shù)造假、論文抄襲現(xiàn)象,已嚴(yán)重的影響到整個高校的學(xué)術(shù)氛圍。大學(xué)是一個要求學(xué)生獨立自主學(xué)習(xí)的地方,而現(xiàn)在越來越多的學(xué)生放慢自己的行為,對老師布置的作業(yè)抄抄了事。這樣老師既不能對學(xué)生的學(xué)習(xí)情況得到一個真實的掌握,學(xué)生學(xué)習(xí)的積極性也慢慢下降。這牽涉到的是一個誠信問題。誠信是社會道德的一道防線,也是大學(xué)生誠信責(zé)任的一道防線。現(xiàn)在這道防線岌岌可危,我們應(yīng)采取積極地措施加以保護(hù)。本課題就在網(wǎng)上搜索與已經(jīng)存在的TXT文件相似的內(nèi)容做了一個系統(tǒng)設(shè)計。系統(tǒng)一方面在理論方面進(jìn)行了一定的探究,了解了文檔相似度相關(guān)方面的知識,另一方面在實際的應(yīng)用上也有一定的價值。本系統(tǒng)只是簡單實現(xiàn)了基本功能,有些地方還需進(jìn)一步完善優(yōu)化,用戶可用此系統(tǒng)較為方便的搜索與自己已有文檔相似的網(wǎng)頁內(nèi)容,老師也可以將此作為檢查學(xué)生抄襲情況的工具,盡量減少學(xué)生抄襲的念頭。3.2系統(tǒng)功能概述3.2.1系統(tǒng)流程首先,用戶選擇一個要查詢的TXT文件,確定TXT文件所在的文件夾,然后是進(jìn)行文檔分詞,統(tǒng)計詞頻,得到一個HashMap;排序后,選擇所需數(shù)量的關(guān)鍵詞后調(diào)用Baidu搜索相關(guān)的網(wǎng)頁并下載;整理并去掉網(wǎng)頁標(biāo)簽得到純文本內(nèi)容,提取內(nèi)容存入到電腦;最后計算得到兩篇文章的相似度。比較各個網(wǎng)頁與原TXT文件的相似度,相似度越接近1則表示越相近;相似度越接近0則表示內(nèi)容越來越不匹配。3.2.2功能模塊介紹本課題設(shè)計的基于WEB的相似網(wǎng)頁檢測主要是進(jìn)行一個理論的研究,可以搜索與TXT文件相似的網(wǎng)頁內(nèi)容,每一次檢測的對象都是放在同一文件夾下,然后對文檔進(jìn)行相似度的檢測。另外,本系統(tǒng)對圖片、表格等是不進(jìn)行識別和檢測的。根據(jù)實際的需求,基于WEB的相似網(wǎng)頁檢測可以分成四個功能模塊,如圖3-1所示?;赪EB的相似網(wǎng)頁檢測基于WEB的相似網(wǎng)頁檢測分詞統(tǒng)計模塊調(diào)用Baidu查詢模塊下載網(wǎng)頁解析模塊計算文本相似度模塊圖3-1系統(tǒng)模塊圖各模塊實現(xiàn)的功能如下:<2>分詞統(tǒng)計模塊此模塊實現(xiàn)文本分詞,并對分詞進(jìn)行統(tǒng)計。選擇TXT文件所在的文件夾,讀取文件內(nèi)容存為字符串,利用IK分詞器將字符串〔也就是文本內(nèi)容進(jìn)行分詞,并且統(tǒng)計分詞出現(xiàn)的次數(shù),最后計算詞頻。<3>調(diào)用Baidu查詢模塊此模塊實現(xiàn)調(diào)用Baidu對關(guān)鍵詞進(jìn)行網(wǎng)絡(luò)查詢。其中百度的查詢代碼是[此處為搜索的詞語]&tn=monline_4_dg"抽取搜索的網(wǎng)頁中的百度鏈接所用的方法是使用正則表達(dá)式://baidu/link\\?url=\\w+<\\S+>?\"<4>下載網(wǎng)頁進(jìn)行解析模塊此模塊對下載的模塊進(jìn)行解析。下載下來的內(nèi)容為HTML語言,而我們只需要的是里面的文字內(nèi)容,標(biāo)簽以及標(biāo)簽中的嵌套都不是我們所需。得到的純文本內(nèi)容寫入文件。<5>文本相似度計算模塊此模塊實現(xiàn)對向量的計算,得出文本相似度。文件通過上述過程都轉(zhuǎn)換成了計算機(jī)可以計算的向量空間,調(diào)用計算向量的函數(shù)得到一個介于0~1的結(jié)果。通過結(jié)果可以判定兩個文本的相似程度。3.3系統(tǒng)性能要求<1>系統(tǒng)設(shè)計的合理性在設(shè)計系統(tǒng)時要考慮實際的系統(tǒng)性能和硬件要求,不能忽視所處環(huán)境,也不能一味地追求新的設(shè)計方法,要保證系統(tǒng)實現(xiàn)的合理性。<2>系統(tǒng)的簡單易用性本系統(tǒng)側(cè)重于對相似度檢測進(jìn)行一個理論的研究,所以并不需要過于美觀、應(yīng)用的界面,作為用戶最終需要的只是兩篇文檔的相似度比較結(jié)果。因此設(shè)計時本著"簡單易用"的原則,方便用戶操作。<3>系統(tǒng)的可靠性要比較的兩篇文檔,可能是數(shù)據(jù)量很大的文本,就要考慮到系統(tǒng)運(yùn)行的效率,采取相應(yīng)的算法加以優(yōu)化,盡可能的保證系統(tǒng)高性能有效的運(yùn)行。第四章系統(tǒng)實現(xiàn)4.1系統(tǒng)運(yùn)行環(huán)境1、硬件環(huán)境:處理器:InterCore或更高內(nèi)存:2GB2、軟件環(huán)境:操作系統(tǒng):WindowsXP或者Windows7語言開發(fā)工具:Eclipse4.2核心相關(guān)代碼分析4.2.1分詞類的介紹<1>類org.wltea.analyzer.core.IKSegmenter:說明:這是IK分詞器的核心類。它是獨立于Lucene的Java分詞器實現(xiàn)。當(dāng)需要在Lucene以外的環(huán)境中單獨使用IK中文分詞組件時,可以使用IKSegmenter。publicIKSegmenter<Readerinput,booleanuseSmart>說明:IK主分詞器構(gòu)造函數(shù)參數(shù)1:Readerinput,字符輸入讀取參數(shù)2:booleanuseSmart,是否采用智能切分策略。true使用智能切分,false使用最細(xì)粒度切分。publicIKSegmentation<Readerinput,Configurationcfg>說明:IK主分詞器新構(gòu)造函數(shù)參數(shù)1:Readerinput,字符輸入讀取參數(shù)2:Configurationcfg,分詞器配置。用戶可以定制自己的Configuration類,來改變詞典配置。publicsynchronizedLexemenext<>throwsIOException說明:讀取分詞器切分出的下一個語義單元,如果返回值為null,表示分詞器已經(jīng)結(jié)束。返回值:Lexeme語義單元對象,即相當(dāng)于Lucene的詞元對象Token說明:這是IK分詞器的語義單元對象,相當(dāng)于Lucene中的Token詞元對象。由于IK被設(shè)計為獨立于Lucene的Java分詞器實現(xiàn),因此它需要Lexeme來代表分詞的結(jié)果。publicintgetBeginPosition<>說明:獲取語義單元的起始字符在文本中的位置返回值:int,語義單元相對于文本的絕對起始位置publicintgetEndPosition<>說明:獲取語義單元的結(jié)束字符的下一個位置返回值:int,語義單元相對于文本的絕對終止位置的下一個字符位置publicintgetLength<>說明:獲取語義單元包含字符串的長度返回值:int,語義單元長度=getEndPosition–getBeginPositionpublicStringgetLexemeText<>說明:獲取語義單元包含字符串內(nèi)容返回值:String,語義單元的實際內(nèi)容,即分詞的結(jié)果4.2.2核心代碼解析privatestaticMap<String,Integer>segString<Stringcontent>{//分詞Readerinput=newStringReader<content>;//智能分詞關(guān)閉〔對分詞的精度影響很大IKSegmenteriks=newIKSegmenter<input,true>;Lexemelexeme=null;Map<String,Integer>words=newHashMap<String,Integer><>;try{while<<lexeme=iks.next<>>!=null>{if<words.containsKey<lexeme.getLexemeText<>>>{words.put<lexeme.getLexemeText<>,words.get<lexeme.getLexemeText<>>+1>;}else{words.put<lexeme.getLexemeText<>,1>;}}}catch<IOExceptione>{e.printStackTrace<>;}returnwords;}該函數(shù)主要實現(xiàn)分詞功能,參數(shù)是讀取TXT文件后存入變量中的字符串。利用IK分詞器循環(huán)對字符串進(jìn)行分詞,得到的分詞存入到HashMap中。其中HashMap鍵值對中key指的是分詞,value是該分詞在字符串中出現(xiàn)的次數(shù)。privatestaticHashMap<String,Double>tf<Map<String,Integer>segWordsResult>{HashMap<String,Double>tf=newHashMap<String,Double><>;if<segWordsResult==null||segWordsResult.size<>==0>{returntf; }Doublesize=Double.valueOf<segWordsResult.size<>>;Set<String>keys=segWordsResult.keySet<>;for<Stringkey:keys>{ Integervalue=segWordsResult.get<key>; tf.put<key,Double.valueOf<value>/size>;}returntf;}該函數(shù)實現(xiàn)詞頻的統(tǒng)計。參數(shù)為通過分詞函數(shù)得到的〔分詞,出現(xiàn)次數(shù)鍵值對的HashMap。而詞頻的計算方式為該詞出現(xiàn)次數(shù)/總次數(shù),即是Double.valueOf<value>/size。publicstaticMap<String,Map<String,Double>>allTf<Stringdir>{try{ ReadFile.fileList=ReadFile.readDirs<dir>;for<StringfilePath:ReadFile.fileList>{ Stringcontent=ReadFile.readFile<filePath>; Map<String,Integer>segs=segString<content>;allSegsMap.put<filePath,segs>;allTfMap.put<filePath,tf<segs>>; } }catch<FileNotFoundExceptionffe>{ ffe.printStackTrace<>; }catch<IOExceptionio>{ io.printStackTrace<>; }returnallTfMap;}該函數(shù)實現(xiàn)對一個文件夾下所有的TXT文件進(jìn)行詞頻的統(tǒng)計。該函數(shù)的參數(shù)是一個文件夾路徑名〔注意并非文件名,遍歷讀取文件夾下面的文件內(nèi)容后用上面所說的segString函數(shù)對文件內(nèi)容進(jìn)行分詞然后存儲到Map中。返回值是一個嵌套的Map,Map<String,Map<String,Double>>中的前一個String代表文件路徑名,后一個Map中的String代表一個分詞,Double即是詞頻。publicstaticMap<String,Integer>getMostFrequentWords<intnum,Map<String,Integer>words>{ Map<String,Integer>keywords=newLinkedHashMap<String,Integer><>;intcount=0; //詞頻統(tǒng)計 List<Map.Entry<String,Integer>>info=newArrayList<Map.Entry<String,Integer>><words.entrySet<>>; Collections.sort<info,newComparator<Map.Entry<String,Integer>><>{publicintcompare<Map.Entry<String,Integer>obj1,Map.Entry<String,Integer>obj2>{returnobj2.getValue<>-obj1.getValue<>; } }>; //高頻詞輸出for<intj=0;j<info.size<>;j++>{ //詞-->頻if<info.get<j>.getKey<>.length<>>1>{if<num>count>{ keywords.put<info.get<j>.getKey<>,info.get<j>.getValue<>>; count++; }else{break; } } }returnkeywords; }該函數(shù)實現(xiàn)功能是獲取最高詞頻的分詞,其中需要的最高詞頻的分詞個數(shù)可以自己選擇。其中排序算法用到了Java集合中的Collections.sort方法對list排序的方法。其中一種是list中的對象實現(xiàn)Comparable接口,另一種是根據(jù)Collections.sort重載方法來實現(xiàn),本文采取后一種方式排序。值得注意的是后一種方式需要實現(xiàn)comparator接口中的compare方法。publicStringparse<Stringhtml>{ StringBuildersb=newStringBuilder<>;intstatus=0;//0-->notstart1-->startedfor<inti=0;i<html.length<>;i++>{charch=html.charAt<i>;if<status==0>{if<ch=='<'>{if<html.startsWith<"script",i+1> ||html.startsWith<"SCRIPT",i+1>> status=2;elseif<html.startsWith<"style",i+1> ||html.startsWith<"STYLE",i+1>>{ status=3; }else{ status=1; } }elseif<ch=='&'>{ //finda';'within5charsintk=1;for<k=1;k<5;k++>{if<html.charAt<i+k>==';'>break; }if<k<5> i+=k;else{ sb.append<ch>; } }elseif<ch==''||ch=='\r'||ch=='\n'||ch=='\t'>{ }else{ sb.append<ch>; } }else{if<ch=='>'>{if<status==1>{ status=0; }elseif<status==2>{if<html.startsWith<"/script",i-"/script".length<>> ||html.startsWith<"/SCRIPT", i-"/SCRIPT".length<>>>{ status=0; } }elseif<status==3>{if<html.startsWith<"/style",i-"/style".length<>> ||html.startsWith<"/STYLE", i-"/STYLE".length<>>>{ status=0; } } } } }returnsb.toString<>; }此函數(shù)主要實現(xiàn)了HTML去掉標(biāo)簽的功能,為了得到我們需要的網(wǎng)頁內(nèi)容,我們需要對下載的HTML代碼進(jìn)行去標(biāo)簽處理。去除腳本語言<script>和</script>以及樣式<style>和</style>間的內(nèi)容。第五章系統(tǒng)測試5.1文章分詞測試選擇需要進(jìn)行分詞的文件,我選擇的測試文件為D:\\text\\LOLtEXT,測試結(jié)果如圖5-1所示。圖5-1文章分詞測試結(jié)果結(jié)果顯示了D:\\text\\LOLtEXT文件夾下的"新建文本文檔.txt"文件的分詞結(jié)果,以及詞頻tf的統(tǒng)計。由于分詞比較多,上圖只是部分截圖。5.2獲取關(guān)鍵字測試通過以上分詞以及結(jié)果統(tǒng)計后,我們得到了文章的所有分詞,此時我們需要抽取

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論