一種海量源碼分析檢索的新方法,搜索引擎論文_第1頁(yè)
一種海量源碼分析檢索的新方法,搜索引擎論文_第2頁(yè)
一種海量源碼分析檢索的新方法,搜索引擎論文_第3頁(yè)
一種海量源碼分析檢索的新方法,搜索引擎論文_第4頁(yè)
一種海量源碼分析檢索的新方法,搜索引擎論文_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

一種海量源碼分析檢索的新方法,搜索引擎論文代碼的重用性在軟件工程領(lǐng)域是一個(gè)很重要的課題。通過面向?qū)ο蠓治觥⒛K化編程,開發(fā)者能夠很大程度地提升代碼的重用性。但在詳細(xì)編碼時(shí),仍然會(huì)碰到很多在方式方法層面上需要重用的情況??紤]如尋找一段可直接使用的尋路算法,或者是矩陣打包算法。這些具有特定功能的源碼在當(dāng)前通過關(guān)鍵字搜索的方式下很難在海量源碼中被搜索到。原因有3個(gè):1)源碼中變量名的命名法通常使用縮寫,并以大寫字母進(jìn)行分詞,如preNode,inRect等,而用戶進(jìn)行搜索輸入的關(guān)鍵字更偏向自然語言,如previousnode,inputrect。這導(dǎo)致很多源碼無法通過關(guān)鍵字匹配算法匹配。2)在Sourceforge或者Github即便存在匹配的關(guān)鍵字,更多的搜索結(jié)果是頭文件或接口,很少有實(shí)際可用的源碼。3)自然語言存在同義詞問題,語義相近的源碼會(huì)由于無法被字符串匹配而錯(cuò)過。如用戶輸入drawnode,draw(vertex[]v)就不會(huì)被搜索到。文獻(xiàn)通過以語義網(wǎng)絡(luò)為文本關(guān)鍵字建立近義詞索引的方式方法,改善了文本搜索問題中近義詞無法被關(guān)鍵字匹配算法所匹配的問題。本文將該方式方法運(yùn)用于源碼搜索,并結(jié)合傳統(tǒng)的程序分析技術(shù),提出一種海量源碼分析的新方式方法,解決上文提到的源碼搜索碰到的3方面問題。1、相關(guān)工作1.1基于關(guān)鍵字的海量源碼搜索引擎?zhèn)鹘y(tǒng)源碼搜索引擎采用關(guān)鍵字匹配的算法,如Github的代碼搜索服務(wù),其優(yōu)勢(shì)是搜索迅速,能夠用通用的文本搜索引擎檢索源碼,而缺陷如引言所述,無法匹配源碼中的縮寫,以及搜索結(jié)果大部分是無數(shù)據(jù)流的方式方法聲明。1.2基于自然語言的源碼定位EmilyHill在基于自然語言的源碼定位方面做了很多建設(shè)性的工作。其主要目的為了解決軟件開發(fā)經(jīng)過中由于缺少文檔而導(dǎo)致的軟件維護(hù)困難問題,幫助開發(fā)者更方便地定位系統(tǒng)模塊,了解系統(tǒng)構(gòu)造。其核心思想是通過分析制定項(xiàng)目,為項(xiàng)目中的標(biāo)識(shí)符建立源碼索引,如strtPt:startpoint,srcNode:sourcenode。最后通過用戶輸入的自然語言詞素與標(biāo)識(shí)符拓展后的詞素進(jìn)行匹配到達(dá)源碼定位的目的。2、分析及搜索方式方法描繪敘述本文將EmilyHill的自然語言源碼定位應(yīng)用于海量數(shù)據(jù),并構(gòu)建一個(gè)包含海量源碼變量使用關(guān)系與詞素拓展集的數(shù)據(jù)庫(kù)。在這里之上運(yùn)用關(guān)鍵字匹配算法定位相關(guān)源代碼。2.1源碼identify縮寫拓展到自然語言單詞本文提出一種樹狀單詞樹用以解決將標(biāo)識(shí)符從縮寫到完好詞素的拓展算法。如此圖1所示。構(gòu)造完成的單詞樹是一種包含所有英語詞素的樹狀數(shù)據(jù)構(gòu)造,華而不實(shí)每個(gè)節(jié)點(diǎn)有且僅有一個(gè)字符信息,并附帶標(biāo)志位isWord,華而不實(shí)自頂向下的途徑表示一個(gè)詞素序列,當(dāng)節(jié)點(diǎn)上isWord被標(biāo)記時(shí),代表途徑到此為止構(gòu)成的序列是一個(gè)完好詞素。圖1以.作為完好詞素標(biāo)記。以下為節(jié)點(diǎn)數(shù)據(jù)構(gòu)造的定義:如此圖2所示,對(duì)一棵單詞樹T,插入詞素w1w2wn的經(jīng)過如下:令T[wi]表示字符wi在第i層對(duì)應(yīng)的節(jié)點(diǎn)。則T[w1]是根節(jié)點(diǎn)下字符為w1的節(jié)點(diǎn)。假使不存在,則開創(chuàng)建立對(duì)應(yīng)節(jié)點(diǎn)。對(duì)每個(gè)wk,k>1,尋找T[wk-1]節(jié)點(diǎn)下能否存在字符為wk的節(jié)點(diǎn),假使存在,則T[wk]為該節(jié)點(diǎn),若不存在則開創(chuàng)建立字符為wk的子節(jié)點(diǎn)。圖1所示為在一棵空單詞樹上插入act,active,activity,black,actual幾個(gè)詞后的示意圖。將全詞素列表的每條詞素按上述算法插入一棵空樹,最后得到的結(jié)果即包含全詞素的單詞樹。在已建立的單詞樹基礎(chǔ)上,對(duì)標(biāo)識(shí)符I拓展完好詞素備選集的問題可劃歸為樹途徑搜索問題,令I(lǐng)[i]表示I中第i個(gè)字符,知足條件的途徑必須依次(不必連續(xù))包含內(nèi)容為I[1],I[2],I[3],,I[n-1]字符的節(jié)點(diǎn),并以isWord標(biāo)記為true的節(jié)點(diǎn)終止,該問題是一個(gè)深度優(yōu)先搜索問題。圖1示例中,對(duì)actv尋找完好詞素拓展集合的結(jié)果即為{activity,active}。下面為詞素?cái)U(kuò)展經(jīng)過偽代碼。經(jīng)過:Node[]expand(root,I,offset)。輸入:root表示自然語言單詞樹根節(jié)點(diǎn),I表示要拓展的標(biāo)識(shí)符字符串,offset表示I的起始偏移量。返回:Node[]表示每條知足要求的途徑的最后節(jié)點(diǎn),該節(jié)點(diǎn)isWord必須為true。通過該算法獲得的節(jié)點(diǎn)集合對(duì)每個(gè)節(jié)點(diǎn)不斷訪問parent即可獲得該節(jié)點(diǎn)對(duì)應(yīng)的完好途徑,即一個(gè)完好詞素。2.2海量數(shù)據(jù)庫(kù)建立基于語義的搜索經(jīng)過如此圖3所示。本文的核心思想是通過分析海量源碼,建立源碼數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中包含源碼中標(biāo)識(shí)符之間的關(guān)系,以及標(biāo)識(shí)符對(duì)應(yīng)的完好詞素的擴(kuò)展。源碼中標(biāo)識(shí)符的關(guān)系主要包含下面2點(diǎn):1)方式方法與變量的附屬關(guān)系;2)同一方式方法體內(nèi)變量的使用關(guān)系。以上2點(diǎn)主要通過傳統(tǒng)的程序分析方式方法建立,本文使用的工具是JavaCC,對(duì)源代碼進(jìn)行靜態(tài)的語法分析,最后以關(guān)系型數(shù)據(jù)庫(kù)MySQL持久化分析結(jié)果。2.3搜索算法令函數(shù)Similarity(wi,wj)代表S中2個(gè)單詞的語義近似度,其值域?yàn)椋?,1],該值的獲取方式方法通過Dis-coWiki數(shù)據(jù)庫(kù),其構(gòu)造如此圖4所示。最后按降序排列的方式方法結(jié)果集合即為搜索結(jié)果。3、測(cè)試結(jié)果及分析實(shí)驗(yàn)從功能及性能2方面進(jìn)行評(píng)測(cè),通過不同難度的測(cè)試用例,統(tǒng)計(jì)使用者對(duì)本引擎的搜索結(jié)果與Github搜索結(jié)果匹配度進(jìn)行比照以評(píng)價(jià)引擎的可用性。3.1搜索用例測(cè)試測(cè)試用例實(shí)驗(yàn)主要通過提供4組不同難度的測(cè)試用例,并召集10位志愿者分別在Github上與在本引擎上搜索測(cè)試用例,并將前10條結(jié)果匹配率作為反應(yīng)進(jìn)行比擬。當(dāng)結(jié)果中包含詳細(xì)源碼,源碼標(biāo)識(shí)符內(nèi)容與輸入所匹配時(shí),算作一條匹配結(jié)果。測(cè)試用例1:尋找圖表繪制API相關(guān)源碼。根據(jù)本文定義的格式,以{chart;draw;}作為輸入。測(cè)試用例2:本例采用實(shí)現(xiàn)較為多樣化的最大流問題作為搜索。以{source,stream;max;}作為關(guān)鍵字進(jìn)行查詢。測(cè)試用例3:本例作為測(cè)試用例2的比照測(cè)試,以更精準(zhǔn)的{source,flow;max;}搜索最大流算法。該測(cè)試用例主要測(cè)試語義近似對(duì)搜索結(jié)果的影響。測(cè)試用例4:尋路算法尋找,輸入{start;find,path;}。由圖5、圖6可知,在匹配度上,4組測(cè)試用例中本文的搜索結(jié)果均高于Github,在實(shí)驗(yàn)中,Github的搜索結(jié)果大部分是接口聲明,本文的搜索結(jié)果均包含匹配關(guān)鍵字的數(shù)據(jù)流,具有可工作源碼。在語義近似的測(cè)試用例上,如最大流問題的stream與flow,沒有flow關(guān)鍵字時(shí),Github不存在匹配的結(jié)果,而本文的方式方法在前10項(xiàng)搜索結(jié)果中仍然包含匹配的源碼。4項(xiàng)測(cè)試的比擬中,本文提出的方式方法搜索結(jié)果均強(qiáng)于Github的搜索結(jié)果。3.2性能測(cè)試該測(cè)試根據(jù)參數(shù)擴(kuò)展集最大容量maxArg、被影響參數(shù)擴(kuò)展集最大容量maxAffected、調(diào)用圖搜索的最大深度d、詞匯泛用性v為基準(zhǔn)對(duì)搜索引擎性能進(jìn)行評(píng)估。測(cè)試結(jié)果如表1所示。表1中的數(shù)據(jù)表示清楚,參數(shù)和被影響參數(shù)對(duì)搜索時(shí)間影響是線性的,被影響參數(shù)系數(shù)更大,原因是被影響參數(shù)集合大小決定了調(diào)用圖搜索的復(fù)雜度。而深度的增加對(duì)時(shí)間的增加是高于線性的,由于廣度優(yōu)先搜索每多搜一層其元素將是上一層的k倍,k取決于節(jié)點(diǎn)的平均子節(jié)點(diǎn)數(shù)量。單詞的泛用性,高的指object等泛用名字,低的指詞義信息詳細(xì)的名詞,對(duì)搜索時(shí)間影響得非常大,原因是單詞泛用性決定了搜索引擎構(gòu)筑的語義網(wǎng)絡(luò)的出度,進(jìn)而影響備選集的容量。4、結(jié)束語本文通過結(jié)合程序分析與語義網(wǎng)絡(luò),通過大數(shù)據(jù)分析的方式方法,為源碼中的標(biāo)識(shí)符建立使用關(guān)系。本文基于縮寫拓展算法,設(shè)計(jì)適用于程序標(biāo)識(shí)符縮寫的自然語言單詞拓展算法。通過使用自然語義近似網(wǎng)絡(luò),將用戶的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論