3 个稳定版本
1.1.1 | 2023年11月24日 |
---|---|
1.1.0 | 2023年11月10日 |
1.0.0 | 2020年10月30日 |
#319 in 文本处理
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 ());
}
}