我正在尝试实现一个代码执行系统,并且我正在寻找一种方法来捕获来自不同用户的可疑的相似提交代码。我的想法是使用 Dice 的系数来比较提交的字符串。可以将它用于我的案例吗?如果不行,是否有一些更好的算法。
最佳答案
字符串比较算法不是我的主要关注点。骰子或 Levenshtein 或 q-gram 应该无关紧要(尽管我不是专家)。
主要是将您的代码转换为一系列标记。将第一个未知标记标记为 1,第二个标记为 2 等。然后比较两个标记字符串。如果一个人所做的只是更改一些变量名称,这将为您提供精确匹配。
如果标记与关键字匹配,您可以提供唯一的标签,以更加复杂if
with
for
do
等...(大多数语言都有相似的关键字)。这样可以避免误报。
例子:
示例 1:
name = 'fred'
print(name)
示例 2:
my_name = 'harry'
print(my_name)
sample1 代币:name, =, ', fred, ', print, (, name, )
sample1 处理的 token :1, 2, 3, 4, 3, 5, 6, 1, 6
sample2 代币:my_name, =, ', harry, ', print, (, my_name, )
sample2 处理的标记:1, 2, 3, 4, 3, 5, 6, 1, 6
现在您匹配来自 sample1 和 sample2 的已处理 token
关于string - 用于捕获可疑相似代码的最佳字符串比较算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56047144/