版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
..畢業(yè)設(shè)計(jì)〔論文題目:基于VSM模型的文本相似性的比較姓名XXXXX學(xué)號(hào)AAAAA所在學(xué)院BBBBB專業(yè)班級(jí)CCCCC指導(dǎo)教師DDDDD日期摘要在互聯(lián)網(wǎng)迅速發(fā)展的時(shí)代,網(wǎng)絡(luò)上的信息數(shù)量越來越多,種類也比較紛雜。雖然能在我們查詢相關(guān)信息是提供大量選擇,但是靠人工瀏覽的方式在浩瀚的信息庫中找到自己最需要最相關(guān)的信息,無疑給用戶帶來了麻煩,而且效率也十分低下。為了解決這一個(gè)問題,關(guān)于判斷文本相似度的技術(shù)應(yīng)運(yùn)而生,目前廣泛運(yùn)用于計(jì)算機(jī),電信等行業(yè)。本文著重闡述了計(jì)算文本相似度的過程中會(huì)遇到的難題,以及解決這些難題需要用到的相應(yīng)算法,最后利用VSM模型進(jìn)行簡(jiǎn)單的設(shè)計(jì)與運(yùn)用,完成基于web的相似網(wǎng)頁檢測(cè)程序關(guān)鍵字:文本相似度;相似網(wǎng)頁檢測(cè);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國(guó)內(nèi)外研究現(xiàn)狀-6-國(guó)外文本相似度研究狀況-6-國(guó)內(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)知識(shí)點(diǎn)簡(jiǎn)介-10-向量空間模型-10-中文分詞技術(shù)-11-統(tǒng)計(jì)方法-12-算法-13-數(shù)據(jù)降維-16-相似度計(jì)算方法-16-2.3系統(tǒng)實(shí)現(xiàn)思想-17-第三章系統(tǒng)分析與設(shè)計(jì)-19-3.1系統(tǒng)需求分析-19-3.2系統(tǒng)功能概述-19-系統(tǒng)流程-19-功能模塊介紹-20-3.3系統(tǒng)性能要求-21-第四章系統(tǒng)實(shí)現(xiàn)-22-4.1系統(tǒng)運(yùn)行環(huán)境-22-4.2核心相關(guān)代碼分析-22-分詞類的介紹-22-核心代碼解析-23-第五章系統(tǒng)測(cè)試-29-5.1文章分詞測(cè)試-29-5.2獲取關(guān)鍵字測(cè)試-29-5.3抓取網(wǎng)頁內(nèi)容測(cè)試-30-5.4計(jì)算文本相似度-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ù)以其使用直觀、高效、簡(jiǎn)單等優(yōu)點(diǎn)逐步成為Internet上最為重要的信息發(fā)布與交互方式,據(jù)美國(guó)因特網(wǎng)監(jiān)制公司Netcraft發(fā)布的數(shù)據(jù)表明,截止20XX2月底,全球互聯(lián)網(wǎng)網(wǎng)站數(shù)量超過1.6億,達(dá)162662053,較前一個(gè)月增加了450萬。網(wǎng)頁數(shù)量也達(dá)到百億級(jí)別。1.2研究意義由于WWW的迅猛發(fā)展,越來越多的信息可供用戶在網(wǎng)上查詢,但是信息膨脹和豐富的同時(shí),加大了用戶尋求自己最需要信息的負(fù)擔(dān),特別是目前用戶對(duì)查詢信息提出了新的需求,除了需要高效率,高準(zhǔn)確性等要求外,用戶有時(shí)需要在互聯(lián)網(wǎng)上搜索與一篇文檔〔例如txt文件、word文檔等或一張圖片最相關(guān)、最相似的信息,這就給目前的技術(shù)提出了新的挑戰(zhàn),而與文本相似度有關(guān)的算法應(yīng)運(yùn)而生。同時(shí),我國(guó)學(xué)術(shù)論文抄襲現(xiàn)象頻頻發(fā)生,非法復(fù)制等文檔侵權(quán)問題也比較嚴(yán)重。在如今的高校中,學(xué)生的論文抄襲、作業(yè)抄襲現(xiàn)象更是屢見不鮮。學(xué)生日益對(duì)自己的作業(yè)馬虎了事,隨便抄抄了事。尤其是對(duì)于有些枯燥的專業(yè)課程通常要進(jìn)行實(shí)驗(yàn)并撰寫電子實(shí)驗(yàn)報(bào)告,這就給不想動(dòng)手動(dòng)腦的同學(xué)以可乘之機(jī)。這種現(xiàn)象長(zhǎng)此發(fā)展下去,不僅老師不能把握學(xué)生專業(yè)課程學(xué)習(xí)的情況,而且學(xué)生學(xué)習(xí)的積極性也會(huì)嚴(yán)重下降,抄襲的風(fēng)氣將影響到整個(gè)高校的學(xué)術(shù)氛圍。那么文本進(jìn)行相似度檢測(cè)應(yīng)用就成了眼下一個(gè)現(xiàn)實(shí)的需求。1.3國(guó)內(nèi)外研究現(xiàn)狀1.3.1國(guó)外文本相似度基本研究狀況目前,國(guó)內(nèi)外有很多學(xué)者在研究文本相似度計(jì)算問題并且已經(jīng)有很多文本相似度模型被提出并得到廣泛應(yīng)用,如字符串相似度,文檔結(jié)構(gòu)相似度以及統(tǒng)計(jì)相似度等模型。字符串相似度模型將文檔構(gòu)成的基本單位視為字符串,通過將一個(gè)字符串轉(zhuǎn)換為另一個(gè)字符串的替換、插入和刪除操作次數(shù)或最大匹配字符串來計(jì)算相似度,如Levenshtein距離和Likelt方法。Nirenberg等也提出了兩種串匹配的方法,即更規(guī)范的"切塊+匹配+重組"方法和整句級(jí)匹配的方法。這兩種方法所采用的相似度衡量機(jī)制都是詞組合法。該系統(tǒng)的相似度計(jì)算采用罰分制,兩個(gè)句子匹配所得到的總罰分值由句子中每個(gè)對(duì)應(yīng)單詞對(duì)的比較所得的罰分組合而成。文檔結(jié)構(gòu)相似度模型通過文檔結(jié)構(gòu)上的相似程度來計(jì)算文檔的相似度,如:Lambros等提出同時(shí)依據(jù)句子的表層結(jié)構(gòu)和內(nèi)容計(jì)算相似度的方法。在計(jì)算相似度時(shí),系統(tǒng)使用了兩級(jí)動(dòng)態(tài)規(guī)劃技術(shù),應(yīng)用動(dòng)態(tài)規(guī)劃算法允許在兩個(gè)長(zhǎng)度不同的句子之間計(jì)算語句相似度。統(tǒng)計(jì)相似度模型:如GerardSalton和McGill于早期提出的向量空間模型,他的思想是把文檔簡(jiǎn)化為以特征項(xiàng)的權(quán)重為分量的向量表示,通過詞頻統(tǒng)計(jì)與向量降維處理來計(jì)算相似度。基于向量的文本相似度計(jì)算方法是目前主流的文本相似度計(jì)算方法,該方法將要比較相似度的文本根據(jù)文本中的詞語將文本映射為n維空間向量,然后通過比較向量間的關(guān)系來確定文本間的相似度,其中最常見的方式是計(jì)算空間向量間的余弦值,但傳統(tǒng)向量空間模型就利用文本而不是用詞來表示詞語之間的關(guān)系?,F(xiàn)在研究的主流方向就是基于空間向量模型。除了以上的模型以后還有一些其他方法被提出和發(fā)展。如:挪威Agdcr大學(xué)的VladimirOleshchuk等人提出基于本體的文本相似度比較方法,將本體論引入了文本相似度計(jì)算,它能計(jì)算文本的語義相似度。此外還有學(xué)者在研究句子間相似度的計(jì)算,如哥倫比亞大學(xué)的CarbonellJ.等人的最大邊緣相關(guān)的MMR方法。1.3.2國(guó)內(nèi)文本相似度研究情況在國(guó)內(nèi),國(guó)內(nèi)學(xué)者盤謙紅、王炬提出利用屬性論計(jì)算文本相似度,建立了文本屬性重心剖分模型,通過坐標(biāo)點(diǎn)與坐標(biāo)點(diǎn)的距離計(jì)算關(guān)鍵字與關(guān)鍵字的相關(guān)性,通過坐標(biāo)點(diǎn)與單純形的關(guān)系計(jì)算關(guān)鍵詞與文本的相關(guān)度。張煥炯、王國(guó)勝、鐘義信〔2001提出了基于漢明距離的文本相似度計(jì)算,該方法提出了漢明碼的概念。與其他的文本相似度計(jì)算公式相比較,因?yàn)樵摲椒ㄖ皇抢媚?加等運(yùn)算,其方便性是不言而喻的,他完全避開了諸如在歐式空間中求相似度的大量乘法運(yùn)算,因此,可以較大的提高速度。其次,它跳出了傳統(tǒng)的借用空間的理念,而是用碼字的方式來表征文本信息的特征,可以不僅限于關(guān)鍵字等孤立的信息,這為聯(lián)合的描述文本的信息提供了可能。1.4開發(fā)語言JAVA語言。JAVA是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,是由SunMicrosystems公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(tái)〔即JavaEE,JavaME,JavaSE的總稱。Java自面世后就非常流行,發(fā)展迅速,對(duì)C++語言形成了有力沖擊。Java技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。選擇JAVA作為開發(fā)語言,一方面是因?yàn)樽约簩?duì)這種語言比較熟知,另一方面是因?yàn)樗拇_有著一些優(yōu)于其他語言的特點(diǎn):<1>Java是簡(jiǎn)單的Java與C++極為相似,但卻簡(jiǎn)單得多。高級(jí)編程語言的所有特性中,不是絕對(duì)需要的都已刪去了。例如,Java沒有算符過載、標(biāo)題文件、預(yù)處理、指針運(yùn)算、結(jié)構(gòu)、聯(lián)合、多維數(shù)組、模板及隱式類型變換。<2>Java是編譯型的當(dāng)運(yùn)行Java程序時(shí),它首先被編譯成字節(jié)代碼。字節(jié)代碼非常類似于機(jī)器指令,所以Java程序非常高效。然而,字節(jié)代碼并不專對(duì)一種特定的機(jī)器,所以Java程序無需重新編譯便可在眾多不同的計(jì)算機(jī)上執(zhí)行。<3>Java是可移植的Java程序是一次編譯,處處運(yùn)行。所以Java的移植卻很容易,而且不需要進(jìn)行重新編譯。<4>Java是健全的Java程序不可能造成計(jì)算機(jī)崩潰。Java系統(tǒng)仔細(xì)檢測(cè)對(duì)內(nèi)存的每次訪問,確認(rèn)它是合法的,而且不致引起任何問題。不過,即使Java程序也可能有錯(cuò)誤。如果出現(xiàn)某種出乎意料之事,程序不會(huì)崩潰,而把該例外拋棄。1.5本文的主要工作和論文結(jié)構(gòu)1.5.1主要工作本文先介紹空間向量模型以及中文分詞的相關(guān)基本知識(shí),在此基礎(chǔ)上,利用Java語言對(duì)某篇TXT文檔進(jìn)行分詞、詞頻統(tǒng)計(jì)、選出關(guān)鍵詞、調(diào)用Baidu搜索網(wǎng)頁相關(guān)內(nèi)容、下載網(wǎng)頁頁面、網(wǎng)頁去標(biāo)簽獲取主題內(nèi)容、計(jì)算余弦值得出相似度,通過上述過程完成基于WEB的相似網(wǎng)頁檢測(cè)。本文的研究?jī)?nèi)容體現(xiàn)在以下四個(gè)方面:<1>VSM空間向量模型<2>中文分詞策略<3>HTML解析策略<4>計(jì)算文本相似度1.5.2論文結(jié)構(gòu)本文共分為六個(gè)章節(jié),具體章節(jié)內(nèi)容安排如下:第一章:緒論,介紹了選題背景和研究意義,然后粗略的講述了國(guó)內(nèi)外相關(guān)研究情況,最后介紹了本文的研究?jī)?nèi)容和文章結(jié)構(gòu)。第二章:系統(tǒng)原理介紹,主要介紹了系統(tǒng)需要用到的相關(guān)知識(shí)點(diǎn),例如向量空間模型、中文分詞技術(shù)、相似度的計(jì)算方式、下載網(wǎng)頁內(nèi)容并進(jìn)行解析等。第三章:系統(tǒng)分析與設(shè)計(jì),主要闡述了基于WEB相似檢測(cè)的需求和項(xiàng)目設(shè)計(jì)的思想和流程。第四章:系統(tǒng)實(shí)現(xiàn),系統(tǒng)的核心代碼和算法抽取出來進(jìn)行詳細(xì)的講解和闡述。第五章:系統(tǒng)測(cè)試,抽取一個(gè)TXT文件進(jìn)行測(cè)試,查看結(jié)果是否符合預(yù)期要求。第六章:總結(jié)與展望,總結(jié)做畢業(yè)設(shè)計(jì)過程的經(jīng)驗(yàn),吸取教訓(xùn),展望未來的生活。最后是參考文獻(xiàn)和致謝。第二章系統(tǒng)原理介紹2.1原理概述本系統(tǒng)是基于向量空間模型〔VSM來設(shè)計(jì)的。我們將一篇文檔都看成一個(gè)向量,每個(gè)詞作為向量的一個(gè)維度,而詞的頻率看成其值〔有向,即向量,這樣每篇文章的詞及其頻率就構(gòu)成了一個(gè)i維空間圖,兩個(gè)文檔的相似度就是兩個(gè)空間圖的接近程度,即它們之間夾角的大小,我們通過計(jì)算余弦系數(shù)來體現(xiàn)。計(jì)算機(jī)不會(huì)像人一樣自動(dòng)識(shí)別文檔里的每個(gè)詞,所以要對(duì)文檔進(jìn)行分詞處理,然后統(tǒng)計(jì)詞頻,最后根據(jù)余弦系數(shù)計(jì)算公式得出相似度比較結(jié)果。2.2系統(tǒng)相關(guān)知識(shí)點(diǎn)簡(jiǎn)介2.2.1向量空間模型VSM模型〔VSM:VectorSpaceModel即向量空間模型,由Salton等人于20世紀(jì)70年代提出,并成功地應(yīng)用于著名的SMART文本檢索系統(tǒng)。向量空間模型的基本思想為將文本簡(jiǎn)化為特征向量表示,將相似度計(jì)算問題簡(jiǎn)化為空間向量的運(yùn)算,由此使得問題的復(fù)雜性大大降低。該方法根據(jù)文本中的詞語將文本映射為n維空間向量,通過計(jì)算空間向量的余弦值來確定文本的相似度,即利用空間的相似性來解決文本上的相似性,直觀易懂。通過向量空間模型,文本數(shù)據(jù)就轉(zhuǎn)換成了計(jì)算機(jī)可以處理的結(jié)構(gòu)化數(shù)據(jù),兩個(gè)文檔之間的相似性問題轉(zhuǎn)變成了兩個(gè)向量之間的相似性問題。我們可以這樣來理解一下向量空間模型。對(duì)于每篇文檔來說,它都是由很多詞條組成的。對(duì)此,我們可以對(duì)文檔〔Document和其所包含的詞條〔Term之間的關(guān)系進(jìn)行一個(gè)研究。我們可以將一篇文檔看成一個(gè)向量D〔term1,term2,……,termn。這樣,假設(shè)某兩篇文檔中都出現(xiàn)了term1和term2,就可以用一個(gè)二維的坐標(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來表示這兩篇文檔。以此類推,一個(gè)搜索引擎的索引庫,可以看成是一個(gè)由詞條組成的N維向量空間。每一篇文檔均為其中的一個(gè)向量。在這種情況下,文檔之間就出現(xiàn)了特定的關(guān)系。例如,當(dāng)兩篇文檔內(nèi)容相近時(shí),它們的詞條也就差不多。因此,從邏輯上看,它們可能就會(huì)在這個(gè)向量空間中處于一種很"接近"的位置。此時(shí),"接近"真實(shí)含義指的是這兩個(gè)向量之間的夾角比較小。Term1Term2文檔1文檔2圖2-1文檔和詞條的向量空間Term1Term2文檔1文檔2圖2-1文檔和詞條的向量空間2.2.2中文分詞技術(shù)眾所周知,中文是世界上最復(fù)雜的語言之一。那么要對(duì)文本進(jìn)行相似度計(jì)算,首先就要進(jìn)行分詞處理。分詞,即將一段文本拆分成多個(gè)詞?,F(xiàn)有的分詞方式主要有單字分詞、二分法、詞典分詞。單字分詞,顧名思義即在對(duì)中文文本進(jìn)行分詞時(shí),以字為單位進(jìn)行切分。按這種方式建立索引,則索引中所有的詞條的集合就是中文漢字庫的一個(gè)子集合。字索引比較靈活,但需要復(fù)雜的單字匹配算法,以及大量的CPU運(yùn)算。二分法,即將每?jī)蓚€(gè)字當(dāng)作一個(gè)詞語進(jìn)行切分,然后建立索引。它明顯的減少了每個(gè)詞條后位置信息的長(zhǎng)度。如Lucene的CJKAnalyzer就是對(duì)中文采取二分的方式進(jìn)行分詞。本系統(tǒng)采用IKAnalyzer分詞器進(jìn)行分詞,也相當(dāng)于使用詞典分詞,是目前來講分詞比較準(zhǔn)確的一種方法,即通過構(gòu)造一個(gè)常用詞詞典來對(duì)遇到的文本進(jìn)行詞語的切分。中國(guó)科學(xué)院計(jì)算技術(shù)所研究的ICTCLAS在中文分詞領(lǐng)域是較為先進(jìn)的分詞系統(tǒng),其分詞詞典也是世界公認(rèn)的精準(zhǔn)。使用詞典分詞法在文本中匹配單詞時(shí)用到一些常用的算法:正向最大匹配算法:從左到右將待分詞文本中的幾個(gè)連續(xù)字符與詞庫匹配,如果匹配上,則切分出一個(gè)詞。逆向最大匹配算法:從被處理文檔的末端開始匹配掃描,每次取最末端的2i個(gè)字符〔i字字串作為匹配字段,若匹配失敗,則去掉匹配字段最前面的一個(gè)字,繼續(xù)匹配。其采用的分詞詞典是逆序詞典,對(duì)文檔進(jìn)行處理時(shí)先要進(jìn)行倒排處理,生成逆序文檔。有的時(shí)候,需多種方式對(duì)文本進(jìn)行切分,當(dāng)它們切分的結(jié)果相同,表示這個(gè)詞就是真正需要的詞。2.2.3TF統(tǒng)計(jì)方法TF的全稱TermFrequency,也就是詞條頻率。用數(shù)學(xué)方法來描述即某個(gè)詞語出現(xiàn)的次數(shù)除以該文檔中的詞條總數(shù)。常用于情報(bào)檢索與文本挖掘,用以評(píng)估一個(gè)詞對(duì)于一個(gè)文檔的重要程度。如今在信息科學(xué)領(lǐng)域,比較經(jīng)典的詞頻統(tǒng)計(jì)方法有基于匹配的詞頻統(tǒng)計(jì)算法和基于樹結(jié)構(gòu)的詞頻統(tǒng)計(jì)算法。對(duì)于單關(guān)鍵詞匹配算法國(guó)內(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向右移動(dòng)一個(gè)字符的位置,再依次進(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年提出,它是一個(gè)非常有效的字符串匹配算法。它的基本思想是:假設(shè)將主串中自位置i起往左的一個(gè)子串與模式進(jìn)行從右到左的匹配過程中,若發(fā)現(xiàn)不匹配,則下次應(yīng)從主串的i+dist<si>位置開始重新進(jìn)行新一輪的匹配,其效果相當(dāng)于把模式和主串向右滑過一段距離distance〔si,即跳過distance〔si個(gè)字符而無需進(jìn)行比較。基于匹配的詞頻統(tǒng)計(jì)方法,不可避免的是要對(duì)待處理的文檔進(jìn)行多次掃描。當(dāng)待處理文檔數(shù)據(jù)量比較大時(shí),這無疑是要付出更高的時(shí)間和空間代價(jià)。針對(duì)這個(gè)問題,有學(xué)者又提出了基于樹結(jié)構(gòu)的詞頻統(tǒng)計(jì)算法。其基本思想是:首先根據(jù)已有的關(guān)鍵詞集合構(gòu)建一棵查找樹,然后利用這個(gè)查找樹對(duì)文檔進(jìn)行掃描,從而進(jìn)行關(guān)鍵詞的統(tǒng)計(jì)。進(jìn)行詞頻統(tǒng)計(jì)時(shí),非常好的是每當(dāng)從文檔中讀取一個(gè)詞與查找樹比較時(shí),只需對(duì)文檔掃描一遍,則可統(tǒng)計(jì)出所有關(guān)鍵詞的信息。這種方法減少了一些不必要的匹配過程,大大提高了統(tǒng)計(jì)效率。2.2.4TF-IDF算法TF-IDF簡(jiǎn)介TF-IDF〔termfrequency–inversedocumentfrequency是一種用于資訊檢索與資訊探勘的常用加權(quán)技術(shù)。TF-IDF是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時(shí)會(huì)隨著它在語料庫中出現(xiàn)的頻率成反比下降。TF-IDF加權(quán)的各種形式常被搜尋引擎應(yīng)用,作為文件與用戶查詢之間相關(guān)程度的度量或評(píng)級(jí)。除了TF-IDF以外,因特網(wǎng)上的搜尋引擎還會(huì)使用基于連結(jié)分析的評(píng)級(jí)方法,以確定文件在搜尋結(jié)果中出現(xiàn)的順序。在一份給定的文件里,詞頻<termfrequency,TF>指的是某一個(gè)給定的詞語在該文件中出現(xiàn)的次數(shù)。這個(gè)數(shù)字通常會(huì)被歸一化〔分子一般小于分母區(qū)別于IDF,以防止它偏向長(zhǎng)的文件?!餐粋€(gè)詞語在長(zhǎng)文件里可能會(huì)比短文件有更高的詞頻,而不管該詞語重要與否。逆向文件頻率<inversedocumentfrequency,IDF>是一個(gè)詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數(shù)目除以包含該詞語之文件的數(shù)目,再將得到的商取對(duì)數(shù)得到。某一特定文件內(nèi)的高詞語頻率,以及該詞語在整個(gè)文件集合中的低文件頻率,可以產(chǎn)生出高權(quán)重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。TF-IDF主要思想如果某個(gè)詞或短語在一篇文章中出現(xiàn)的頻率TF高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。TFIDF實(shí)際上是:TF*IDF,TF詞頻<TermFrequency>,IDF反文檔頻率<InverseDocumentFrequency>。TF表示詞條在文檔d中出現(xiàn)的頻率〔另一說:TF詞頻<TermFrequency>指的是某一個(gè)給定的詞語在該文件中出現(xiàn)的次數(shù)。IDF的主要思想是:如果包含詞條t的文檔越少,也就是n越小,IDF越大,則說明詞條t具有很好的類別區(qū)分能力。如果某一類文檔C中包含詞條t的文檔數(shù)為m,而其它類包含t的文檔總數(shù)為k,顯然所有包含t的文檔數(shù)n=m+k,當(dāng)m大的時(shí)候,n也大,按照IDF公式得到的IDF的值會(huì)小,就說明該詞條t類別區(qū)分能力不強(qiáng)?!擦硪徽f:IDF反文檔頻率<InverseDocumentFrequency>是指果包含詞條的文檔越少,IDF越大,則說明詞條具有很好的類別區(qū)分能力。但是實(shí)際上,如果一個(gè)詞條在一個(gè)類的文檔中頻繁出現(xiàn),則說明該詞條能夠很好代表這個(gè)類的文本的特征,這樣的詞條應(yīng)該給它們賦予較高的權(quán)重,并選來作為該類文本的特征詞以區(qū)別與其它類文檔。這就是IDF的不足之處.在一份給定的文件里,詞頻〔termfrequency,TF指的是某一個(gè)給定的詞語在該文件中出現(xiàn)的頻率。這個(gè)數(shù)字是對(duì)詞數(shù)<termcount>的歸一化,以防止它偏向長(zhǎng)的文件。〔同一個(gè)詞語在長(zhǎng)文件里可能會(huì)比短文件有更高的詞數(shù),而不管該詞語重要與否。對(duì)于在某一特定文件里的詞語來說,它的重要性可表示為:以上式子中是該詞在文件中的出現(xiàn)次數(shù),而分母則是在文件中所有字詞的出現(xiàn)次數(shù)之和。逆向文件頻率〔inversedocumentfrequency,IDF是一個(gè)詞語普遍重要性的度量。某一特定詞語的IDF,可以由總文件數(shù)目除以包含該詞語之文件的數(shù)目,再將得到的商取對(duì)數(shù)得到:其中|D|:語料庫中的文件總數(shù):包含詞語的文件數(shù)目〔即的文件數(shù)目如果該詞語不在語料庫中,就會(huì)導(dǎo)致被除數(shù)為零,因此一般情況下使用然后某一特定文件內(nèi)的高詞語頻率,以及該詞語在整個(gè)文件集合中的低文件頻率,可以產(chǎn)生出高權(quán)重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。TF-IDF算法示例有很多不同的數(shù)學(xué)公式可以用來計(jì)算TF-IDF。這邊的例子以上述的數(shù)學(xué)公式來計(jì)算。詞頻<TF>是一詞語出現(xiàn)的次數(shù)除以該文件的總詞語數(shù)。假如一篇文件的總詞語數(shù)是100個(gè),而詞語"母牛"出現(xiàn)了3次,那么"母牛"一詞在該文件中的詞頻就是3/100=0.03。一個(gè)計(jì)算文件頻率<DF>的方法是測(cè)定有多少份文件出現(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.在某個(gè)一共有一千詞的網(wǎng)頁中"原子能"、"的"和"應(yīng)用"分別出現(xiàn)了2次、35次和5次,那么它們的詞頻就分別是0.002、0.035和0.005。我們將這三個(gè)數(shù)相加,其和0.042就是相應(yīng)網(wǎng)頁和查詢"原子能的應(yīng)用"相關(guān)性的一個(gè)簡(jiǎn)單的度量。概括地講,如果一個(gè)查詢包含關(guān)鍵詞w1,w2,...,wN,它們?cè)谝黄囟ňW(wǎng)頁中的詞頻分別是:TF1,TF2,...,TFN?!睺F:termfrequency>。那么,這個(gè)查詢和該網(wǎng)頁的相關(guān)性就是:TF1+TF2+...+TFN。TF-IDF算法深度剖析在上面的例子中,詞"的"站了總詞頻的80%以上,而它對(duì)確定網(wǎng)頁的主題幾乎沒有用。我們稱這種詞叫"應(yīng)刪除詞"〔Stopwords>,也就是說在度量相關(guān)性是不應(yīng)考慮它們的頻率。在漢語中,應(yīng)刪除詞還有"是"、"和"、"中"、"地"、"得"等等幾十個(gè)。忽略這些應(yīng)刪除詞后,上述網(wǎng)頁的相似度就變成了0.007,其中"原子能"貢獻(xiàn)了0.002,"應(yīng)用"貢獻(xiàn)了0.005。細(xì)心的讀者可能還會(huì)發(fā)現(xiàn)另一個(gè)小的漏洞。在漢語中,"應(yīng)用"是個(gè)很通用的詞,而"原子能"是個(gè)很專業(yè)的詞,后者在相關(guān)性排名中比前者重要。因此我們需要給漢語中的每一個(gè)詞給一個(gè)權(quán)重,這個(gè)權(quán)重的設(shè)定必須滿足下面兩個(gè)條件:<1>一個(gè)詞預(yù)測(cè)主題能力越強(qiáng),權(quán)重就越大,反之,權(quán)重就越小。我們?cè)诰W(wǎng)頁中看到"原子能"這個(gè)詞,或多或少地能了解網(wǎng)頁的主題。我們看到"應(yīng)用"一次,對(duì)主題基本上還是一無所知。因此,"原子能"的權(quán)重就應(yīng)該比應(yīng)用大。<2>應(yīng)刪除詞的權(quán)重應(yīng)該是零。我們很容易發(fā)現(xiàn),如果一個(gè)關(guān)鍵詞只在很少的網(wǎng)頁中出現(xiàn),我們通過它就容易鎖定搜索目標(biāo),它的權(quán)重也就應(yīng)該大。反之如果一個(gè)詞在大量網(wǎng)頁中出現(xiàn),我們看到它仍然不很清楚要找什么內(nèi)容,因此它應(yīng)該小。概括地講,假定一個(gè)關(guān)鍵詞w在Dw個(gè)網(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。假如專用詞"原子能"在兩百萬個(gè)網(wǎng)頁中出現(xiàn),即Dw=100萬,則它的權(quán)重IDF=log<500>=6.2。又假定通用詞"應(yīng)用",出現(xiàn)在五億個(gè)網(wǎng)頁中,它的權(quán)重IDF=log<2>則只有0.7。也就只說,在網(wǎng)頁中找到一個(gè)"原子能"的比配相當(dāng)于找到九個(gè)"應(yīng)用"的匹配。利用IDF,上述相關(guān)性計(jì)算個(gè)公式就由詞頻的簡(jiǎ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。這個(gè)比例和我們的直覺比較一致了。2.2.5數(shù)據(jù)降維數(shù)據(jù)降維,是詞頻統(tǒng)計(jì)中所要考慮的一個(gè)因素。當(dāng)文檔中的詞條數(shù)目很多,即向量的維度較高,那么為了提高效率,我們需要降低維度,即去除一些無關(guān)緊要的詞語,減少詞語的數(shù)量。而且采取降維的策略在一定程度上,還可以提高精度。文本特征向量降維主要有如下的兩類:<1>特征選擇:是指代去除那些不能表示信息或者表示的信息量很小的詞<從廣義上說:不存在不能表示信息或者意義的詞,否則它就沒有了存在的必要,自然這個(gè)詞就無法存在>,以提高文本相似度計(jì)算的效率并且減少?gòu)?fù)雜度,基本上可以被分為如下幾種方法:①根據(jù)單詞的IDF值來進(jìn)行判斷:當(dāng)單詞的IDF值小于一個(gè)閾值或者大于另一個(gè)閾值的時(shí)候都要去除;②根據(jù)單詞的文本頻度TF值來判斷:當(dāng)單詞的TF值小于或者大于某個(gè)給定的闕值也要去除;③根據(jù)X2統(tǒng)計(jì)量進(jìn)行判斷:其值越大,單詞與文本之間的獨(dú)立性越小,相關(guān)性越大,所以要去除X2小的詞;·④根據(jù)互信息MI來進(jìn)行判斷:<MI>越大,兩個(gè)單詞之問的關(guān)系就越強(qiáng)。其中第一種方法效果較好。<2>特征重構(gòu):是通過合并或轉(zhuǎn)化特征項(xiàng)來構(gòu)造新的特征項(xiàng),以達(dá)到降維的目的,一些文獻(xiàn)中使用的奇異值分解方法就是這種思想的一種實(shí)現(xiàn)。2.2.6相似度計(jì)算方法基于向量空間模型,我們將兩篇文檔理解為兩個(gè)向量,將它們之間的相似度理解為這兩個(gè)向量在空間上的接近程度,即它們之間的夾角。我們通過計(jì)算余弦系數(shù)來比較兩篇文章的相似度,余弦系數(shù)計(jì)算方法為,向量?jī)?nèi)積/各個(gè)向量的模的乘積,如圖2-2所示。圖2-2兩個(gè)向量余弦值的計(jì)算其中,、分別為待比較的兩個(gè)文本的特征向量,、分別為向量的第i維,n為特征向量的維數(shù)。余弦計(jì)算的好處是其值正好是一個(gè)介于0到1的數(shù),如果向量一致就是1,如果正交就是0,符合相似度百分比的特性。為了讓過程更加的簡(jiǎn)潔明了,下面舉例說明:假設(shè)共有十個(gè)詞:W1,W2,,W10,而共有三篇文章,d1,d2,d3。統(tǒng)計(jì)出文章的詞頻表,如圖2-3所示。文檔W1W2W3W4W5W6W7W8W9W10d112579d23468d3101112131415圖2-3詞頻表的統(tǒng)計(jì)結(jié)果假設(shè)計(jì)算d1和d2的文本相似度,根據(jù)圖2-2公式可得結(jié)論,如圖2-4所示。圖2-4向量余弦值的示例計(jì)算2.3系統(tǒng)實(shí)現(xiàn)思想我們將兩篇文檔當(dāng)作兩個(gè)向量,通過計(jì)算相似度來宏觀的表現(xiàn)它們的接近程度。本系統(tǒng)主要按如下的思路進(jìn)行:根據(jù)2.2節(jié)相關(guān)技術(shù)的介紹,本系統(tǒng)采用向量空間模型,主要流程可以細(xì)分為如下模塊進(jìn)行,分詞處理,詞頻統(tǒng)計(jì),選擇關(guān)鍵字調(diào)用百度搜索查詢,下載網(wǎng)頁并解析,相似度計(jì)算。注釋:分詞處理主要利用IKAnalyzer分詞器〔下面統(tǒng)一簡(jiǎn)稱為IK分詞器IKAnalyzer是一個(gè)開源的,基于java語言開發(fā)的輕量級(jí)的中文分詞工具包。從20XX12月推出1.0版開始,IKAnalyzer已經(jīng)推出了4個(gè)大版本。最初,它是以開源項(xiàng)目Luence為應(yīng)用主體的,結(jié)合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開始,IK發(fā)展為面向Java的公用分詞組件,獨(dú)立于Lucene項(xiàng)目,同時(shí)提供了對(duì)Lucene的默認(rèn)優(yōu)化實(shí)現(xiàn)。在2012版本中,IK實(shí)現(xiàn)了簡(jiǎn)單的分詞歧義排除算法,標(biāo)志著IK分詞器從單純的詞典分詞向模擬語義分詞衍化。其相關(guān)特性如下:<1>采用了特有的"正向迭代最細(xì)粒度切分算法",具有60萬字/秒的高速處理能力。<2>采用了多子處理器分析模式,支持:英文字母〔IP地址、Email、URL、數(shù)字〔日期,常用中文數(shù)量詞,羅馬數(shù)字,科學(xué)計(jì)數(shù)法,中文詞匯〔姓名、地名處理等分詞處理。對(duì)中英聯(lián)合支持不是很好,在這方面的處理比較麻煩.需再做一次查詢,同時(shí)是支持個(gè)人詞條的<3>優(yōu)化的詞典存儲(chǔ),更小的內(nèi)存占用。支持用戶詞典擴(kuò)展定義<4>針對(duì)Lucene全文檢索優(yōu)化的查詢分析器IKQueryParser;采用歧義分析算法優(yōu)化查詢關(guān)鍵字的搜索排列組合,能極大的提高Lucene檢索的命中率。第三章系統(tǒng)分析與設(shè)計(jì)3.1系統(tǒng)需求分析隨著計(jì)算機(jī)的普及和網(wǎng)絡(luò)的飛速發(fā)展,互聯(lián)網(wǎng)上以及各種電子文檔的數(shù)量以空前的速度增長(zhǎng),人們獲取知識(shí)的途徑也發(fā)生了深刻的變化。面對(duì)如此巨大的知識(shí)海洋,如何快速查找相關(guān)信息變得非常重要。如果沒有有效的組織和提取方式,普通用戶查找自己想要的信息所用的時(shí)間可能比了解信息本身所花費(fèi)的時(shí)間還長(zhǎng),這是人們無法容忍的。文本相似度是表示兩個(gè)或多個(gè)文本之間匹配程度的一個(gè)度量參數(shù),相似度大,說明文本相似程度高,反之文本相似度低。對(duì)于文本聚類、信息檢索、問答系統(tǒng)、網(wǎng)頁去重、文本分類等很多領(lǐng)域,文本相似度的有效計(jì)算問題是其進(jìn)行信息處理的關(guān)鍵。論文抄襲是一種嚴(yán)重的造假行為。當(dāng)前出現(xiàn)的各種學(xué)術(shù)造假、論文抄襲現(xiàn)象,已嚴(yán)重的影響到整個(gè)高校的學(xué)術(shù)氛圍。大學(xué)是一個(gè)要求學(xué)生獨(dú)立自主學(xué)習(xí)的地方,而現(xiàn)在越來越多的學(xué)生放慢自己的行為,對(duì)老師布置的作業(yè)抄抄了事。這樣老師既不能對(duì)學(xué)生的學(xué)習(xí)情況得到一個(gè)真實(shí)的掌握,學(xué)生學(xué)習(xí)的積極性也慢慢下降。這牽涉到的是一個(gè)誠(chéng)信問題。誠(chéng)信是社會(huì)道德的一道防線,也是大學(xué)生誠(chéng)信責(zé)任的一道防線?,F(xiàn)在這道防線岌岌可危,我們應(yīng)采取積極地措施加以保護(hù)。本課題就在網(wǎng)上搜索與已經(jīng)存在的TXT文件相似的內(nèi)容做了一個(gè)系統(tǒng)設(shè)計(jì)。系統(tǒng)一方面在理論方面進(jìn)行了一定的探究,了解了文檔相似度相關(guān)方面的知識(shí),另一方面在實(shí)際的應(yīng)用上也有一定的價(jià)值。本系統(tǒng)只是簡(jiǎn)單實(shí)現(xiàn)了基本功能,有些地方還需進(jìn)一步完善優(yōu)化,用戶可用此系統(tǒng)較為方便的搜索與自己已有文檔相似的網(wǎng)頁內(nèi)容,老師也可以將此作為檢查學(xué)生抄襲情況的工具,盡量減少學(xué)生抄襲的念頭。3.2系統(tǒng)功能概述3.2.1系統(tǒng)流程首先,用戶選擇一個(gè)要查詢的TXT文件,確定TXT文件所在的文件夾,然后是進(jìn)行文檔分詞,統(tǒng)計(jì)詞頻,得到一個(gè)HashMap;排序后,選擇所需數(shù)量的關(guān)鍵詞后調(diào)用Baidu搜索相關(guān)的網(wǎng)頁并下載;整理并去掉網(wǎng)頁標(biāo)簽得到純文本內(nèi)容,提取內(nèi)容存入到電腦;最后計(jì)算得到兩篇文章的相似度。比較各個(gè)網(wǎng)頁與原TXT文件的相似度,相似度越接近1則表示越相近;相似度越接近0則表示內(nèi)容越來越不匹配。3.2.2功能模塊介紹本課題設(shè)計(jì)的基于WEB的相似網(wǎng)頁檢測(cè)主要是進(jìn)行一個(gè)理論的研究,可以搜索與TXT文件相似的網(wǎng)頁內(nèi)容,每一次檢測(cè)的對(duì)象都是放在同一文件夾下,然后對(duì)文檔進(jìn)行相似度的檢測(cè)。另外,本系統(tǒng)對(duì)圖片、表格等是不進(jìn)行識(shí)別和檢測(cè)的。根據(jù)實(shí)際的需求,基于WEB的相似網(wǎng)頁檢測(cè)可以分成四個(gè)功能模塊,如圖3-1所示。基于WEB的相似網(wǎng)頁檢測(cè)基于WEB的相似網(wǎng)頁檢測(cè)分詞統(tǒng)計(jì)模塊調(diào)用Baidu查詢模塊下載網(wǎng)頁解析模塊計(jì)算文本相似度模塊圖3-1系統(tǒng)模塊圖各模塊實(shí)現(xiàn)的功能如下:<2>分詞統(tǒng)計(jì)模塊此模塊實(shí)現(xiàn)文本分詞,并對(duì)分詞進(jìn)行統(tǒng)計(jì)。選擇TXT文件所在的文件夾,讀取文件內(nèi)容存為字符串,利用IK分詞器將字符串〔也就是文本內(nèi)容進(jìn)行分詞,并且統(tǒng)計(jì)分詞出現(xiàn)的次數(shù),最后計(jì)算詞頻。<3>調(diào)用Baidu查詢模塊此模塊實(shí)現(xiàn)調(diào)用Baidu對(duì)關(guān)鍵詞進(jìn)行網(wǎng)絡(luò)查詢。其中百度的查詢代碼是[此處為搜索的詞語]&tn=monline_4_dg"抽取搜索的網(wǎng)頁中的百度鏈接所用的方法是使用正則表達(dá)式://baidu/link\\?url=\\w+<\\S+>?\"<4>下載網(wǎng)頁進(jìn)行解析模塊此模塊對(duì)下載的模塊進(jìn)行解析。下載下來的內(nèi)容為HTML語言,而我們只需要的是里面的文字內(nèi)容,標(biāo)簽以及標(biāo)簽中的嵌套都不是我們所需。得到的純文本內(nèi)容寫入文件。<5>文本相似度計(jì)算模塊此模塊實(shí)現(xiàn)對(duì)向量的計(jì)算,得出文本相似度。文件通過上述過程都轉(zhuǎn)換成了計(jì)算機(jī)可以計(jì)算的向量空間,調(diào)用計(jì)算向量的函數(shù)得到一個(gè)介于0~1的結(jié)果。通過結(jié)果可以判定兩個(gè)文本的相似程度。3.3系統(tǒng)性能要求<1>系統(tǒng)設(shè)計(jì)的合理性在設(shè)計(jì)系統(tǒng)時(shí)要考慮實(shí)際的系統(tǒng)性能和硬件要求,不能忽視所處環(huán)境,也不能一味地追求新的設(shè)計(jì)方法,要保證系統(tǒng)實(shí)現(xiàn)的合理性。<2>系統(tǒng)的簡(jiǎn)單易用性本系統(tǒng)側(cè)重于對(duì)相似度檢測(cè)進(jìn)行一個(gè)理論的研究,所以并不需要過于美觀、應(yīng)用的界面,作為用戶最終需要的只是兩篇文檔的相似度比較結(jié)果。因此設(shè)計(jì)時(shí)本著"簡(jiǎn)單易用"的原則,方便用戶操作。<3>系統(tǒng)的可靠性要比較的兩篇文檔,可能是數(shù)據(jù)量很大的文本,就要考慮到系統(tǒng)運(yùn)行的效率,采取相應(yīng)的算法加以優(yōu)化,盡可能的保證系統(tǒng)高性能有效的運(yùn)行。第四章系統(tǒng)實(shí)現(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分詞器的核心類。它是獨(dú)立于Lucene的Java分詞器實(shí)現(xiàn)。當(dāng)需要在Lucene以外的環(huán)境中單獨(dú)使用IK中文分詞組件時(shí),可以使用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類,來改變?cè)~典配置。publicsynchronizedLexemenext<>throwsIOException說明:讀取分詞器切分出的下一個(gè)語義單元,如果返回值為null,表示分詞器已經(jīng)結(jié)束。返回值:Lexeme語義單元對(duì)象,即相當(dāng)于Lucene的詞元對(duì)象Token說明:這是IK分詞器的語義單元對(duì)象,相當(dāng)于Lucene中的Token詞元對(duì)象。由于IK被設(shè)計(jì)為獨(dú)立于Lucene的Java分詞器實(shí)現(xiàn),因此它需要Lexeme來代表分詞的結(jié)果。publicintgetBeginPosition<>說明:獲取語義單元的起始字符在文本中的位置返回值:int,語義單元相對(duì)于文本的絕對(duì)起始位置publicintgetEndPosition<>說明:獲取語義單元的結(jié)束字符的下一個(gè)位置返回值:int,語義單元相對(duì)于文本的絕對(duì)終止位置的下一個(gè)字符位置publicintgetLength<>說明:獲取語義單元包含字符串的長(zhǎng)度返回值:int,語義單元長(zhǎng)度=getEndPosition–getBeginPositionpublicStringgetLexemeText<>說明:獲取語義單元包含字符串內(nèi)容返回值:String,語義單元的實(shí)際內(nèi)容,即分詞的結(jié)果4.2.2核心代碼解析privatestaticMap<String,Integer>segString<Stringcontent>{//分詞Readerinput=newStringReader<content>;//智能分詞關(guān)閉〔對(duì)分詞的精度影響很大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ù)主要實(shí)現(xiàn)分詞功能,參數(shù)是讀取TXT文件后存入變量中的字符串。利用IK分詞器循環(huán)對(duì)字符串進(jìn)行分詞,得到的分詞存入到HashMap中。其中HashMap鍵值對(duì)中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ù)實(shí)現(xiàn)詞頻的統(tǒng)計(jì)。參數(shù)為通過分詞函數(shù)得到的〔分詞,出現(xiàn)次數(shù)鍵值對(duì)的HashMap。而詞頻的計(jì)算方式為該詞出現(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ù)實(shí)現(xiàn)對(duì)一個(gè)文件夾下所有的TXT文件進(jìn)行詞頻的統(tǒng)計(jì)。該函數(shù)的參數(shù)是一個(gè)文件夾路徑名〔注意并非文件名,遍歷讀取文件夾下面的文件內(nèi)容后用上面所說的segString函數(shù)對(duì)文件內(nèi)容進(jìn)行分詞然后存儲(chǔ)到Map中。返回值是一個(gè)嵌套的Map,Map<String,Map<String,Double>>中的前一個(gè)String代表文件路徑名,后一個(gè)Map中的String代表一個(gè)分詞,Double即是詞頻。publicstaticMap<String,Integer>getMostFrequentWords<intnum,Map<String,Integer>words>{ Map<String,Integer>keywords=newLinkedHashMap<String,Integer><>;intcount=0; //詞頻統(tǒng)計(jì) 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ù)實(shí)現(xiàn)功能是獲取最高詞頻的分詞,其中需要的最高詞頻的分詞個(gè)數(shù)可以自己選擇。其中排序算法用到了Java集合中的Collections.sort方法對(duì)list排序的方法。其中一種是list中的對(duì)象實(shí)現(xiàn)Comparable接口,另一種是根據(jù)Collections.sort重載方法來實(shí)現(xiàn),本文采取后一種方式排序。值得注意的是后一種方式需要實(shí)現(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ù)主要實(shí)現(xiàn)了HTML去掉標(biāo)簽的功能,為了得到我們需要的網(wǎng)頁內(nèi)容,我們需要對(duì)下載的HTML代碼進(jìn)行去標(biāo)簽處理。去除腳本語言<script>和</script>以及樣式<style>和</style>間的內(nèi)容。第五章系統(tǒng)測(cè)試5.1文章分詞測(cè)試選擇需要進(jìn)行分詞的文件,我選擇的測(cè)試文件為D:\\text\\LOLtEXT,測(cè)試結(jié)果如圖5-1所示。圖5-1文章分詞測(cè)試結(jié)果結(jié)果顯示了D:\\text\\LOLtEXT文件夾下的"新建文本文檔.txt"文件的分詞結(jié)果,以及詞頻tf的統(tǒng)計(jì)。由于分詞比較多,上圖只是部分截圖。5.2獲取關(guān)鍵字測(cè)試通過以上分詞以及結(jié)果統(tǒng)計(jì)后,我們得到了文章的所有分詞,此時(shí)我們需要抽取
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石材供應(yīng)購(gòu)銷合同
- 食品材料采購(gòu)合同書
- 酒駕者自律書
- 智能化濕地監(jiān)控系統(tǒng)招標(biāo)
- 花卉育苗合作方案
- 巖棉板采購(gòu)合同示例
- 青春守護(hù)堅(jiān)守底線抵制早戀
- 代理合同補(bǔ)充協(xié)議要點(diǎn)
- 簡(jiǎn)易分包合同勞務(wù)部分
- 催辦房屋買賣合同辦理事宜
- 老年人睡眠障礙的護(hù)理(PPT課件)
- 會(huì)陰阻滯麻醉完整版PPT課件
- 《家庭禮儀》PPT課件
- 應(yīng)聘人員面試登記表(應(yīng)聘者填寫)
- T∕CAAA 005-2018 青貯飼料 全株玉米
- s鐵路預(yù)應(yīng)力混凝土連續(xù)梁(鋼構(gòu))懸臂澆筑施工技術(shù)指南
- 撥叉831006設(shè)計(jì)說明書
- 程序語言課程設(shè)計(jì)任意兩個(gè)高次多項(xiàng)式的加法和乘法運(yùn)算
- 石油鉆井八大系統(tǒng)ppt課件
- 北師大版二年級(jí)數(shù)學(xué)上冊(cè)期末考試復(fù)習(xí)計(jì)劃
- 人教PEP版六年級(jí)英語上冊(cè)《Unit4_B_Let’s_learn教學(xué)設(shè)計(jì)》
評(píng)論
0/150
提交評(píng)論