2012-01-17 2 views
2

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

ответ

3

Я работаю над этой проблемой в течение 3 лет, позвольте мне сказать вам, что это далеко не тривиально, и вы не собираетесь решать ее с помощью единого алгоритма, не говоря уже о сходстве tf-idf и косинуса.

Есть целый ряд проблем, я пишу некоторые из них:

  1. подобные тексты лицензий (AGPL/GPL/LGPL, BSD/apache1.1/OpenSSL, мит/ISC/локон) чрезвычайно трудно чтобы устранить неоднозначность и иметь чрезвычайно высокое сходство с косинусом (если вы не очень умны в выборе функций, возможно ...)
  2. то же самое относится к разным версиям одной и той же лицензии (lgpl 2.0/2.1)
  3. LICENSE.TXT файлы часто содержат несколько лицензий
  4. Уведомления bsd очень трудно поймать, то есть. у вас есть тот же текст, за исключением правообладателя

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

+0

Плохая новость: я думаю, мне нужно будет кое-что сделать с точным совпадением строк, а остальное я проведу вручную. если текст лицензии содержит этот URL-адрес http://www.apache.org/licenses/LICENSE-2.0.txt, это означает, что это версия Apache версии 2.0. – ilija

+1

Оформить заявку на проект «Фосфология». Это попытка создать автоматическое сканирование источника для лицензий и других видов IP-идентификации. Савино абсолютно прав, нет серебряной пули. Проект SPDX Linux foudation, по крайней мере, окончательно стандартизирует общий набор идентификаторов известных лицензий с открытым исходным кодом. Если разработчики начнут использовать их в заголовках исходного кода, это значительно облегчит синтаксический анализ источника. –

1

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

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

Смежные вопросы