Wie kann ich mehrere (tausende) PDFs vergleichen?

447
Gryph

Ich habe zwei Sammlungen von PDFs. Eine ( collection1 ) besteht aus mehr als 1000 PDFs, die viel größer sind (100 + GB) und in unlogischen Abschnitten (denken Sie an pdf 1 (1), 1 (3), ... wenn es nur eine Datei sein könnte und sollte) . Die andere ( collection2 ) besteht aus 300 Dateien.

Collection2 soll eine komprimierte und organisierte Version von collection1 sein. Ich habe Adobe Acrobat für die Verarbeitung verwendet, mehrere PDF-Dateien in einer einzigen PDF-Datei zusammengefasst und anschließend die Komprimierung (und Bates-Nummerierung) angewendet. Nachdem ich ein paar gemacht hatte, musste ich einen Nachwuchs übernehmen ...

Und wir haben kürzlich entdeckt, dass es Fehler gibt. Fehlende Abschnitte im Vergleich zu den ursprünglichen PDF-Dateien und ähnliche Probleme. Dies ist eine Menge Fehler, und ich hoffe, dass wir dies leicht beheben können.

Nicht sicher, ob das, was ich in diesem Fall suche, wirklich schwierig ist, da ich mehrere Dateien mit einer einzigen Datei vergleichen muss.

Wenn ich die Problemdateien isolieren könnte, könnte ich diese leicht beheben. Das Beste, was ich derzeit herausfinden kann, ist vielleicht die überraschende Vorschau (MacOS), mit der Sie mehrere Dateisätze öffnen können (und die Seitenanzahl angeben). Von dort aus kann ich zuerst, zuletzt und mehrere in der Mitte prüfen. Wenn diese konsistent sind und die Seitenanzahl konsistent ist, sind die Dateien wahrscheinlich solide, was ich an den Fehlern erkennen kann. Dies ist jedoch nicht die gründlichste Lösung.

Antworten auf ähnliche Fragen gibt es hier und hier, aber sie sind entweder mehrere Jahre alt, Windows-spezifisch (was in Ordnung ist, aber in diesem Fall nicht bevorzugt), oder nicht auf der Skala, in der ich arbeiten muss. Keiner in meinem Team verfügt über fortgeschrittene technische Fähigkeiten in Bezug auf die SU-Community. Daher wäre eine detaillierte Antwort oder ein Link zu relevanten Vorkenntnissen sehr, sehr willkommen.

Vielen Dank SU

1
Was ist mit einer allgemeineren Lösung? Warum verwenden Sie nicht md5- oder SHA-Summen für die Dateien, um sie zu vergleichen, um zu sehen, ob sie identisch sind oder nicht? Eine Prüfsumme zeigt nur an, ob die Dateien identisch sind. Wenn Sie jedoch mehrere Dateien mit derselben Prüfsumme haben, können Sie - praktisch gesehen - sicherstellen, dass sie identisch sind. davidgo vor 6 Jahren 1
Wie mache ich das mit mehreren Dateien für eine einzelne Datei? Und funktioniert der Vergleich nicht, weil es sich um unterschiedliche Dateien mit unterschiedlicher Komprimierung, unterschiedliche OCR usw. handelt? Ich habe SHA schon früher benutzt, aber nie für etwas so detailliertes, und die technische Dokumentation durchforstet, es ist ein bisschen über meinen Kopf. Gryph vor 6 Jahren 0
Wenn die Dateien nicht identisch sind, funktioniert dies nicht. (Sie würden identische Dateien vergleichen, indem Sie den Prüfsummenalgorithmus für jede Datei ausführen und prüfen, ob die resultierende Zeichenfolge in allen Dateien gleich ist.) Wenn Ihre Dateien OCR und verschiedene Arten der Komprimierung verwenden, wird es schwierig sein, einen nicht-manuellen Weg zu finden, um einen genauen Vergleich durchzuführen - obwohl Sie in der Lage sind, einige triviale Hinweise zu erhalten, wenn Sie die Anzahl der Seiten in jeder Datei betrachten - was nicht gelang. t Hilfe, wenn die Seiten leer oder wiederholt sind und andere fehlen. davidgo vor 6 Jahren 0
_Compressing_ a PDF ändert den Inhalt auf nicht triviale Weise (Neuskalieren von Bildern, Entfernen von unsichtbarem und beschnittenem Inhalt usw.). Es gibt keine Möglichkeit, dies zu automatisieren. Einfachere Wiederholung (und vielleicht Speichern der Befehlsdateien?) Aganju vor 6 Jahren 0
@aganju kannst du die Befehlsdateien klarstellen? Gryph vor 6 Jahren 0
Ich nahm an, dass Sie - nachdem Sie die Eingabedateien und ihre Reihenfolge sortiert haben - sie über die Befehlszeile in Ihr Acrobat exe einspeisen. Ich kenne die Syntax nicht, aber etwas wie `Acrobat.exe -compress -combine file1.pdf file97.pdf file43.pdf ...`. Vielleicht sogar mehrere Befehle, um bestimmte Seiten aus bestimmten Dateien auszuschneiden und sie dann zu kombinieren usw. Die vollständigen Befehlszeilen sollten in einer Datei aufbewahrt werden und könnten korrigiert werden und dann erneut ausgeführt werden, wenn ein Problem auftritt. Aganju vor 6 Jahren 0
oh ich verstehe! Interessant. Ich habe die GUI 'Dateien hinzufügen' verwendet. Ich werde das untersuchen. Gryph vor 6 Jahren 0

