如何解析LICENSE文件? (Apache,Flora,BSD,......)

时间:2017-09-18 11:37:15

标签: python regex parsing

我想从LICENSE文件中获取许可证名称和版本。

是否存在所有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

使用以下正则表达式读取名称和版本是否安全?

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

1 个答案:

答案 0 :(得分:1)

单个正则表达式无法做到这一点,并且使用完整功能语言(使用或不使用正则表达式)非常复杂。

这些书写方式没有标准;不同的许可使用不同的措辞,因此您无法想出一个全包模板来提取您正在寻找的项目。

要解析英文文本中的含义,您基本上需要Natural Language Parsing(NLP),这可能需要5到10年的时间才可以使用。

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

你可以通过拼写检查系统作弊并获取异常值:如果它不是字典单词,也许它是许可证名称。

(我没有提供一个示例实现#34;最好的选择&#34;因为它仍然是一个太宽泛的问题。你需要策划一系列许可证,然后创建一个一系列正则表达式,可以从每个正则表达式中提取尽可能多的名称,找出顺序,然后将它们放在if / then / else条件中。如果你想要帮助这样做,你将不得不问一个提供您要解析的每个许可证的文本以及您尝试过的正则表达式样本的问题。)