裴志松
(長(zhǎng)春工業(yè)大學(xué)人文信息學(xué)院,長(zhǎng)春130122)
畢業(yè)論文是本科人才培養(yǎng)的重要實(shí)踐性教學(xué)環(huán)節(jié),也是學(xué)士學(xué)位評(píng)定的重要依據(jù)。但是隨著互聯(lián)網(wǎng)的普及,網(wǎng)絡(luò)資源方便易得,畢業(yè)論文成段復(fù)制也給學(xué)生的抄襲帶來(lái)了極大的方便。本文研究和分析了開(kāi)源的搜索引擎工具Lucene的原理,將Lucene技術(shù)應(yīng)用于畢業(yè)論文選題系統(tǒng)中,對(duì)上傳論文的相似性進(jìn)行檢測(cè),及時(shí)發(fā)現(xiàn)抄襲論文,防止學(xué)生抄襲,進(jìn)而提高論文質(zhì)量。
Lucene是Apache軟件基金會(huì)Jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開(kāi)放源代碼的全文檢索引擎工具包。Lucene有兩個(gè)主要的服務(wù):索引和檢索,兩者任務(wù)是相互獨(dú)立的。Lucene提供了豐富的API,可以與存儲(chǔ)在索引中的信息方便地交互。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便地在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,這使得開(kāi)發(fā)人員可以根據(jù)需要對(duì)它們進(jìn)行擴(kuò)展。在實(shí)際應(yīng)用中,Lucene只是一個(gè)java.jar包。即若想讓Lucene真正起作用,還需在其基礎(chǔ)上做一些必要的二次開(kāi)發(fā)[1]。
Lucene的系統(tǒng)由基礎(chǔ)結(jié)構(gòu)封裝、索引核心、對(duì)外接口3大部分組成[2],如圖1所示。
圖1 Lucene體系結(jié)構(gòu)
由圖1所示Lucene體系結(jié)構(gòu)可以看出,Lucene代碼的組織結(jié)構(gòu)主要包括7個(gè)包,每個(gè)包都完成特定的功能[3],如表1所示。
Lucene的核心技術(shù)包括分詞技術(shù)、倒排索引技術(shù)和檢索技術(shù)。
表1 Lucene包結(jié)構(gòu)功能表
1.3.1 分詞技術(shù)
Lucene中所包含的文本分析接口不依賴任何文件格式及語(yǔ)言,索引器若要?jiǎng)?chuàng)建索引文件只需獲取到Token流即可。因?yàn)長(zhǎng)ucene具有良好的可擴(kuò)展性,用戶若要實(shí)現(xiàn)中文檢索功能只需擴(kuò)展Lucene中所包含的語(yǔ)言及詞法分析接口[4]。
1.3.2 倒排索引技術(shù)
Lucenc使用了眾所周知的索引結(jié)構(gòu):倒排索引。因?yàn)橥ǔK饕敲枋瞿澄臋n包含了某詞項(xiàng)。但是用戶查詢是通過(guò)詞項(xiàng)來(lái)查找文檔,需要遍歷所有文檔才能找到包含該詞項(xiàng)的文檔。因此,如果以詞項(xiàng)為中心,記錄每個(gè)詞項(xiàng)出現(xiàn)的文檔,就能更有效率地完成查詢過(guò)程。
Lucene索引index由若干段(segment)組成,每一段由若干的文檔(document)組成,每一個(gè)文檔由若干的域(field)組成,每一個(gè)域由若干的項(xiàng)(term)組成。項(xiàng)是最小的索引概念單位,它直接代表了一個(gè)字符串及其在文件中的位置、出現(xiàn)次數(shù)等信息。域是一個(gè)關(guān)聯(lián)的元組,由一個(gè)域名和一個(gè)域值組成。文檔是提取了某個(gè)文件中的所有信息之后的結(jié)果,這些組成了段,或者稱為一個(gè)子索引。子索引可以組合為索引,也可以合并為一個(gè)新的包含了所有合并項(xiàng)內(nèi)部元素的子索引。我們可以清楚地看出Lucene的索引結(jié)構(gòu)在概念上即為傳統(tǒng)的倒排索引結(jié)構(gòu)。
1.3.3 檢索技術(shù)
當(dāng)用戶提交查詢請(qǐng)求后,檢索程序會(huì)從索引數(shù)據(jù)庫(kù)中找出所有符合關(guān)鍵詞的相關(guān)文檔。按照現(xiàn)成的相關(guān)度數(shù)值進(jìn)行排序,因?yàn)楦撽P(guān)鍵詞相關(guān)的所有文檔早已計(jì)算好。相關(guān)度越高的數(shù)據(jù),排名就會(huì)越靠前。最后將搜索結(jié)果頁(yè)面的內(nèi)容摘要、鏈接地址等內(nèi)容組織起來(lái)呈現(xiàn)給用戶。這個(gè)過(guò)程就是檢索的基本流程,包括查詢?cè)~的預(yù)處理、文本索引庫(kù)匹配、相似度和排序計(jì)算、文檔結(jié)果排重和生成結(jié)果頁(yè)。
畢業(yè)論文選題系統(tǒng)除了包含教師出題、學(xué)生選題、教師審核、學(xué)生上傳論文等基本功能外,還具有論文檢測(cè)功能。論文檢測(cè),就是對(duì)自然語(yǔ)言文本進(jìn)行相似度計(jì)算,在指定論文庫(kù)中找出兩兩相似的論文。論文檢測(cè)主要包括抄襲的界定、倒排索引、隨機(jī)特征碼提取、針對(duì)提取的特征碼進(jìn)行搜索、相似度計(jì)算并排序等過(guò)程。該檢測(cè)所有排序后的結(jié)果均以超鏈接方式顯示,檢測(cè)人員可通過(guò)超鏈接直接打開(kāi)論文。本系統(tǒng)中的論文檢測(cè)是基于Lucene工具包進(jìn)行索引與檢索并進(jìn)行相似度計(jì)算的。
抄襲很難用一個(gè)量化指標(biāo)來(lái)確定,目前比較通用的判斷方法是:如果文本有10%的內(nèi)容相似,即認(rèn)定為抄襲。但是在教學(xué)領(lǐng)域,考慮到學(xué)生們論文的書(shū)寫水平和查找參考資料的途徑,本系統(tǒng)將相似度閾值暫定為20%,日后可根據(jù)實(shí)際情況設(shè)定合適的閾值。本系統(tǒng)只針對(duì)字面上的抄襲進(jìn)行判定,無(wú)法識(shí)別對(duì)文檔思想抄襲的情況。系統(tǒng)的判斷結(jié)果僅僅作為一種建議,最后由系統(tǒng)管理員對(duì)是否抄襲進(jìn)行確認(rèn)。
Lucene的檢索原理是搜索索引,是一種典型的用空間換時(shí)間的做法。檢索的時(shí)候,需要先對(duì)檢索內(nèi)容建立索引,檢索詞只在索引上進(jìn)行搜索。所建立的索引是倒排索引,也就是針對(duì)關(guān)鍵詞,記錄該關(guān)鍵詞出現(xiàn)的位置、次數(shù)、關(guān)鍵詞所對(duì)應(yīng)的文件名等信息,這樣能快速得到檢索結(jié)果。相對(duì)于檢索速度得到的回報(bào),所付出的空間代價(jià)是微不足道的,因?yàn)槲谋疚募加玫拇疟P空間少,而索引文件大概只占內(nèi)容大小的30%。主要代碼:
采用隨機(jī)特征碼提取算法,提取特征碼。該算法將隨機(jī)算法和特征碼向量聚類算法相結(jié)合,利用對(duì)文檔某些位置的詞串進(jìn)行抽樣來(lái)發(fā)現(xiàn)相似的論文。通常特征碼會(huì)選取多個(gè),每個(gè)特征碼的取位是隨機(jī)數(shù),而特征碼長(zhǎng)度固定[5]。
由于畢業(yè)論文文章較長(zhǎng),且題目相似性較大,因此特征碼選取不能太少,否則,大量文章的檢索關(guān)鍵詞相差不多,會(huì)造成很高的誤判率。特征碼長(zhǎng)度L即要能區(qū)分不同論文,又要考慮到論文間的相似性,因此L一般不小于10個(gè)詞。特征碼由一系列詞串組成,從選取位置自左向右,忽略大小寫與標(biāo)點(diǎn)。
特征碼選取的位置可以是普通段落也可以是標(biāo)題或關(guān)鍵詞等重要位置。特征碼首詞位置隨機(jī)產(chǎn)生,即隨機(jī)數(shù)是在(SminSmax)之間的整數(shù)。由于特征碼選取的位置對(duì)文章檢索意義有較大區(qū)別,因此采用特征碼位置具有不同權(quán)值來(lái)區(qū)分其檢索的關(guān)鍵性。
當(dāng)抽取一定數(shù)量和長(zhǎng)度的特征碼后,對(duì)所有特征碼進(jìn)行組合,構(gòu)成特征向量。Lucene將特征向量在記錄中出現(xiàn)的次數(shù)、頻率、位置的映射來(lái)檢索,大大提高檢索效率。同時(shí),Lucene使用了一套非常優(yōu)秀的評(píng)分機(jī)制來(lái)對(duì)檢索出的文檔進(jìn)行相似性排序。這套評(píng)分機(jī)制綜合了檢索詞的詞頻、逆文檔頻率、激勵(lì)因子(權(quán)重)等因素來(lái)衡量文檔間的相似性,根據(jù)預(yù)先設(shè)定好的閾值進(jìn)行判斷,將相似度大于閾值的論文判定為抄襲論文,以使結(jié)果更為合理。搜索分為以下4個(gè)部分[6]:
(1)計(jì)算特征碼詞串在各個(gè)索引的得分,排序得分確定需要查詢的索引集合。選擇超過(guò)特定閾值的簇或者根據(jù)得分排序選取特定數(shù)目的簇。假設(shè)特征碼詞串為Q={tq1,tq2,……tqk},索引簇index-1的簇心PC={tq1:w1,tq2:w2,……tqk:wk}。根據(jù)式(1)計(jì)算特征碼詞串在索引中評(píng)分
(2)計(jì)算各特征碼的全局文檔頻率DF值然后再計(jì)算全局IDF,主要代碼如下:
(3)IndexSearcher是Lucene搜索中最主要的類,Similarity類會(huì)調(diào)用IndexSearch中的統(tǒng)計(jì)函數(shù)來(lái)獲取特征碼的DF值和文檔總數(shù),本文方法繼承并覆蓋IndexSearcher中相應(yīng)的方法docFreq()和maxDoc(),分別返回對(duì)應(yīng)的全局IDF值和文檔數(shù),主要代碼如下:
實(shí)驗(yàn)的論文數(shù)據(jù)來(lái)自2009級(jí)畢業(yè)生的489篇畢業(yè)論文。下面用傳統(tǒng)的文本聚類與本文提出的基于Lucene的隨機(jī)特征碼算法進(jìn)行論文抄襲對(duì)比試驗(yàn),用以確定這2種方法在論文抄襲識(shí)別中的效果,見(jiàn)表2。試驗(yàn)所用的計(jì)算機(jī)配置為CPU2.91,3G內(nèi)存。
表2 兩種方法檢測(cè)雷同的比較
實(shí)驗(yàn)表明,隨機(jī)特征碼算法在查準(zhǔn)率和查全率上均有較好結(jié)果,且算法隨著數(shù)據(jù)量的增加基本呈線性結(jié)構(gòu),具有較好的時(shí)間復(fù)雜度。
針對(duì)畢業(yè)論文可能出現(xiàn)的抄襲現(xiàn)象,本文探討了基于Lucene的畢業(yè)論文檢測(cè)方法。在使用Lucene進(jìn)行檢索時(shí),采用隨機(jī)特征碼提取算法,降低了偶然性,提高抄襲檢測(cè)的查全率和查準(zhǔn)率。而且該檢測(cè)方法復(fù)雜性為線性,適合大批量論文的抄襲檢測(cè)。
需要說(shuō)明的是本文提出的檢測(cè)方法只能針對(duì)字面抄襲現(xiàn)象,對(duì)于思想抄襲無(wú)法進(jìn)行檢測(cè)。同時(shí),本文只能認(rèn)定某篇論文為疑似抄襲,即起到一定的篩選和提示作用,最終確定是否為抄襲還需人工慎重辨別。
[1]李永春,丁華福.Lucene的全文檢索的研究與應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(2):13-15.
[2]管建和,甘劍峰.基于Lucene全文檢索引擎的應(yīng)用研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(2):489-491.
[3]Gospodnetic O,Hatcher E.Lucene in action[M].[s.l.]:Marrning Publications Co,2005.
[4]周鳳麗,林曉麗.基于Lucene的Web搜索引擎的研究和實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,1(22):140-142.
[5]秦穎,文秋芳,梁茂成.應(yīng)用隨機(jī)特征碼檢測(cè)雷同譯文[J].外語(yǔ)電化教學(xué),2009,11(130):14-17.
[6]馮汝偉,謝強(qiáng),丁秋林.基于文本聚類與分布式Lucene的知識(shí)檢索[J].計(jì)算機(jī)應(yīng)用,2013,33(1):186-188.