我有一些机器学习的经验,主要是聚类和分类器。然而,当涉及到NLP时,我有点像个新手。
尽管如此,我意识到处理自然语言所涉及的各种问题和困难,例如词性、歧义、否定检测等。我也知道某些表示文本的模型,如单词袋和字向量表示。
虽然我的具体问题是文本问题,但在我看来,这并不是一个自然的语言问题。相反,我需要比较1000 s的编程代码文件,以确定它们之间有多相似。
不像自然语言处理,我们删除停止词,我们非常关心的问题,如歧义和否定的范围等,在编程代码没有歧义,至少没有保留关键字,如“函数”,“如果”,“其他”,同时,“结束”,也没有任何歧义与核心数学函数和其他运算符,如“日志”,“罪恶”,“坦赫”等。
对于我的问题,我们可以假设所有文件都使用相同的编程语言(比如R),并且假设每个编程文件最多包含250行代码。
最初的目标是生成一个相关矩阵,以显示代码文件之间的相似性。
在我看来,有两种方法可以解决这个问题:
这是我在一个简单的解决方案中所做的唯一的预处理。然后,我建议使用Doc2Vec模型将每个文件简化为单个向量,然后通过计算相关系数来比较不同的向量。对于人们来说,这对于一个非常快速和简单化的解决方案来说是否合理?如果没有,请建议您将做哪些其他预处理和/或您将使用什么模型来表示文件。
以上显然只是可能遇到的问题类型的一些例子。
目的不是确定是否存在抄袭,也不确定代码部分是否从一个代码文件复制到另一个代码文件。相反,如果随后在一个代码文件中发现了严重错误( bug或逻辑错误),那么我需要一种方法来识别在其他代码文件中发生相同错误的可能性,即通过从一个文件复制到另一个文件来传播该错误?
人们将如何处理更高级的问题?例如,为了解决最后一个问题(即确定代码的两个部分在逻辑上是否等效),我可以看到两种方法来处理这个问题:
除此之外,我不知道如何处理这个问题。
对使用的方法和/或资源有什么想法吗?
我很高兴能在这个问题上得到一个很好的参考或资源。
发布于 2018-04-27 15:04:07
您可以从软件相似性度量开始。它可以在一组软件文档中找到类似的软件文档。它有几个好的特性-空白不敏感,噪声抑制,和位置无关。它基于更一般的文档指纹概念,其中哈希是由文档构造的。对文档哈希值进行比较。在风水纸中有一个更技术性的解释。
这里是一篇综述性论文,介绍了Levenshtein字符串编辑距离、RTED-鲁棒树编辑距离算法和图形编辑距离等技术。
https://datascience.stackexchange.com/questions/30937
复制相似问题