2 Antworten auf die Frage

1
LSerni

Sie müssen zunächst eine Möglichkeit haben, die 1000 Dateien mit den 300 Dateien zu ordnen.

Im einfachsten Fall sagen Sie "CIDOC Ontology 2.0 (1) .pdf", "CIDOC Ontology 2.0 (2) .pdf" und "CIDOC Ontology 2.0 (3) .pdf" einerseits und "CIDOC Ontology". pdf "auf der anderen Seite.

Die besten Ansätze, die ich herausfinden kann, sind folgende:

  1. Extrahieren Sie mit pdftkoder pdf2jsondie Anzahl der Seiten der 1000-Gruppe und prüfen Sie, ob die Summe der 300-Gruppe entspricht:

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

    Diese Methode ist ziemlich einfach und erkennt nicht, dass drei Abschnitte nicht in Ordnung sind.

  2. Mit pdf2psund ps2ascii, Textversionen aller Dateien erstellen. Abhängig vom PDF-Prozess sind diese möglicherweise fast unleserlich, aber es spielt keine Rolle: Mit etwas Glück hat das Werkzeug, das zum Zusammenführen der Dateien verwendet wird, die Textmetriken und die Gruppierung nicht geändert. Wenn dies der Fall ist, wird die Verkettung der drei Dateien der vierten Datei sehr ähnlich sein (und wenn nicht, werden Sie sie als Anomalie markieren). Also sollten diese Heuristiken funktionieren:

    • Die Summe der Ausgaben von "wc" aus den drei Dateien ist der Ausgabe aus der vierten Datei gleich (oder sehr nahe).
    • cat'ting der drei Textdateien oder der vierten Datei über cat file1 file2 file3 | sed -e "s # \ s # \ n # g" | sort sollte fast identische Wortlisten ergeben (die Ausgabe von diff -Bbawdsollte nicht mehr als drei oder vier Zeilen umfassen; idealerweise keine). Wenn Sie die | sortPhase weglassen, sollten Abschnitte außerhalb der Reihenfolge erkennbar sein: Wenn die sortierte Prüfung übereinstimmt und die nicht sortierte nicht, sind Sie in einer Situation, in der der Abschnitt nicht in der richtigen Reihenfolge ist.

Der sedTeil teilt die Wörter auf, was auch dann hilfreich sein kann, wenn das Koaleszenzwerkzeug den Text etwas geändert hat. Eine Änderung im Kerning, wobei sich herausstellte, dass die Wörter innerhalb des PDF-Dokuments unterschiedlich aufgeteilt wurden ("Homöostase" ist zu "ho meos tas is" von "home osta sis" geworden), wird dies selbst unzureichend machen. aber es ist nicht so wahrscheinlich.

Die Schwierigkeit, die ich sehe, besteht darin, die Rohdateien mit dem Finale zu vergleichen. Da ich jeweils ein Beispiel habe, könnte ich wahrscheinlich ein Skript ausarbeiten, um den Vergleich durchzuführen.

1
KirkD_CO

Sie können einen Sequenz-Alignment-Prozess ähnlich der DNA-Sequenzanalyse verwenden. Insbesondere ein dynamischer Programmieransatz für die Sequenzausrichtung.

Extrahieren Sie den Text jeder PDF-Datei in jeder Sammlung, und versuchen Sie dann, jede einzelne Textsequenz aus Sammlung 1 mit jeder längeren, verketteten Sequenz aus Sammlung 2 auszurichten. Perfektes Übereinstimmen eines Buchstabens erhält eine Punktzahl von 1 und Unstimmigkeiten erhalten eine Null. Die Gesamtbewertung ist die Anzahl der Übereinstimmungen zwischen ausgerichteten Sequenzen. Sie können auch Änderungen zwischen Sequenzen zulassen, aber Lücken einfügen.

Der Algorithmus ist nicht schwer, kann jedoch etwas dauern. Angesichts der Größe der Datenmenge, die Sie erwähnt haben, würde sie vermutlich innerhalb weniger Stunden oder über Nacht laufen.

Hier ist ein Link zu dem Algorithmus in Wikipedia: https://de.m.wikipedia.org/wiki/Sequence_alignment