如何解析许可证文件?(阿帕奇,弗洛拉,BSD,…)

2024-09-30 23:37:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从许可证文件中获取许可证名称和版本。你知道吗

是否存在所有Flora、Apache、BSD等的许可证文件格式?你知道吗

例如,内容将是

Flora License

Version 1.1, April, 2013

http://floralicense.org/license/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

<...>

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Flora License, Version 1.1 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

    http://floralicense.org/license

用下面的regex读取名称和版本安全吗?你知道吗

r'.*Licensed under the (.*) License, Version (.*) \(the \"License\"\).*;'

Tags: andoftheorg版本名称httplicense
1条回答
网友
1楼 · 发布于 2024-09-30 23:37:16

这是不可能用一个regex来完成的,用一个完全函数化的语言(有或没有regex)来完成是非常复杂的。你知道吗

对于如何编写这些内容没有标准;不同的许可证使用不同的措辞,因此您将无法使用一个包含所有内容的模板来提取您要查找的项目。你知道吗

要从英语文本中解析出意义,您基本上需要Natural Language Parsing(NLP),这可能需要5-10年的时间才能实现。你知道吗

最好的办法可能是编写正则表达式来匹配您知道的每个许可证,并将它们放在一个巨大而丑陋的if/then/else语句中。许多许可证看起来与GNU-GPL或BSD许可证大致相当,因此您有希望为90%以上的流行许可证获得三个或更多好的regex,但总会有异常值。你知道吗

您可能可以通过拼写检查系统作弊并获取异常值:如果不是字典中的单词,可能是许可证名称。你知道吗

(我没有提供“最佳匹配”的示例实现,因为这仍然是一个过于宽泛的问题。您需要整理一组许可证,然后创建一系列regex,这些regex可以从每个regex中提取尽可能多的名称,确定顺序,然后将它们放入if/then/else条件中。如果您想得到帮助,您必须提出一个问题,提供您要解析的每个许可证的文本以及您尝试过的正则表达式的示例。)

相关问题 更多 >