程序代碼進行知網(wǎng)查重的方法
我個人為我們課程DIY過一個知網(wǎng)查重的軟件工具,是基于數(shù)據(jù)流分析的,效果還不錯,反正修改變量名,提取函數(shù)這些小伎倆是完全無用的,甚至可以做到一定的跨語言查重(只把c#代碼copy到java里,然后改一改跑起來是會被發(fā)現(xiàn)的)。說明程序代碼也會進行對比查重算抄襲重復率。下面具體說說程序代碼進行知網(wǎng)查重的方法,具體如下:
以c為例,具體流程大概是,先調用預處理器把注釋干掉,把macro展開,因include <>而弄進來的那波標準庫頭文件特殊標記一下,然后建立CFG(control flow graph)進行知網(wǎng)查重。因為CFG關心的是變量的值會怎么傳播,所以在中間插入一大堆無副作用的語句是不會有任何效果的,把變量換個名或挪個位置(比如加多一層block)也沒啥卵用。
c++的話就會麻煩很多,畢竟在c++里就算a + b這么個簡單語句,因為operator+可以重載,所以指不定執(zhí)行完這個語句就可以把地球都炸了呢,而且這個重載在不同namespace里還可能不同,比如namespace A是用核彈炸地球,namespace B是對整個地球播一段愛的供養(yǎng)神馬的……在c++里建立CFG會是個噩夢……程序代碼進行知網(wǎng)查重的方法比較復雜吧!!
不過說起來我們的課程比較特殊,因為作業(yè)用的是類ACM的提交系統(tǒng),所以對運行環(huán)境有比較嚴格的限制,這保證了程序代碼知網(wǎng)查重查重的準確率。如果是完全開放性的程序代碼知網(wǎng)查重(即對語言和第三方lib等等都不做限制的話)恐怕會很困難。
=== 舉個例子 ===
以下是前幾天剛剛檢測到的抄襲代碼片段……下面兩段java代碼被檢測出有高度匹配(右圖里getARGBData函數(shù)只是把二維數(shù)組給復制4份湊成一個三維數(shù)組而已,沒干其他事)……
另外一點,為了減少漏網(wǎng)之魚,知網(wǎng)查重時一般都會用低閾值初篩,再人工介入復核。此外建立回溯機制,比如如果某人現(xiàn)場考試的成績和作業(yè)排名差異較大的話,會觸發(fā)重查,專門為他調低閾值重查一遍+人工復核。不過正因為有人工復核,所以思路相同一般是不至于誤判的,畢竟只要代碼行數(shù)一多,思路再相同,代碼風格上也會有很大差異。
- 上一篇:中國知網(wǎng)碩士論文查重后會被收錄嗎 2018/3/2
- 下一篇:溫州醫(yī)科大學碩士論文使用知網(wǎng)查重及標準 2018/3/2