1

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

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

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

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

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

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

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

2 ответа2

1

Вам совершенно необходимо сначала найти способ сопоставления 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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .