#similarity #nlp #text-document #programming-language #plagiarism #duplicates #collusion

bin+lib ferret

一种基于三元的工具,用于检测文本文档或程序代码组之间的相似性

3 个稳定版本

1.1.1 2023年11月24日
1.1.0 2023年11月10日
1.0.0 2020年10月30日

#319 in 文本处理

GPL-3.0-or-later

51KB
994 代码行

Ferret:文本和代码中的复制检测

Ferret 是一种复制检测工具,用于定位多个文本文档或源文件中的重复文本或代码。Ferret 旨在检测给定文件集中的复制(共谋)。

作为一个库,Ferret 可以用来分析程序代码或自然语言文本到三元组,并比较文档对以寻找相似性。

特性

  • 比较包含自然语言或计算机语言的文本文档
  • 基于文档对中的三元组计算相似性度量
  • 识别并适当标记了许多主要的编程语言
  • 分析输出包括
    • 按相似度排序的成对比较,包括三元组计数
    • 每个文件/组中独特三元组的计数
    • 从三元组到包含它们的文档列表的反向索引
    • XML 详细比较文档对

命令行使用

$ ferret --help
Usage: ferret [-ghluvx] filename [filenames...]
 -g, --group       Use subdirectory names to group files
 -h, --help        Show help information
 -l, --list-trigrams
                   Output list of trigrams found
 -u, --unique-counts
                   Output counts of unique trigrams
 -v, --version     Version number
 -x, --xml-report  filename1 filename2 outfile : Create XML report

库使用

取一些文件并找到最相似的两个

use ferret::documents::Documents;

fn main() {
    let files = ["txt1.txt".to_string(), "txt2.txt".to_string(), "txt3.txt".to_string()];
    let docs = Documents::new(&files[..]);
    let results = docs.sorted_results(false);
    println!("Most similar pair: {}", results[0]);
}

取一个文件,并逐三元组读取

use ferret::trigram_reader::TrigramReader;
use std::path::PathBuf;

fn main() {
    let path = PathBuf::from(r"test.rb");
    let mut reader = TrigramReader::new(&path);

    while reader.read_trigram () {
        println!("Trigram {}", reader.last_trigram ());
    }
}

无运行时依赖