Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中剽窃检测引擎的噪声滤波器设计_Ruby_Algorithm_Plagiarism Detection - Fatal编程技术网

Ruby中剽窃检测引擎的噪声滤波器设计

Ruby中剽窃检测引擎的噪声滤波器设计,ruby,algorithm,plagiarism-detection,Ruby,Algorithm,Plagiarism Detection,我一直在基于MOSS(软件相似性度量)背后的学术论文开发一个剽窃检测引擎 链接到 对于为C/C++/Java这样的语言设计噪声过滤器,我有一些决定要做 关键词是否与检测剽窃相关,还是应该删除? 同一语言的源文件绑定为共享同一组关键字。本文没有讨论如何处理这些问题 如何处理标识符? 用单个字符“V”替换所有关键字,使匹配独立于变量名是有意义的 如何处理包导入和库包含 空格、逗号和标点符号应明确去除 我想知道在完成所有操作后,源文件将只是一堆“V”和一些其他乱码文本 噪声过滤器应执行哪些操作 关于处

我一直在基于MOSS(软件相似性度量)背后的学术论文开发一个剽窃检测引擎

链接到

对于为C/C++/Java这样的语言设计噪声过滤器,我有一些决定要做

关键词是否与检测剽窃相关,还是应该删除? 同一语言的源文件绑定为共享同一组关键字。本文没有讨论如何处理这些问题

如何处理标识符? 用单个字符“V”替换所有关键字,使匹配独立于变量名是有意义的

如何处理包导入和库包含

空格、逗号和标点符号应明确去除

我想知道在完成所有操作后,源文件将只是一堆“V”和一些其他乱码文本

噪声过滤器应执行哪些操作


关于处理噪声的最佳方法的见解和意见?

对于单个函数:编译它们,并比较生成的汇编程序代码或对象。 对于整个程序:对所有函数执行上述操作,并创建模糊搜索,以在已知函数和片段的数据库中查找片段

因此,基本上,您需要构建一个编译器,它会发出其输入的规范化表示,类似于p代码,但最好是人类可读的

有些片段比其他片段更具特征

for (i=0; i < 12345; i++) {
  array[i] = 54321;
  }
(i=0;i<12345;i++)的
{
数组[i]=54321;
}
可能会以某种形式出现在每个程序中。它的功能与

j=0;
while ( j < 12345) {
  foobar[j++] = 54321;
  }
j=0;
而(j<12345){
foobar[j++]=54321;
}
,编译器可能会生成相同的代码


变量名、数值常量、地址常量等方面可能存在差异。但是关键字(->{比较、循环、表达式、赋值、函数调用})的“框架”将是相同的。所以:不要丢弃关键词,它们是程序的支架

如果你搜索“文本指纹木瓦”,在谷歌上可以找到很多东西。木瓦是一个x字(在许多研究项目中x=7)。你一个字一个字地建造一套所有的木瓦

您可以在木瓦上构建散列,然后在文本中比较木瓦的末端。这很简单。这里有一些东西,比如特殊的散列函数,你肯定没有在本文之外听说过

例如,从阅读开始,它不是真正的火箭科学,但也不是微不足道的

“有效地检测文本来源”Besnik Fetahu,Andreas Frische

“重复文档的算法”,Andrei Broder

为什么要去掉标识符和注释?如果您检查两个文档,其中包含相同的源注释或局部变量名,那么您是否极有可能面临剽窃?标识符的名称很容易更改,以欺骗系统认为没有剽窃。所以我们需要独立于他们的名字来处理他们。评论通常包括免责声明和许可条款,因此可以忽略。我理解。不过,我认为单独检查局部变量名可以增加发现剽窃的机会。当然,你不应该依赖于这种方式,因为没有匹配的名称会导致负面结果。。。有道理。谢谢:)我猜关键字出现得太频繁了,在正常的(基于熵的)方法中,它们的权重太低了,所以你必须以不同的方式对待它们(例如:增加它们的权重)。对于标识符和文本,您需要等价类(这正是解析器所做的)。我不知道筛选,但在DNA检索中使用N-gram(k-mers)是非常常见的。