人間が読めるテキストファイル(ライセンスファイル)間の類似性や距離をどのように測定しますか?

人間が読めるテキストファイル(ライセンスファイル)間の類似性や距離をどのように測定しますか?

ソースツリーにどのライセンスがあるか知りたいです。コンピュータは、どのライセンスファイルが密接に一致するかを提案する必要があります。その後、meldテキストとマニュアルを比較したいと思います。

一般的なソースツリーには、任意の種類の(ライセンス)テキストを含むことができるテキストファイルがあります/licenses/*

指標は、人間が読めるテキストの内容を強調する必要があります。

  • 1つの追加の単語には、より少ない重みが与えられます。
  • スペルミスには重みがあまり適用されません。
  • スペースの最小重量

Linuxツールとファイルを比較するには?

$> supertool unknown.txt /licenses/*  # example of an imaginary solution

0.10 gmap.txt
0.12 gnuplot.txt
0.14 GOG-EULA.txt
0.25 google-chrome.txt
0.13 Google-TOS.txt
0.87 GPL-1.txt
0.95 GPL-1+.txt
0.99 GPL-2.txt
0.56 GPL-2+.txt
0.60 GPL-3.txt
0.78 GPL-3+.txt

私が持っている1つのアイデアは、ライセンスのエントロピーを計算し、ライセンスをリンクしてunknown.txtエントロピーを再計算することでしたent。追加のエントロピーが最小化されたファイルは似ています。より良いアイデアがありますか?

答え1

これを達成するための専門ツールがあります。あなたはそのうちの1つを探しています。オープンソースライセンスに準拠ツール。利用可能なツールのいくつかの例:

サンプル出力は次のとおりです。ほとんどのツールはソースファイルヘッダーでもライセンスを検索するため、ライセンスファイルのみを検索するように制限することをお勧めします。

Directory                       File            License            Confidence  Size
------------------------------------------------------------------------------------
/home/vtrefny/projects/blivet/  COPYING         GPL-2.0-or-later   99.47%      17.7K
/home/vtrefny/projects/blivet/  COPYING.LESSER  LGPL-2.1-or-later  99.63%      25.9K
------------------------------------------------------------------------------------

より多くのものがあり、自分に合ったツールを見つけることができます。それらのいくつかは、非常に具体的なものが必要な場合はライブラリ/APIも提供します。

答え2

(おそらく偏見のある)管理者としてhttps://github.com/nexB/scancode-toolkit最高の選択ではないかと思います:D

特に、このアプローチは、ここに記載されている他の方法で利用可能な他のほとんどのツールとは異なります。さまざまな技術を使用して、最終的にあなたのテキストと約30,000のライセンスされたテキストと通知(OPで引用された融合など)を比較します。秘訣は十分に速くすることです。 diff を使用すると精度が向上します。これは業界で最高のツールとなり、オープンソースのライセンスセンシングを真剣に受け入れるほとんどのツールや組織で使用されています。

関連情報