我想找出源树拥有哪个许可证。计算机应该提出哪些许可证文件紧密匹配的建议。然后我想将文本与meld
手动进行比较。
在典型的源代码树中,我有可以包含任何类型(许可证)文本的文本文件,并且希望将其与/licenses/*
.
该指标应强调人类可读文本的内容。
- 单个额外单词的权重较低
- 拼写错误权重较低
- 空白的最小权重
如何将文件与 Linux 工具进行比较?
$> supertool unknown.txt /licenses/* # example of an imaginary solution
0.10 gmap.txt
0.12 gnuplot.txt
0.14 GOG-EULA.txt
0.25 google-chrome.txt
0.13 Google-TOS.txt
0.87 GPL-1.txt
0.95 GPL-1+.txt
0.99 GPL-2.txt
0.56 GPL-2+.txt
0.60 GPL-3.txt
0.78 GPL-3+.txt
我的一个想法是计算许可证的熵,然后连接unknown.txt
许可证并再次计算熵ent
。具有最小附加熵的文件是相似的。还有更好的想法吗?
答案1
有专门的工具可以实现这一点,您正在寻找一个开源许可合规性工具。可用工具的几个示例:
示例输出可能如下所示。大多数工具还会扫描源文件标头以获取许可证,因此您需要将扫描限制为仅扫描许可证文件。
Directory File License Confidence Size
------------------------------------------------------------------------------------
/home/vtrefny/projects/blivet/ COPYING GPL-2.0-or-later 99.47% 17.7K
/home/vtrefny/projects/blivet/ COPYING.LESSER LGPL-2.1-or-later 99.63% 25.9K
------------------------------------------------------------------------------------
还有更多,您应该能够找到适合您使用的工具。如果您需要一些非常具体的东西,其中一些还提供库/API。
答案2
作为(可能有偏见的)维护者https://github.com/nexB/scancode-toolkit我想说这是最好的选择好吧:D
特别是,它的方法与此处列出的或其他可用的大多数其他工具不同。它使用多种技术,最终在您的文本和约 30,000 个许可文本和通知之间进行比较(如 OP 引用的融合)。诀窍是让它足够快。使用 diff 可以提供更高的准确性:它现在是该领域的行业领先工具,并且被大多数认真对待开源许可证检测的工具和组织所使用。