gpt4 book ai didi

ruby - 为 Ruby 中的抄袭检测引擎设计噪声过滤器

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:18 28 4
gpt4 key购买 nike

我一直在研究基于 MOSS(软件相似性度量)背后的学术论文的抄袭检测引擎的实现

链接到 MOSS

为了为 C/C++/Java 等语言设计噪声过滤器,我需要做出一些决定。

关键字是否与检测抄袭相关或应该删除?同一种语言的源文件必然共享同一组关键字。本文不讨论如何处理它们。

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

如何处理包导入和库包含?

空格、注释和标点符号要明确去除。

我想知道在所有操作之后,源文件将只是一堆'V'和一些其他乱码。

噪声滤波器应该执行什么操作?

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

最佳答案

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

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

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

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

可能会以某种形式出现在每个程序中。它与 100% 功能相同

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

,编译器可能会生成相同的代码。

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

关于ruby - 为 Ruby 中的抄袭检测引擎设计噪声过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544583/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com