检测Python源文件之间的相似性

pyastsim的Python项目详细描述


皮亚斯特西姆

Build StatusPyPI version

计算一批源文件之间的相似性。在

安装

可以使用pip安装程序:

pip3 install pyastsim

使用

^{pr2}$

示例

显示使用默认设置检查一组文件的相似性:

pyastsim *.py

将自定义阈值设置为或多或少敏感(默认阈值为80%相似性):

pyastsim --threshold 90 *.py

报告类似文件时显示完全差异:

pyastsim --show-diff *.py

在执行比较之前,请从AST中删除除一个以外的所有函数:

pyastsim --function my_func *.py

语言支持

  • Python(使用内部AST进行比较)
  • C/C++(使用GCC组件输出比较)

差额计算

通过首先将每个提供的文件转换为抽象语法树(AST)来计算差异。然后对AST进行规范化以删除注释、docstring和标准化标识符名称。然后我们将AST转换回Python源代码,并计算每对源文件之间的Damerau–Levenshtein距离。我们将这个数字除以被比较文件中unicode代码点的平均数,从而进一步规范化这个数字。这给了我们文件之间大致的相似性百分比。总结一下:

  1. 转换为AST
  2. 删除注释和docstring
  3. 规范化标识符
  4. 转换回源
  5. 计算Damerau–Levenshtein距离
  6. 将编辑距离转换为百分比

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
添加文件发送者后,Java聊天socket不显示消息   java显示存储在MySQL中的BLOB图像,无需写入磁盘   连接到SQLite数据库时发生java GAE受限类错误   如何在Java中自动从外部源(如文件)读取对象属性?   java使用google应用程序引擎发送电子邮件   java找不到应用程序。属性文件从War文件的外面   关于GridLayout和paintComponent方法的用户界面Java Swing问题   java6项目中的JavaOneLogin javasaml 2.0   数组Java GUI将文本文件数据导入JTable   游戏引擎从另一个类或文件中设置java数组的元素   构建如何将java类修补/复制到本地WebSphere服务器?   添加拦截器并使用Dagger2注入拦截器后,java翻新服务始终为空   java Guava LoadingCache如何处理备份存储中不存在的密钥   组织。openqa。硒。NoSuchSessionException:会话ID为空。在自动化中获取此错误(使用testng、selenium、java)   java是从4GB文件创建trie(JSON)的最快方法,只需1GB的ram?