Найти похожие документы между двумя кучами документов

278
Brian

Я ищу способы найти похожие документы между двумя группами текстовых документов. Я знаю способы сравнить два файла. Но я ищу способы сделать это между двумя группами файлов.

Допустим, у Группы 1 есть 100 000 документов, а у Группы 2 - 5000 документов. Я хочу знать, похож ли какой-либо документ в Группе 2 на документы в Группе 1, и степень сходства.

Спасибо за любой совет.

В

0
На чем основано сходство? Название? Тип? Размер файла? Содержание? Eric F 6 лет назад 0

1 ответ на вопрос

2
Gabe

Я собираюсь предположить, что вы заботитесь о файле "содержимого". Определить идентичные файлы очень просто, любой искатель дублирования сделает свое дело:

  1. GNU / Linux: find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD
  2. GNU / Linux: fdupes (часто доступно с sudo apt install fdupes)
  3. GNU / Linux: duff (часто доступно сsudo apt install duff
  4. Windows: CCleaner
  5. Окна: dupeGuru [1]
  6. Windows: средство для удаления дубликатов файлов

Для «похожих» файлов в целом это становится сложнее - намного сложнее. Если вы ищете похожие фотографии / изображения, посмотрите, как найти дубликаты фотографий в очень большом пуле данных (от десятков до сотен гигов)? , dupeGuruвыше есть поиск сходства изображений, который некоторые считают нормальным, но он пропустит некоторые, которые, по вашему мнению, почти идентичны (или идентичны). Фактически, стенографически измененные изображения будут выглядеть идентично вам, но не алгоритму сравнения файлов. Некоторые ИИ обработки изображений преуспеют с этим, но я предполагаю, что вы не хотите создавать один из них.

Теперь о действительно плохих новостях: если вы хотите искать все виды файлов, которые «похожи», но не идентичны, такие как текстовые файлы, PDF-файлы, ZIP-файлы и т. Д., Вам нужно будет найти конкретные обработчики для каждого, и вы можете этого не делать будьте довольны результатами даже после большой работы.

Зачем? Давайте рассмотрим два документа Microsoft Word в качестве примера: один с «Hello World», а другой «Hello world!» («W» -> «w» и «!» Добавлены). Я предполагаю, что вы хотите, чтобы у них был очень высокий показатель сходства. К сожалению, они могут радикально отличаться (> 90% байтов), если одна версия была от 1997 года, а другая от 2007 года, или если метаинформация отличается или формат изменился. Но если бы у вас был процесс, который извлекал только текст из файлов, то вам было бы намного легче справиться с этим, вам просто пришлось бы иметь дело со сложностями текстовых различий (строчные буквы, удаление знаков препинания и белых пространство, а потом сравнить?).

Точно так же, если у вас есть два идентичных файла PDF с точки зрения того, как они выглядят, когда вы открываете их, они все равно могут отличаться на> 90% на уровне байтов, если в каждый из них встроены шрифты, добавлена ​​вся метаинформация и предварительный просмотр изображений, пока другой разделен только на то, что необходимо для печати, и предполагает, что в системе есть все шрифты.

Последний пример: сжатые файлы любого типа. Для ряда распространенных алгоритмов крошечные изменения в файле, особенно в начале файла, могут существенно изменить байты, записываемые на диск. Так что и здесь вам придется распаковать файл (ы), возможно, рекурсивно, а затем сравнить. И в этом случае, вы хотите сообщить о сравнении сжатого файла или несжатого файла (ов) сравнения содержащейся информации? Обратите внимание, что многие форматы файлов использовали сжатие с потерями или без потерь по частям или по всем файлам.

Короче говоря, если у вас нет тысяч файлов в почти одинаковом формате, вы можете посмотреть очень длинный проект.