#许可 #命令行工具 #源代码 #检测 #开放 #内容 #askalono

应用 askalono-cli

一款检测许可证文件内容的工具

11 个版本

0.4.6 2022年6月17日
0.4.4 2021年11月21日
0.4.3 2020年9月24日
0.4.2 2020年1月14日
0.1.0 2018年2月1日

#10 in #内容

每月 29 次下载

Apache-2.0

1.5MB
2K SLoC

askalono

askalono 是一个库和命令行工具,用于帮助检测许可证文本。它被设计为快速、准确,并支持广泛的各种许可证文本。

askalono crate documentation

注意

此工具不提供法律建议,也不是律师。它努力将您的输入与类似许可证文本的数据库相匹配,并告诉您它认为的相似匹配项。但它不能告诉您给定的许可证是否对项目具有权威性。它也不能告诉您在识别许可证后如何处理许可证。您无权依赖此工具输出的准确性,并且在使用此工具时可能出现的任何许可问题应寻求独立的法律建议。

用法

在命令行上

GitHub 上的发行版部分提供了预构建的二进制文件。Rust 开发者可以通过运行 cargo install askalono-cli 来获取副本。

基本用法

askalono id <filename>

其中 <filename> 是包含要分析的许可证文本的文件(不是文件夹)。在许多项目中,此文件被称为 LICENSECOPYING。askalono 将分析文本并输出其认为的内容。

如果 askalono 无法识别文件,它可能只是它不认识的许可证。但如果它实际上是带有文件标题(或页脚,或任何中间部分)的源代码,它可能能够更深入地挖掘。要尝试此操作,请传递 --optimize 标志

askalono id --optimize <filename>

如果您想发现目录树中的许可证文件,askalono 提供了 crawl 动作

askalono crawl <directory>

作为一个库

目前,StoreLicenseContent 可用于使用。

了解如何在早期状态中将askalono作为库使用,最好的方式是查看示例。文档中也有一些示例。

详细信息

实现

tl;dr:Sørensen–Dice评分,多线程,压缩缓存文件

askalono的核心功能是构建输入文本的双词(词对),并将其与其他已知的许可证文本进行比较,以查看它们之间的相似度。每个匹配项都会用一个Sørensen–Dice系数进行评分,并查找最高的结果。在匹配之前有一些基本的预处理,但并没有用于确定匹配的手动维护的正则表达式或编辑。

匹配过程细节

  1. 读取输入文本
  2. 尽可能地进行标准化——Unicode字符、空白、引号样式等都被简化为通用形式。
    • 删除那些在许可证中经常变化的行,如“版权20XX某个人”。
  3. 将标准化后的文本标记化为一组双词。
  4. 并行地,将双词集与askalono知道的全部其他集进行比较。
  5. 结果列表排序,识别顶级匹配项,并返回结果。

为了优化启动,askalono构建了一个包含许可证文本的数据库(应用上述相同的标准化技术),并将这些数据持久化到MessagePack'd & zstd压缩缓存文件中。此缓存在启动时加载,并且可以选择性地嵌入到二进制文件中。

名称

它在世界语中意为“洋葱”。你可以尝试从中得出某种隐藏的意义,但真正的原因只是洋葱很美味,世界语是一种有趣的语。

这与其他解决方案有何不同?

在此领域还有几个其他优秀项目,包括licenseeLiDScanCode。这些项目试图获取项目许可证的更全面视图,并可以查看其他元数据来源以尝试找到答案。这两个项目都启发了askalono的创建,最初是出于好奇心,然后是作为一个严肃的项目。

askalono专注于匹配文本本身的问题——这通常是难以优化速度和准确性的部分。askalono可以被视为更大系统中的管道部分。askalono命令行应用程序包括其他一些功能,如目录爬虫,但这些主要是为了在更系统性的解决方案之前进行快速一次性使用。(如果你在寻找这样的解决方案,请查看我刚才提到的项目!)

许可证从哪里来?

许可证数据直接来自SPDX:https://github.com/spdx/license-list-data

askalono可以解析该存储库中包含的“json”格式以生成其缓存。

目前,askalono的默认数据集中不接收额外许可证的请求——其数据集是SPDX自己的。

贡献

欢迎贡献!有关更多信息,请参阅CONTRIBUTING

许可证

本库采用Apache 2.0许可证

依赖项

~8–19MB
~262K SLoC