- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
许多人会想衡量代码相似性以发现剽窃,但我的目的是将一组 Python 代码块(比如对同一编程问题的答案)归为不同的类别,并区分学生采用的不同方法。
如果您知道如何实现这一目标,请在此分享,我将不胜感激。
最佳答案
您可以选择任何您喜欢的方案,基本上对代码块的内容进行哈希处理,并将具有相同哈希值的代码块归入同一类别。
当然,结果相似的结果在很大程度上取决于您如何定义散列函数。例如,一个真正愚蠢的哈希函数 H(code)==0 会将所有内容放在同一个容器中。
一个困难的问题是找到一个哈希函数,以一种在自然意义上看起来相似的方式对代码块进行分类。经过大量研究,没有人找到比当我看到它们时我会知道它们是否相似更好的判断方法。
您肯定不希望它依赖于布局/缩进/空白/注释,或者对这些稍作更改就会对 block 进行不同的分类,即使它们的语义内容相同。
人们通常使用三种主要方案来查找重复(或相似)代码:
基于指标的方案,通过计算指标计算各种类型的运算符和操作数来计算哈希值。 (注意:这使用词汇标记)。这些通常仅在功能级别运行。据我所知,没有基于此的实用工具。
基于词法的方案,将输入流分解为词素,将标识符和文字转换为固定的特殊常量(例如,将它们视为未区分的),然后基本上对 N-gram(N 个标记的序列)进行哈希处理这些序列。许多克隆检测器基本上都是基于这个想法;它们工作得很好,但也会找到愚蠢的匹配项,因为没有什么强制与程序结构边界对齐。顺序
return ID; } void ID ( int ID ) {
是一个 11 克,经常出现在类似 C 的语言中,但显然不是有用的克隆)。结果是往往会出现误报,例如,您在没有匹配项的情况下获得了声称的匹配项。
本文提供了对各种技术的调查:http://www.cs.usask.ca/~croy/papers/2009/RCK_SCP_Clones.pdf .它表明基于 AST 的克隆检测工具似乎最有效地产生人们认为是相似代码块的克隆,这似乎是 OP 特别感兴趣的关键;见表 14。
[有匹配控制和数据流图的基于图的方案。他们应该可以产生更好的匹配,但显然在实践中并没有做得更好。]
关于python - 如何衡量两个 python 代码块之间的相似性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738872/
我需要在基于 Java 的应用程序中使用 Wordnet。我想: 搜索同义词集 找到同义词集之间的相似性/相关性 我的应用程序使用 RDF 图,我知道 Wordnet 有 SPARQL 端点,但我想最
假设我们有一个 IEnumerable Collection,其中包含 20 000 人 对象项。那么假设我们创建了另一个 Person 对象。 我们想列出所有与这个人相似的人。这意味着,例如,如果姓
我使用 JAWS 作为普通的 wordnet 来查找单词之间的相似性。 我安装了 wordnet 2.1 并添加了 jar 文件:edu.mit.jwi_2.1.4.jar 和 edu.sussex.
我用这段代码做了一个词嵌入: with open("text.txt",'r') as longFile: sentences = [] single= []
我正在尝试找出确定各种对象或数组之间的共性或相似性的最佳方法,并且有兴趣获得社区的意见。我目前正在用 javascript 构建一个早期研究原型(prototype),我需要采用一种巧妙的方式来比较对
我在将 Flash 游戏转换为 C# 时遇到问题。在 Flash 中我会使用这种语法: public function doMove() { eaze(this).to(actionTime,
我有一批形状为 (bs, m, n) 的向量(即维度为 mxn 的 bs 向量)。对于每个批处理,我想计算第一个向量与其余 (m-1) 个向量的 Jaccard 相似度 例子: a = [ [
如何使用 Whoosh 获取文档的相似性度量? 我想创建一个“相关”特征,对与文档具有高度相似性的其他先前编入索引的文档进行排名。 我是否将文档作为长查询字符串输入?我是否将文档添加到索引并以某种方式
我编写了一个 Python 函数,它接受两个列表,使用 Levenshtein 比较它们并将足够相似的单词合并到一个名为“merged”的列表中。 我如何为超过 6 个列表执行此操作?确保将每个列表与
请原谅我对 Go 的了解非常有限。我有这样的定义 type ErrorVal int const ( LEV_ERROR ErrorVal = iota LEV_WARNING
我正在从事文本分析项目,一次比较两个不同的报告并将结果保存到 pandas 数据框中。 我能够得到 cosine 和 jacard 的相似性,但需要确保我得到正确的度量。作为参数,我使用位于给定文件夹
我是一名优秀的程序员,十分优秀!