Как вычислить сходство между двумя файлами license.txt? - PullRequest
2 голосов
/ 18 января 2012

Я хотел бы вычислить сходство между текстовыми файлами лицензий, чтобы затем я мог на основании файла license.txt определить, какой лицензии он соответствует. Какую технику поиска информации я должен использовать? Однажды я запрограммировал tf-idf, но я не уверен, применимо ли это здесь. Что ты предлагаешь?

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Я работаю над этой проблемой более 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 уведомления очень трудно поймать, т.е. у вас тот же текст, кроме правообладателя

Вы в конечном итоге будете использовать комбинацию подходов, к сожалению, серебряной пули нет.

1 голос
/ 18 января 2012

Вы можете использовать Lucene для индексирования всех лицензий в качестве документов (каждый документ Lucene является лицензией).Если у вас есть новый файл license.txt, который вы хотите проверить, какому лицензию он соответствует, вы можете просто запросить lucene, используя в качестве запроса весь файл license.txt.

Это будет связано с использованием TF-IDF и всего IRвещи.Но вы также можете использовать что-то более специфичное для проблемы, например, проверку определенных ключевых слов.

...