2011-12-17 58 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