【问题标题】:Tips to show similarities in files显示文件相似性的提示
【发布时间】:2009-10-08 09:22:24
【问题描述】:

在一个项目中,我发现一些 css 文件“闻起来”,好像里面有复制粘贴的规则。

我想知道您检测文件中复制粘贴内容的策略是什么。

出于好奇,我想听听您显示文件相似性的提示和技巧!

【问题讨论】:

标签: copy-paste similarity simian


【解决方案1】:

试试Simian

它用于源代码(Java、C#、C、C++、COBOL、Ruby、JSP、ASP、HTML、XML、Visual Basic、Groovy)中的复制粘贴检测,但您可以在纯文本上运行它文件。

【讨论】:

  • 有没有办法让 simian 显示实际的相似之处?在我的测试运行中,它只显示“文件 X 中的 a 到 b 行类似于文件 Y 中的 c 到 d 行”的摘要???显示实际的线条将有助于澄清很多
  • 或者更好:有没有办法让它显示相似行的差异?
  • 恐怕你必须手动检查结果或编写一个工具来评估 Simian 结果并将它们附加到文件查看器。也许您可以为此目的使用免费的差异工具(例如 WinMerge,winmerge.org)。如果您决定选择后者:我也会对这样的解决方案感兴趣......
  • 查看我对 CloneDR 的回答,了解明确显示异同的工具。
  • @Jesper:Simian 有一个-reportDuplicateText 选项,指示它在报告中包含重复的文本。
【解决方案2】:

sourceforge 上有一个复制粘贴检测 (CPD) 项目; http://pmd.sourceforge.net/cpd.html

但即使在大型项目中,我也发现我自己对代码的了解是一种可靠(尽管并非万无一失)的检测机制。

有关其他建议,另请参阅this question

【讨论】:

  • CPD 工具的语言似乎非常有限。并且没有 javascript 或 CSS
  • 感谢您指出“这个问题”。与此非常相似,顺便说一句:)
【解决方案3】:

我们的Semantic Designs CloneDR 是一个检测复制粘贴编辑代码块的工具,适用于多种语言:C、C++、Java、C++、COBOL、ECMAScript、PHP、VB6、VB.net,...

它确实使用语言精确的解析器来构建抽象语法树,对应于确切的程序结构,然后比较它们的相似性。这意味着它不会被空格、格式化、cmets 甚至不同的文字“拼写”混淆(例如,3.14159 与 .00314150E3 相同)。

它会生成一份报告,准确地显示代码块的相似之处,以及它们之间的差异。您可以在链接中查看示例报告。

【讨论】:

  • 您的链接失效了?您能否更新您的回复?
猜你喜欢
  • 2011-02-10
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
相关资源
最近更新 更多