Как сравнить несколько (тысячи) PDF-файлов?

382
Gryph

У меня есть две коллекции PDF-файлов. Один ( collection1 ) - это 1000+ PDF-файлов, намного больше по размеру файла (100 + ГБ) и по нелогичным разделам (подумайте, pdf 1 (1), 1 (3), ... когда это могло и должно быть просто одним файлом), Другой ( collection2 ) - 300 файлов.

Collection2 должен быть сжатой и организованной версией collection1. Я использовал Adobe Acrobat для обработки, сжал несколько PDF-файлов в один PDF-файл, а затем применил сжатие (и нумерацию Бейтса). После нескольких из них у меня был младший персонал ...

И мы недавно обнаружили, что есть ошибки. Разделы отсутствуют по сравнению с оригинальными PDF-файлами и аналогичными проблемами. Это колосс ошибки, и я надеюсь, что мы легко это исправим.

Не уверен, что если то, что я ищу в этом случае действительно разница, как я должен был бы сравнить несколько файлов в один файл.

Если бы я мог изолировать проблемные файлы, я бы легко их исправил. Лучшее, что я могу понять прямо сейчас, - это, пожалуй, удивительно предварительный просмотр (MacOS), который позволяет открывать несколько файлов (и обеспечивает количество страниц). Оттуда я могу проверить первый, последний и несколько посередине. Если они согласованы и количество страниц одинаково, то, скорее всего, файлы являются надежными, насколько я могу судить по ошибкам. Однако это не самое тщательное решение.

Ответы на аналогичные вопросы есть здесь и здесь, однако они либо несколько лет, в зависимости от окон (что хорошо, если необходимо, но не желательно в данном конкретном случае), либо не в том масштабе, в котором мне нужно работать. Никто из моей команды не обладает продвинутыми техническими навыками по отношению к сообществу SU, поэтому подробный ответ или ссылки на соответствующие предварительные знания были бы очень важны.

Спасибо большое SU

1
Как насчет более общего решения? Почему бы не использовать суммы md5 или SHA для файлов, чтобы сравнить их, чтобы увидеть, идентичны они или нет? Контрольная сумма скажет вам только, если файлы идентичны, но если у вас есть несколько файлов, каждый из которых имеет одинаковую контрольную сумму, вы можете - в практических целях - быть уверенными, что они одинаковы. davidgo 6 лет назад 1
Как бы я сделал это с несколькими файлами в одном файле? И не сработает ли сравнение, потому что это разные файлы, с разным сжатием, другим распознаванием и т. Д.? Я использовал SHA раньше, но никогда не для того, чтобы что-то подробное, и, глядя на техническую документацию, это немного над моей головой. Gryph 6 лет назад 0
Если файлы не идентичны, это не будет работать. (Способ, которым вы сравниваете идентичные файлы, состоит в том, чтобы запустить алгоритм контрольной суммы для каждого из них и убедиться, что результирующая строка одинакова для всех файлов). Если ваши файлы используют оптическое распознавание символов и различные виды сжатия, вам будет трудно найти не ручной способ сделать точное сравнение - хотя вы могли бы получить некоторую тривиальную индикацию, посмотрев на количество страниц в каждом файле - которые выиграли ' t помочь, если страницы пустые или повторяются, а другие отсутствуют. davidgo 6 лет назад 0
_Compressing_ PDF изменяет содержимое нетривиальными способами (масштабирование изображений; удаление невидимого и обрезанного содержимого и т. Д.). Нет никакого способа, которым это может быть автоматизировано. Проще перезапустить его (и, возможно, сохранить командные файлы?) Aganju 6 лет назад 0
@aganju вы можете уточнить сохранить командные файлы? Gryph 6 лет назад 0
Я предполагал, что вы - после сортировки входных файлов и их последовательности - загрузите их в свой Acrobat exe с помощью командной строки. Я не знаю синтаксис, но что-то вроде `Acrobat.exe -compress -combine file1.pdf file97.pdf file43.pdf ...`. Может быть, даже несколько команд, чтобы вырезать определенные страницы из определенных файлов, а затем объединить их и т. Д. Полные командные строки должны быть сохранены в файле, их можно исправить и затем запустить снова, если возникнет проблема. Aganju 6 лет назад 0
О, я вижу! Интересно. Я использовал GUI «Добавить файлы». Я посмотрю на это. Gryph 6 лет назад 0

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

1
LSerni

Вам совершенно необходимо сначала найти способ сопоставления 1000 файлов с 300 файлами по порядку.

В простейшем случае вы будете говорить «CIDOC Ontology 2.0 (1) .pdf», «CIDOC Ontology 2.0 (2) .pdf» и «CIDOC Ontology 2.0 (3) .pdf», с одной стороны, и «Онтология CIDOC. pdf "на другой.

Теперь лучшие подходы, которые я могу изобразить, таковы:

  1. Используя pdftkили pdf2json, извлеките количество страниц группы 1000 и посмотрите, соответствует ли сумма группе 300:

    12, 9, 10 vs. 31 = OK 12, 9, 10 vs 22 = BAD (and you might suspect section 2 is missing) 

    Этот метод довольно прост и не распознает три раздела, которые не работают.

  2. Используя pdf2psи ps2ascii, создавать текстовые версии всех файлов. В зависимости от процесса PDF, они могут быть почти неразборчивыми, но это мало что значит: при небольшой удаче инструмент, используемый для объединения файлов, не изменит текстовые метрики и группировки. Если это так, то объединение трех файлов будет очень и очень похоже на четвертый файл (а если нет, вы отметите его как аномалию). Так что эти эвристики должны работать:

    • сумма выходных данных "wc" из трех файлов будет равна (или очень близка) к выходным данным из четвертого файла.
    • cat'ting три текстовых файла, или четвертый файл, через cat file1 file2 file3 | sed -e "s # \ s # \ n # g" | Сортировка должна приводить к почти одинаковым спискам слов (выходные данные diff -Bbawdдолжны быть не более трех или четырех строк; в идеале, нет). Если вы пропустите | sortстадию, то разделы не по порядку должны быть узнаваемы: если отсортированная проверка совпадает, а несортированная - нет, вы сталкиваетесь с ситуацией с нарушением порядка.

sedЧасть будет разделена слов, которые могли бы помочь, даже если инструмент коалесцирующий сделал изменить текст несколько. Изменение в кернинге, когда слова оказываются по-разному разделенными внутри PDF («гомеостаз» превратился в «ho meos tas is» из «home osta sis»), сделает даже этого недостаточным; но это не так вероятно.

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

1
KirkD_CO

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

Извлеките текст каждого PDF в каждой коллекции, а затем попытайтесь выровнять каждую отдельную текстовую последовательность из Коллекции 1 с каждой более длинной объединенной последовательностью из Коллекции 2. Идеальное совпадение любой буквы получает оценку 1, а несоответствия - ноль. Общая оценка - это количество совпадений между выровненными последовательностями. Вы также можете разрешить редактирование между последовательностями, но вводя пробелы.

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

Вот ссылка на алгоритм в Википедии: https://en.m.wikipedia.org/wiki/Sequence_alignment