本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性度量方法。
背景技術(shù):
隨著高校計(jì)算機(jī)數(shù)據(jù)結(jié)構(gòu)課程的大量開設(shè),教師閱讀和批改學(xué)生作業(yè)程序的數(shù)量逐年增多。一方面,由于學(xué)生的作業(yè)程序可能存在抄襲現(xiàn)象,而教師卻難以逐份作業(yè)程序?qū)Ρ?;另一方面,由于現(xiàn)有大多數(shù)編程作業(yè)系統(tǒng)均采用動(dòng)態(tài)測(cè)試方式,有些學(xué)生的作業(yè)程序部分或沒有通過系統(tǒng)預(yù)設(shè)的測(cè)試,這時(shí)教師需對(duì)此類作業(yè)逐份進(jìn)行批閱并給出建議,如果作業(yè)多,教師無暇逐份去閱讀。
在相似性度量技術(shù)中,Ottesstein將Halstead屬性計(jì)數(shù)技術(shù)用于程序代碼的抄襲檢測(cè)。Alex Aiken開發(fā)了MOSS系統(tǒng)檢測(cè)程序設(shè)計(jì)類課程作業(yè)中的抄襲問題。Dick Grune使用了檢測(cè)DNA序列相似性的一種字符串排列程序來開發(fā)SIM系統(tǒng),可檢測(cè)項(xiàng)目程序代碼或者作業(yè)程序代碼抄襲。熊浩、晏海華等人提出了一種基于BP神經(jīng)網(wǎng)絡(luò)的代碼相似性方法。石野、黃龍和等人提出了基于語(yǔ)法樹的程序相似度判定方法。
現(xiàn)有技術(shù)的缺點(diǎn)是程序相似性度量方法單一、陳舊,并且沒有進(jìn)行多策略評(píng)價(jià),使得評(píng)價(jià)結(jié)果誤差率較高,可參考性較低?;跀?shù)據(jù)結(jié)構(gòu)作業(yè)程序的相似性度量研究則少之又少。作業(yè)程序通常程序規(guī)模小,異構(gòu)度低,采用屬性統(tǒng)計(jì)、序列統(tǒng)計(jì)等方法不能很好地體現(xiàn)作業(yè)程序的流程和思路,現(xiàn)有技術(shù)的相似性度量更多地是停留在字符的相似性度量上。亟待提供一種數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性度量方法,通過多維度量使結(jié)構(gòu)更加精確。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出一種數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性度量方法,通過從數(shù)據(jù)結(jié)構(gòu)作業(yè)程序中獲取詞法分析矩陣,并分別根據(jù)不同的詞法分析矩陣計(jì)算三個(gè)相似度,再將三個(gè)相似度中的一個(gè)或者至少一個(gè)或者三個(gè)相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合進(jìn)行長(zhǎng)期的學(xué)習(xí),使度量結(jié)果更準(zhǔn)確。
本發(fā)明中一種數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性度量方法,包括:
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第一詞法分析,獲取每份數(shù)據(jù)結(jié)構(gòu)作業(yè)中的聲明塊和控制塊,其中所述聲明塊記作K1,控制塊記作K2;
對(duì)每份所述數(shù)據(jù)結(jié)構(gòu)作業(yè)的聲明塊和控制塊建立第一詞法分析集合V={K1,K2},其中,n個(gè)集合分別記為V1,V2,V3,...,Vn;
根據(jù)預(yù)定的相同屬性的聚類規(guī)則,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合,記作V+;
提取所述聚類集合V+中所有一元子集,包括:T1,T2,…,Tm;
根據(jù)合成對(duì)比規(guī)則μ對(duì)T1,T2,…,Tm進(jìn)行進(jìn)行合成處理,得到第一相似度,其中合并對(duì)比規(guī)則μ定義為:
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第二詞法分析,獲取每份數(shù)據(jù)結(jié)構(gòu)作業(yè)中的集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu),其中集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)分別記作S1,S2,S3,S4;
對(duì)每份所述數(shù)據(jù)結(jié)構(gòu)作業(yè)的集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)建立第二詞法分析集合SN={S1,S2,S3,S4},其中,n個(gè)集合分別記為SN1,SN2,SN3,...,SNn;
對(duì)所述SN1,SN2,SN3,...,SNn進(jìn)行標(biāo)準(zhǔn)化計(jì)算,對(duì)其計(jì)算結(jié)果依次進(jìn)行協(xié)方差矩陣計(jì)算、特征根計(jì)算和主成分矩陣計(jì)算,得到n個(gè)主成分;
計(jì)算所述n個(gè)主成分的累積貢獻(xiàn)率,并其等同為第二相似度;
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第三詞法分析,獲取n個(gè)語(yǔ)法樹分別記為T1,T2,T3,...,Tn;
分別計(jì)算每棵語(yǔ)法樹出從根到葉結(jié)點(diǎn)的一條最長(zhǎng)路徑和一條最長(zhǎng)路徑,其中,最長(zhǎng)路徑記作L(Ti),最長(zhǎng)路徑L(Ti);
計(jì)算每組L(Ti)與P(Ti)的差異值,其中,計(jì)算規(guī)則為:
dif(L(Ti),P(Ti))=|Length[L(Ti)]-Length[P(Ti)]|;
根據(jù)所述差異值,計(jì)算n棵語(yǔ)法樹的第三相似度:計(jì)算規(guī)則為:
根據(jù)所述第一相似度、第二相似度和/或第三相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合建立精確化模型;
根據(jù)所述精確化模型計(jì)算結(jié)果評(píng)價(jià)所述數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性。
可選的,
步驟所述根據(jù)預(yù)定的相同屬性的聚類規(guī)則,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合包括:
根據(jù)預(yù)定的相同屬性的k-means聚類算法,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合。
可選的,
步驟所述對(duì)所述SN1,SN2,SN3,...,SNn進(jìn)行標(biāo)準(zhǔn)化計(jì)算,對(duì)其計(jì)算結(jié)果依次進(jìn)行協(xié)方差矩陣計(jì)算、特征根計(jì)算和主成分矩陣計(jì)算,得到n個(gè)主成分包括:
標(biāo)準(zhǔn)化計(jì)算規(guī)則為
所述協(xié)方差矩陣計(jì)算規(guī)則為:R=Z'Z/(n-1);
所述特征根計(jì)算規(guī)則為:(R-λE)e=0→(λ1,e1),(λ2,e2),...,(λn,en);
所述主成分矩陣計(jì)算規(guī)則為:Yi=eiZ,i∈[1,n]。
可選的,
步驟所述計(jì)算所述n個(gè)主成分的累積貢獻(xiàn)率包括:
所述n個(gè)主成分的累計(jì)貢獻(xiàn)率的計(jì)算規(guī)則為:
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具體有以下優(yōu)點(diǎn):
本發(fā)明方案包括對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第一詞法分析,獲取每份數(shù)據(jù)結(jié)構(gòu)作業(yè)中的聲明塊和控制塊,其中所述聲明塊記作K1,控制塊記作K2;
對(duì)每份所述數(shù)據(jù)結(jié)構(gòu)作業(yè)的聲明塊和控制塊建立第一詞法分析集合V={K1,K2},其中,n個(gè)集合分別記為V1,V2,V3,...,Vn;
根據(jù)預(yù)定的相同屬性的聚類規(guī)則,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合,記作V+;
提取所述聚類集合V+中所有一元子集,包括:T1,T2,…,Tm;
根據(jù)合成對(duì)比規(guī)則μ對(duì)T1,T2,…,Tm進(jìn)行進(jìn)行合成處理,得到第一相似度,其中合并對(duì)比規(guī)則μ定義為:
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第二詞法分析,獲取每份數(shù)據(jù)結(jié)構(gòu)作業(yè)中的集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu),其中集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)分別記作S1,S2,S3,S4;
對(duì)每份所述數(shù)據(jù)結(jié)構(gòu)作業(yè)的集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)建立第二詞法分析集合SN={S1,S2,S3,S4},其中,n個(gè)集合分別記為SN1,SN2,SN3,...,SNn;
對(duì)所述SN1,SN2,SN3,...,SNn進(jìn)行標(biāo)準(zhǔn)化計(jì)算,對(duì)其計(jì)算結(jié)果依次進(jìn)行協(xié)方差矩陣計(jì)算、特征根計(jì)算和主成分矩陣計(jì)算,得到n個(gè)主成分;
計(jì)算所述n個(gè)主成分的累積貢獻(xiàn)率,并其等同為第二相似度;
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第三詞法分析,獲取n個(gè)語(yǔ)法樹分別記為T1,T2,T3,...,Tn;
分別計(jì)算每棵語(yǔ)法樹出從根到葉結(jié)點(diǎn)的一條最長(zhǎng)路徑和一條最長(zhǎng)路徑,其中,最長(zhǎng)路徑記作L(Ti),最長(zhǎng)路徑L(Ti);
計(jì)算每組L(Ti)與P(Ti)的差異值,其中,計(jì)算規(guī)則為:
dif(L(Ti),P(Ti))=|Length[L(Ti)]-Length[P(Ti)]|;
根據(jù)所述差異值,計(jì)算n棵語(yǔ)法樹的第三相似度:計(jì)算規(guī)則為:
根據(jù)所述第一相似度、第二相似度和/或第三相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合建立精確化模型;
根據(jù)所述精確化模型計(jì)算結(jié)果評(píng)價(jià)所述數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性。
從而,通過從數(shù)據(jù)結(jié)構(gòu)作業(yè)程序中獲取詞法分析矩陣,并分別根據(jù)不同的詞法分析矩陣計(jì)算三個(gè)相似度,再將三個(gè)相似度中的一個(gè)或者至少一個(gè)或者三個(gè)相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合進(jìn)行長(zhǎng)期的學(xué)習(xí),使度量結(jié)果更準(zhǔn)確。從而能對(duì)數(shù)據(jù)結(jié)構(gòu)作業(yè)程序從多個(gè)角度進(jìn)行相似性度量,避免了現(xiàn)有度量方案單一、陳舊的問題,且本方法還可以和程序動(dòng)態(tài)測(cè)試結(jié)合起來,產(chǎn)生更多參考答案完備集,為識(shí)別答案和程序理解提供一些新的思路。
具體實(shí)施方式
本發(fā)明提出一種數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性度量方法,通過從數(shù)據(jù)結(jié)構(gòu)作業(yè)程序中獲取詞法分析矩陣,并分別根據(jù)不同的詞法分析矩陣計(jì)算三個(gè)相似度,再將三個(gè)相似度中的一個(gè)或者至少一個(gè)或者三個(gè)相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合進(jìn)行長(zhǎng)期的學(xué)習(xí),使度量結(jié)果更準(zhǔn)確。
本發(fā)明中一種數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性度量方法實(shí)施例,包括:
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第一詞法分析,獲取每份數(shù)據(jù)結(jié)構(gòu)作業(yè)中的聲明塊和控制塊,其中所述聲明塊記作K1,控制塊記作K2;
對(duì)每份所述數(shù)據(jù)結(jié)構(gòu)作業(yè)的聲明塊和控制塊建立第一詞法分析集合V={K1,K2},其中,n個(gè)集合分別記為V1,V2,V3,...,Vn;
根據(jù)預(yù)定的相同屬性的聚類規(guī)則,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合,記作V+;
例如:
其中,{V1,V3,V7}為特征類別α;
{V4,V2,V6}為特征類別β;
{V8,V5}為特征類別γ;
提取所述聚類集合V+中所有一元子集,包括:T1,T2,…,Tm;
根據(jù)合成對(duì)比規(guī)則μ對(duì)T1,T2,…,Tm進(jìn)行進(jìn)行合成處理,得到第一相似度,其中合并對(duì)比規(guī)則μ定義為:
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第二詞法分析,獲取每份數(shù)據(jù)結(jié)構(gòu)作業(yè)中的集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu),其中集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)分別記作S1,S2,S3,S4;
對(duì)每份所述數(shù)據(jù)結(jié)構(gòu)作業(yè)的集合結(jié)構(gòu)、線性結(jié)構(gòu)、樹狀結(jié)構(gòu)和圖狀結(jié)構(gòu)建立第二詞法分析集合SN={S1,S2,S3,S4},其中,n個(gè)集合分別記為SN1,SN2,SN3,...,SNn;
對(duì)所述SN1,SN2,SN3,...,SNn進(jìn)行標(biāo)準(zhǔn)化計(jì)算,對(duì)其計(jì)算結(jié)果依次進(jìn)行協(xié)方差矩陣計(jì)算、特征根計(jì)算和主成分矩陣計(jì)算,得到n個(gè)主成分;
計(jì)算所述n個(gè)主成分的累積貢獻(xiàn)率,并其等同為第二相似度;
對(duì)n份數(shù)據(jù)結(jié)構(gòu)作業(yè)進(jìn)行第三詞法分析,獲取n個(gè)語(yǔ)法樹分別記為T1,T2,T3,...,Tn;
分別計(jì)算每棵語(yǔ)法樹出從根到葉結(jié)點(diǎn)的一條最長(zhǎng)路徑和一條最長(zhǎng)路徑,其中,最長(zhǎng)路徑記作L(Ti),最長(zhǎng)路徑L(Ti);
計(jì)算每組L(Ti)與P(Ti)的差異值,其中,計(jì)算規(guī)則為:
dif(L(Ti),P(Ti))=|Length[L(Ti)]-Length[P(Ti)]|;
根據(jù)所述差異值,計(jì)算n棵語(yǔ)法樹的第三相似度:計(jì)算規(guī)則為:
根據(jù)所述第一相似度、第二相似度和/或第三相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合建立精確化模型;
根據(jù)所述精確化模型計(jì)算結(jié)果評(píng)價(jià)所述數(shù)據(jù)結(jié)構(gòu)作業(yè)程序相似性。
可選的,
步驟所述根據(jù)預(yù)定的相同屬性的聚類規(guī)則,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合包括:
根據(jù)預(yù)定的相同屬性的k-means聚類算法,對(duì)V1,V2,V3,...,Vn進(jìn)行重新排序合并處理,得到聚類集合。
需要說明的是,標(biāo)準(zhǔn)化計(jì)算規(guī)則為
所述協(xié)方差矩陣計(jì)算規(guī)則為:R=Z'Z/(n-1);
所述特征根計(jì)算規(guī)則為:(R-λE)e=0→(λ1,e1),(λ2,e2),...,(λn,en);
所述主成分矩陣計(jì)算規(guī)則為:Yi=eiZ,i∈[1,n]。
所述n個(gè)主成分的累計(jì)貢獻(xiàn)率的計(jì)算規(guī)則為:
通過從數(shù)據(jù)結(jié)構(gòu)作業(yè)程序中獲取詞法分析矩陣,并分別根據(jù)不同的詞法分析矩陣計(jì)算三個(gè)相似度,再將三個(gè)相似度中的一個(gè)或者至少一個(gè)或者三個(gè)相似度與神經(jīng)網(wǎng)絡(luò)結(jié)合進(jìn)行長(zhǎng)期的學(xué)習(xí),使度量結(jié)果更準(zhǔn)確。
綜合上述方案,得到三個(gè)相似度,并引入權(quán)值對(duì)各方案進(jìn)行度量,即為多策略評(píng)價(jià)方法。如果全是作業(yè)程序作相似性度量,計(jì)算結(jié)果可作為是否抄襲的參考值。如果是作業(yè)程序與答案程序作相似性度量,計(jì)算結(jié)果則可作為是否接近答案的參考值,此時(shí),如果相似度較高,且通過了作業(yè)代碼動(dòng)態(tài)測(cè)試,則可加入答案程序集,以提高答案程序的完備性。
在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。