commit | c65735a948f193d619a05871e068a4d4c451b705 | [log] [tgz] |
---|---|---|
author | Bill Neubauer <wcn@google.com> | Fri Nov 05 14:20:00 2021 -0700 |
committer | Bill Neubauer <wcn@google.com> | Wed Mar 16 15:34:52 2022 -0700 |
tree | b87cbb1550a112353e59d493ef1c373c038a41db | |
parent | 96b685b82f5466e36faa53de2f3cd35196376e60 [diff] |
Fix the induced phrases search to not trigger on modified URLs. URLs are stored as a single token by the classifier, meaning they can only introduce 1 error in exact matching, which is good for approximate matching, since a lengthy URL that is changed would otherwise introduce additional errors. However, this doesn't work well with the induced phrases check since a modified URL would get stored as a insert/delete pair that might contain the triggering word (e.g. "apache"). This meant that a license that had a different Apache URL from our pristine copies would get rejected because it "introduced" the word "apache" This fixes the logic to not trigger an induced phrase condition if the insert is paired with a delete that also contains the induced phrase, since this means it did exist in the document after all. Diagnostic logging for the diffing phase now includes output to help triage these conditions. This proved very useful in identifying older Apache licenses that were incorrectly rejected and sometimes barely matching non-applicable licenses. PiperOrigin-RevId: 407908906
The license classifier is a library and set of tools that can analyze text to determine what type of license it contains. It searches for license texts in a file and compares them to an archive of known licenses. These files could be, e.g., LICENSE
files with a single or multiple licenses in it, or source code files with the license text in a comment.
A “confidence level” is associated with each result indicating how close the match was. A confidence level of 1.0
indicates an exact match, while a confidence level of 0.0
indicates that no license was able to match the text.
Adding a new license is straight-forward:
Create a file in licenses/
.
.header
” to it. See licenses/README.md
for more details.Add the license name to the list in license_type.go
.
Regenerate the licenses.db
file by running the license serializer:
$ license_serializer -output licenseclassifier/licenses
Create and run appropriate tests to verify that the license is indeed present.
identify_license
is a command line tool that can identify the license(s) within a file.
$ identify_license LICENSE LICENSE: GPL-2.0 (confidence: 1, offset: 0, extent: 14794) LICENSE: LGPL-2.1 (confidence: 1, offset: 18366, extent: 23829) LICENSE: MIT (confidence: 1, offset: 17255, extent: 1059)
The license_serializer
tool regenerates the licenses.db
archive. The archive contains preprocessed license texts for quicker comparisons against unknown texts.
$ license_serializer -output licenseclassifier/licenses
This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google.