12 个版本
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.1 | 2018年2月1日 |
#3 in #accurate
38,788 个月下载量
被 13 个 (11 个直接) 包使用
75KB
1.5K SLoC
askalono
askalono 是一个库和命令行工具,用于帮助检测许可证文本。它设计得快速、准确,并支持广泛的各种许可证文本。
注意
此工具不提供法律咨询,也不是律师。它努力将您的输入与类似许可证文本的数据库进行匹配,并告诉您它认为的相似匹配。但它不能告诉您所给的许可证是否对项目具有权威性。它也不能告诉您在识别许可证后应该做什么。您无权依赖此工具输出的准确性,并且在使用此工具时出现的任何许可问题都应寻求独立的法律咨询。
用法
在命令行上
预构建的二进制文件可在 GitHub 上的 发布部分 获取。Rust 开发者也可以通过运行 cargo install askalono-cli
获取副本。
基本用法
askalono id <filename>
其中 <filename>
是包含要分析的许可证文本的文件(不是文件夹)。在许多项目中,此文件被称为 LICENSE
或 COPYING
。askalono 将分析文本并输出其认为的内容。
如果 askalono 无法识别文件,可能只是它不认识的许可证。但如果它实际上是带有文件头(或尾,或中间的任何内容)的源代码,它可能能够深入挖掘。要尝试此操作,请传递 --optimize
标志
askalono id --optimize <filename>
如果您想发现目录树中的许可证文件,askalono 提供了 crawl
动作
askalono crawl <directory>
作为一个库
目前,Store
和 LicenseContent
可用于使用。
了解如何在早期状态下将askalono作为库使用,最好的方式是查看示例。一些示例也已在文档中提供。
详细信息
实现
简单来说:Sørensen–Dice评分,多线程,压缩缓存文件
askalono的核心功能是构建输入文本的大词组(词对),并将其与其他已知的许可证文本进行比较,以查看它们的相似程度。它使用Sørensen–Dice系数对每个匹配项进行评分,并寻找最高得分。在匹配之前有一些最小预处理,但没有用于确定匹配的手动维护的正则表达式或整理。
详细匹配过程
- 读取输入文本
- 尽可能地进行规范化处理 - Unicode字符、空白字符、引号风格等都被简化为通用的形式。
- 删除那些在许可证中经常改变的行,如“版权所有 20XX 某人”。
- 将规范化文本标记化为一组大词组。
- 并行地,将大词组与askalono知道的所有其他词组进行比较。
- 对结果列表进行排序,确定最佳匹配,并返回结果。
为了优化启动,askalono构建一个许可证文本数据库(应用上述相同的规范化技术),并将这些数据持久化到MessagePack'd & zstd压缩的缓存文件中。此缓存在启动时加载,并且可以选择性地嵌入到二进制文件中。
名称
它在世界语中的意思是“洋葱”。你可以尝试从中推断出隐含的意义,但真正的理由仅仅是洋葱很美味,世界语是一种有趣的言语。(在作者看来。请注意,作者并不是一个优秀的世界语者,所以请在这个项目中用英语交流。)
这与其他解决方案有何不同?
这个领域还有其他几个非常出色的项目,包括licensee、LiD和ScanCode。这些项目试图获取项目许可的一个更全面的视角,并且可以查看其他元数据的来源来尝试找到答案。这两个项目都启发了askalono的创建,最初是出于好奇,后来则是一项严肃的项目。
askalono专注于匹配文本本身的问题——这通常是难以优化速度和准确性的部分。askalono可以被视为更大系统中的一块“管道”。askalono的命令行应用程序包括其他一些有用的功能,如目录爬虫,但这些主要用于在更系统的解决方案之前进行快速的一次性使用。(如果你正在寻找这样的解决方案,请查看我刚才提到的项目!)
许可证从哪里来?
许可证数据直接来源于SPDX:https://github.com/spdx/license-list-data
askalono可以解析该存储库中包含的“json”格式以生成其缓存。
目前,askalono的默认数据集不接收额外的许可证请求——其数据集是SPDX的。
贡献
我们非常欢迎贡献!有关更多信息,请参阅CONTRIBUTING。
许可协议
此库在Apache 2.0许可协议下授权。
依赖关系
~3.5–6.5MB
~146K SLoC