#检测 #许可证 #源代码 #管道 #归一化 #最小哈希索引 #最小哈希器32

bin+lib whichlicense_detection

用于检测 WhichLicense 项目使用的许可证的工具

18 个版本 (6 个主要变更)

6.0.0 2023 年 6 月 17 日
5.1.0 2023 年 6 月 17 日
4.0.2 2023 年 5 月 30 日
3.0.1 2023 年 5 月 23 日
0.2.0 2023 年 5 月 16 日

#465文本处理

Download history 21/week @ 2024-03-11 57/week @ 2024-04-01 590/week @ 2024-04-22

每月下载量 187

Apache-2.0

33KB
410

WhichLicense 检测

这是一个库,用于简化源代码中许可证的检测。

用法

许可证检测

高保真检测

let mut gaoya = GaoyaDetection {
    index: MinHashIndex::new(num_bands, band_width, 0.5),
    min_hasher: MinHasher32::new(num_bands * band_width),
    shingle_text_size,
    normalization_fn: DEFAULT_NORMALIZATION_FN,
};
gaoya.load_from_file("licenses");
// OR: 
// for l in load_licenses_from_folder("./licenses/RAW"){
//     gaoya.add_plain(&l.name, &strip_spdx_heading(&l.text));
// }

Fuzzyhash-rs 检测

let mut fuzzy = FuzzyDetection {
        licenses: vec![],
        min_confidence: 50,
        exit_on_exact_match: false,
        normalization_fn: DEFAULT_NORMALIZATION_FN,
};
fuzzy.load_from_file("licenses");
// OR: 
// for l in load_licenses_from_folder("./licenses/RAW"){
//     fuzzy.add_plain(&l.name, &strip_spdx_heading(&l.text));
// }

归一化函数

归一化函数用于在算法处理之前规范化许可证文本。这样做是为了让算法能够专注于许可证文本本身,而不是许可证文本的格式,这最终提高了算法的准确性(更高的置信度)。

管道系统

管道系统是为了自动提高许可证检测输出的结果而开发的,它允许在置信度太低时进行进一步处理。管道通过在每次执行一个段时同时与算法进行检查来工作。如果顶级(置信度最高)许可证的置信度高于所需的置信度,则管道将停止运行。

步骤如下

  1. 使用给定的段创建管道。
  2. 直接从算法获取初始样本,而不执行任何管道段。
  3. 系统检查顶级(置信度最高)许可证的置信度是否高于所需的置信度。
    • 如果是,则管道停止运行并返回结果。
    • 如果不是,则管道继续到步骤 4。
  4. 在运行的许可证上执行下一个段(从第一个段开始)。
  5. 系统检查顶级(置信度最高)许可证的置信度是否高于所需的置信度。
    • 如果是,则管道停止运行并返回结果。
    • 如果不是,则管道回到步骤 4 并运行下一个段。

批量段允许您一个接一个地运行多个段,而无需在每个段后对算法进行检查(即测试)。在所有批量段执行完毕后,将对算法进行测试。

示例

let pipeline = Pipeline::new(vec![
    Segment::Remove(Using::Regex(Regex::new(r"...").unwrap())),
    Segment::Remove(Using::Text("...".to_string())),
    Segment::Replace(Using::Text("...".to_string()), "***".to_string()),
    Segment::Batch(vec![
        Segment::Remove(Using::Regex(Regex::new(r"...").unwrap())),
        Segment::Remove(Using::Regex(Regex::new(r"...").unwrap())),
    ]),
]);

let results = pipeline.run(&algorithm, "<your_incoming_license>", 100.0);

贡献者

ScanCode 许可证数据

初始数据库是通过使用ScanCode工具包中的许可证数据生成的。如果您选择不使用ScanCode许可证数据库,则无需在项目中使用此版权声明。但是,如果您确实使用了ScanCode许可证数据库,则必须在您的项目中包含此版权声明。

版权所有(c)nexB Inc. 及他人。保留所有权利。ScanCode是nexB Inc.的商标。SPDX许可证标识符:CC-BY-4.0 请参阅https://creativecommons.org/licenses/by/4.0/legalcode以获取许可证文本。有关nexB OSS项目的更多信息,请访问https://github.com/nexB/scancode-toolkit。请访问https://aboutcode.org

依赖项

~5.5–8MB
~146K SLoC