Seltsame Leerzeichen beim Parsen einer PDF

8

Ich muss ein PDF-Dokument analysieren. Ich habe den Parser bereits implementiert und die Bibliothek iText verwendet und bis jetzt funktionierte das ohne Probleme.

Aber nein, ich muss ein anderes Dokument parsen, das sehr seltsame Leerzeichen in der Mitte von Wörtern bekommt. Als Beispiel bekomme ich:

  

Vo rber eitung auf die Motorradwerbung . Viele Motorrad adf ahr

Alle fett gedruckten Wörter sollten verbunden sein, aber irgendwie fügt der PDF-Parser Leerzeichen in die Wörter ein. Aber wenn ich den Inhalt von der PDF in eine Textdatei kopiere und einfüge, bekomme ich diese Leerzeichen nicht.

Zuerst dachte ich, es liegt an der PDF-Parsing-Bibliothek, die ich benutze, aber auch bei einer anderen Bibliothek bekomme ich genau das gleiche Problem.

Ich habe mir die singleSpaceWidth von den geparsten Wörtern angeschaut und festgestellt, dass sie immer dann variiert, wenn ein Whitespace hinzugefügt wird. Ich habe versucht, sie manuell zusammenzustellen. Aber da es nicht wirklich ein Muster gibt, um die Wörter neu zu kombinieren, ist es fast unmöglich.

Hat jemand anderes ein ähnliches Problem oder sogar eine Lösung für dieses Problem?

Wie gewünscht, hier ein paar weitere Informationen:

Parsen mit SemTextExtractionStrategy:

%Vor%

Hier die SemTextExtractionStrategy-Methode, die den Text tatsächlich analysiert. Dort füge ich nach jedem geparsten Wort manuell einen Whitespace hinzu, aber irgendwie teilt es die Wörter in der Erkennung:

%Vor%

Hier ist die gesamte SemTextExtraction-Klasse, aber dort ruft sie nur die Methode von oben auf (parseText):

%Vor%     
Prine 10.08.2012, 12:36
quelle

3 Antworten

2

Ich habe die angegebene PDF-Datei mit folgendem Ghostscript -Befehl bearbeitet:

%Vor%

Dieser Befehl hat eine Datei out.pdf erstellt, die keine Stream-Codierungen hat, daher ist sie besser lesbar. Der interessante Teil ist in Zeile 52, die ich zur besseren Lesbarkeit in mehrere Zeilen aufgeteilt habe:

%Vor%

Zwischen den Klammern befinden sich die Textzeichen. Ich habe einige von ihnen geändert und habe in der gerenderten PDF-Datei gesehen, welches Zeichen welche Glyphe darstellt. Dann habe ich den Text entschlüsselt:

%Vor%

Also gibt es tatsächlich Leerzeichen zwischen den Charakteren. In Ihrem Fall ist dies wahrscheinlich das Kerning der Schriftart. Die Frage ist nun, wie Ihre PDF-Bibliothek diesen Whitespace interpretiert, und mir scheint, dass auch "negativer Whitespace" in der resultierenden Zeichenkette in ein Leerzeichen gerendert wird.

    
Roland Illig 08.09.2012, 10:45
quelle
1

Die Leerzeichen in pdf sind ein bekanntes Problem, wie es die Antwort hier von Roland beschreibt und auch beim ersten Kommentar von Ссылка

Die Antwort, die auch für mich funktioniert hat, ist die, die huuhungus bei Ссылка

das ist spezifisch für PDFParser und es ist den Code zu ändern, der diesen zusätzlichen Platz tatsächlich dem PDFParser hinzufügt, wenn Sie wissen, dass Sie dieses Problem haben werden:

  

src / Smalot / PdfParser / Object.php kommentieren diese Zeile

%Vor%      

Nicht vollständig beheben, aber es ist akzeptabel

Andere Bibliotheken haben möglicherweise ähnliche temporäre Korrekturen, so dass sie in einigen Fällen bei diesem Problem helfen können.

    
user3134164 05.01.2017 12:52
quelle
0

Da das Dokument, das Sie haben, in Spalten aufgeteilt ist, liegt der offensichtliche Fehler innerhalb des

  

SemTextExtractionStrategie

Klasse. Ich nehme an, dass die Klasse ColumnDetecter wahrscheinlich derjenige ist, der beschuldigt wird, und nicht iText. Ich kann nur annehmen, dass es basierend auf der Größe der Spalte implementiert wird, und ruft dann den darauf basierenden Text ab.

Wenn Sie nur den Text möchten, könnte die Implementierung basierend auf der Größe der Spalte einfacher sein.

    
Eugene 10.08.2012 13:34
quelle