【问题标题】:How to compute similarity between two license.txt files?如何计算两个 license.txt 文件之间的相似度?
【发布时间】:2012-02-12 15:05:25
【问题描述】:

我想计算许可证的 txt 文件之间的相似性,这样我就可以根据 license.txt 确定它对应的许可证。我应该使用什么样的信息检索技术?一旦我对 tf-idf 进行了编程,但我不确定这是否适用于此。你有什么建议?

【问题讨论】:

    标签: file text information-retrieval similarity


    【解决方案1】:

    我在这个问题上工作了 3 年多,让我告诉你它远非微不足道,而且你不会用单一算法来解决它,更不用说 tf-idf 和余弦相似度了。

    有很多挑战,我写了一些:

    1. 类似的许可文本(agpl/gpl/lgpl、bsd/apache1.1/openssl、mit/isc/curl)极难消除歧义,并且具有极高的余弦相似度(除非您对特征选择非常聪明,也许...)
    2. 同样适用于同一许可证的不同版本 (lgpl 2.0/2.1)
    3. LICENSE.TXT 文件通常包含多个许可证
    4. bsd 通知很难捕捉,即。你有相同的文字,除了权利人

    你最终会使用多种方法,不幸的是没有灵丹妙药。

    【讨论】:

    • 坏消息:我想我必须对确切的字符串匹配做一些事情,其余的我会手动检查......例如如果许可证文本包含此 url apache.org/licenses/LICENSE-2.0.txt,则意味着它肯定是 Apache 2.0 版。
    • 检查 Fossology 项目。这是为许可证和其他类型的 IP 标识创建自动扫描源的尝试。萨维诺是绝对正确的,没有灵丹妙药。 Linux 基金会的 SPDX 项目至少最终标准化了一组已知开源许可证的通用标识符。如果开发人员开始在源代码标头中使用它们,那么解析源代码会容易得多。
    【解决方案2】:

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

    那将使用 TF-IDF 和所有 IR 的东西。但您也可以针对问题使用更具体的方法,例如检查特定关键字。

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2012-03-11
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多