2011-12-17 86 views
3

基於後面MOSS(軟件相似的度量)的學術文章,我一直在抄襲檢測引擎的實現設計抄襲檢測引擎噪聲濾波器在Ruby中

鏈接MOSS

對於爲像C/C++/Java這樣的語言設計噪聲濾波器,我有一些決定。

與檢測剽竊有關的關鍵詞還是應該刪除? 相同語言的源文件被綁定爲共享相同的一組關鍵字。本文不討論如何處理它們。

如何處理標識符? 使用單個字符'V'替換所有關鍵字使得與變量名稱無關的匹配是有意義的。

如何處理軟件包導入和庫包括?

空白區,行政區和標點符號必須清除。

我想知道做完所有的操作後,源文件將只是一堆'V'和其他一些亂碼文本。

噪聲濾波器應該執行哪些操作?

關於處理噪音的最佳方法的見解和意見?

+0

爲什麼去掉標識和意見嗎?如果您檢查兩個具有相同源註釋或局部變量名稱的文檔,是不是很可能面臨抄襲? – 2011-12-17 12:26:37

+0

標識符的名稱可以很容易地更改,以欺騙系統,以免剽竊。所以我們需要獨立處理它們的名字。意見通常由免責聲明和許可條款組成,因此應予以忽略。 – 2011-12-17 12:28:48

+0

我明白。儘管如此,我認爲單獨檢查本地變量名稱可能會增加檢測plagiats的機會。你當然不應該依賴於這種方式,因爲沒有匹配的名字會導致消極的結果。 – 2011-12-17 12:38:02

回答

1

對於單個函數:編譯它們,並比較生成的彙編代碼或對象。 對於整個程序:做到以上所有功能,並創建一個模糊搜索,找到回片段中的已知功能和片段的數據庫。

因此,基本上,需要建立一個編譯器,其發射其輸入它,類似於P-碼的封爲表示,但優選人類可讀的。

一些片段比別人多的特點,

for (i=0; i < 12345; i++) { 
    array[i] = 54321; 
    } 

可能會出現某種形式在每一個程序片段。它是100%功能相同的

j=0; 
while (j < 12345) { 
    foobar[j++] = 54321; 
    } 

,和一個編譯器可能會產生相同的代碼。

變量名稱,數字常量,地址常量,任何內容都可能存在差異。但關鍵字的「骨架」( - > {比較,循環,表達式,賦值,函數調用})將是相同的。所以:不要刪除關鍵字,它們是程序的腳手架。

+0

我正在研究基於風向的算法。 – 2011-12-17 13:44:38

+0

我的猜測是關鍵字發生得太頻繁,而在正常的(基於熵的)方法中,他們的權重太低,所以你必須以不同的方式對待它們(例如:增加權重)。對於標識符和文字,你需要等價類(這正是解析器所做的)。我不知道風選,但使用N-gram(k-mers)在DNA檢索中非常常見。 – wildplasser 2011-12-17 14:03:35

0

如果您搜索「文字指紋牌」,在google上搜索的內容相當多。一個木瓦是一個x字(在許多研究項目中x = 7)。你逐字地建立一組所有的帶狀皰疹。

您構建一個哈希在鵝卵石,然後比較帶狀皰疹的1000end文本。這很簡單。有喜歡特定的散列函數的幾件事情你肯定沒有這方面等

開始外heared與例如讀取,它不是真正的火箭科學,但不是小事無論是。

「文字原點檢測以高效的方式」貝斯尼克Fetahu,安德烈亞斯Frische http://resources.mpi-inf.mpg.de/d5/teaching/ws10_11/hir/reports/BesnikFetahu.pdf

「算法的重複文件」,安德烈·布羅德 http://www.cs.princeton.edu/courses/archive/spr05/cos598E/bib/Princeton.pdf