我個(gè)人為我們課程DIY過(guò)一個(gè)知網(wǎng)查重的軟件工具,是基于數(shù)據(jù)流分析的,效果還不錯(cuò),反正修改變量名,提取函數(shù)這些小伎倆是完全無(wú)用的,甚至可以做到一定的跨語(yǔ)言查重(只把c#代碼copy到j(luò)ava里,然后改一改跑起來(lái)是會(huì)被發(fā)現(xiàn)的)。說(shuō)明程序代碼也會(huì)進(jìn)行對(duì)比查重算抄襲重復(fù)率。下面具體說(shuō)說(shuō)程序代碼進(jìn)行知網(wǎng)查重的方法,具體如下:
我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、廣豐ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的廣豐網(wǎng)站制作公司
以c為例,具體流程大概是,先調(diào)用預(yù)處理器把注釋干掉,把macro展開,因include 而弄進(jìn)來(lái)的那波標(biāo)準(zhǔn)庫(kù)頭文件特殊標(biāo)記一下,然后建立CFG(control flow graph)進(jìn)行知網(wǎng)查重。因?yàn)镃FG關(guān)心的是變量的值會(huì)怎么傳播,所以在中間插入一大堆無(wú)副作用的語(yǔ)句是不會(huì)有任何效果的,把變量換個(gè)名或挪個(gè)位置(比如加多一層block)也沒啥卵用。
c++的話就會(huì)麻煩很多,畢竟在c++里就算a + b這么個(gè)簡(jiǎn)單語(yǔ)句,因?yàn)閛perator+可以重載,所以指不定執(zhí)行完這個(gè)語(yǔ)句就可以把地球都炸了呢,而且這個(gè)重載在不同namespace里還可能不同,比如namespace A是用地球,
namespace B是對(duì)整個(gè)地球播一段愛的供養(yǎng)神馬的……在c++里建立CFG會(huì)是個(gè)噩夢(mèng)……程序代碼進(jìn)行知網(wǎng)查重的方法比較復(fù)雜吧!!
程序代碼被知網(wǎng)查重很復(fù)雜
不過(guò)說(shuō)起來(lái)我們的課程比較特殊,因?yàn)樽鳂I(yè)用的是類ACM的提交系統(tǒng),所以對(duì)運(yùn)行環(huán)境有比較嚴(yán)格的限制,這保證了程序代碼知網(wǎng)查重查重的準(zhǔn)確率。如果是完全開放性的程序代碼知網(wǎng)查重(即對(duì)語(yǔ)言和第三方lib等等都不做限制的話)恐怕會(huì)很困難。
=== 舉個(gè)例子 ===
以下是前幾天剛剛檢測(cè)到的抄襲代碼片段……下面兩段java代碼被檢測(cè)出有高度匹配(右圖里getARGBData函數(shù)只是把二維數(shù)組給復(fù)制4份湊成一個(gè)三維數(shù)組而已,沒干其他事)……
知網(wǎng)查重時(shí)程序代碼一樣被算重復(fù)
另外一點(diǎn),為了減少漏網(wǎng)之魚,知網(wǎng)查重時(shí)一般都會(huì)用低閾值初篩,再人工介入復(fù)核。此外建立回溯機(jī)制,比如如果某人現(xiàn)場(chǎng)考試的成績(jī)和作業(yè)排名差異較大的話,會(huì)觸發(fā)重查,專門為他調(diào)低閾值重查一遍+人工復(fù)核。不過(guò)正因?yàn)橛腥斯?fù)核,所以思路相同一般是不至于誤判的,畢竟只要代碼行數(shù)一多,思路再相同,代碼風(fēng)格上也會(huì)有很大差異。
有的,是基于編譯后的字節(jié)碼的檢測(cè),因此添加空格是不管用的,method順序不清楚,大致原理跟下面這個(gè)論文里的差不多,但是具體的軟件應(yīng)該有所不同,需要知道具體是什么軟件才好針對(duì)性的做修改以避免抄襲檢測(cè)
肯定是可以的,任何語(yǔ)言都可以實(shí)現(xiàn)論文查重,只不過(guò)最重要的是算法是如何檢測(cè)重復(fù)