2012-01-17 195 views

回答

3

我一直在研究这个问题3年以上,让我告诉你这是远远不平凡的,你不会用一个算法解决它,更不用说tf-idf和余弦相似性。

有许多的挑战,我写的一些人:

  1. 类似的许可证文本(AGPL/GPL/LGPL,BSD/apache1.1/OpenSSL的,MIT/ISC /卷曲)是极其困难消除歧义,并且将具有极高的余弦相似性(除非你对特征选择很聪明,也许...)
  2. 同样适用于不同版本的同一许可证(LGPL 2.0/2.1)
  3. LICENSE.TXT的文件通常包含多个许可证
  4. bsd通知非常难以捕捉,即。你有相同的文字,除权利人

你将最终使用一种方法的组合,不幸的是没有银弹。

+0

坏消息:我想我将不得不做一些与确切的字符串匹配的一部分,其余我会手动检查...例如,如果许可证文本包含此URL http://www.apache.org/licenses/LICENSE-2.0.txt,则表示它确实是Apache 2.0版。 – ilija 2012-01-18 23:33:10

+1

检出Fossology项目。这是尝试为许可证和其他类型的IP标识创建自动扫描源。萨维诺绝对正确,没有银弹。 Linux基金会的SPDX项目至少最终标准化了已知开源许可证的一组通用标识符。如果开发人员开始在源代码头中使用它们,它将使解析源代码变得更容易。 – 2012-02-10 21:40:18

1

您可以使用Lucene将所有许可编制为文档(每个Lucene文档都是许可证)。当你有一个新的license.txt你想检查它对应的licene时,你可以使用整个license.txt作为查询来查询lucene。

这将使用TF-IDF和所有的IR东西。但你也可以使用更具体的问题,如检查特定的关键字。

相关问题