捕获可疑相似代码的最佳字符串比较算法

时间:2019-05-08 18:41:27

标签: string algorithm

我正在尝试实现代码执行系统,并且正在寻找一种方法来捕获来自不同用户的可疑相似的提交代码。我的想法是使用Dice系数来比较提交的字符串。在我的情况下可以使用它吗?如果不是,是否有更好的算法。

1 个答案:

答案 0 :(得分:1)

字符串比较算法不是imo的主要焦点。骰子,Levenshtein或q-gram无关紧要(尽管我不是专家)。

最主要的是将您的代码转换为一系列令牌。将第一个未知标记标记为1,将第二个标记标记为2 ect。然后比较两个令牌字符串。如果所有人都更改了一些变量名,这将为您提供精确匹配。

要更加复杂,如果令牌与关键字匹配,if with for do等可以给您提供唯一的标签(大多数语言都有类似的关键字)。这样可以避免误报。


示例:

sample1:

name = 'fred'
print(name)

sample2:

my_name = 'harry'
print(my_name)

sample1令牌:name, =, ', fred, ', print, (, name, )

sample1处理过的令牌: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中的已处理令牌