Regex-Suche im PDF-Reader

Regex-Suche im PDF-Reader

Ich verwende Zathura, da mir der minimalistische Ansatz gefällt, würde aber auch zu Mupdf oder etwas anderem wechseln, wenn dies mein Problem lösen würde.

Ich muss jedes Wort (in PDF- und EPUB-Dokumenten) einzeln von Anfang bis Ende markieren, da ich mich besser auf den Text konzentrieren kann, wenn er eine Art Bewegung enthält. Mein Ansatz wäre gewesen, eine Regex-Suche durchzuführen, die jedes Wort findet, aber weder Zathura noch Mupdf unterstützen Regex bei der Suche. Gibt es eine Möglichkeit, dies zu tun?

Ich würde versuchen, Zathura zu forken, aber ehrlich gesagt möchte ich nicht so viel Zeit aufwenden, wenn es einen anderen minimalen Gnu/Linux-kompatiblen Dokumentbetrachter gibt, der das tut, was ich brauche. Und wenn es eine Möglichkeit gibt, Terminaltools wie  pdfgrep zum Hervorheben der Ergebnisse in Zathura zu verwenden, würde das auch funktionieren.

Antwort1

Einfache Textauswahl

Entsprechend derZathura Wikipedia-Seite:

Zathura kann nach Text suchen und Text in die primäre X-Auswahl kopieren

Dies setzt voraus, dass die Möglichkeit, Text während des Lesens auszuwählen, integriert ist, obwohl hierfür wahrscheinlich die Maus erforderlich ist (Sie werden kaum eine Lösung für die tastaturgesteuerte Auswahl finden).

Wie minimalistisch muss es sein? Ich benutzeAtril, eine etwas leichtere Gabel vonBeweisen(der GNOME-Dokumentenbetrachter). Atril wurde als Teil derMATE-Desktop(eine Fortsetzung von GNOME 2). Es ist ziemlich leicht, weist jedoch immer noch eine GTK+-Abhängigkeit auf.

Eine weitere Option istXpdfAnwendung. Siehe auchWikipedia-Liste von PDF-Software § Linux und Unix.

Regulärer Ausdruck

Die einzige (brauchbare) Regex-Suchimplementierung, die ich kenne, abgesehen von Kommandozeilen-Tools wiepdfgrepist eigentlich Ihr Webbrowser. Dies ist nicht so benutzerfreundlich, aber hier ist eine Lösung in Firefox: Öffnen Sie eine PDF-Datei in Firefox und öffnen Sie Ihre Developer Tools Javascript Console (F12 oder Strg+Umschalt+K). Führen Sie diese Befehle aus:

» pdf = document.getElementById("viewer").innerText.replace(/[ \t]+/g, " ");
» function grep(what, context=100) { return pdf.match(RegExp(`[\\s\\S]{0,${context}}${what}[\\s\\S]{0,${context}}`), "img"); }
» grep("put your regex here")
» grep("get more context", 300)

Beachten Sie, dass Sie Ihre Backslashes maskieren müssen. Der grepBefehl hat ein optionales zweites Argument, die Anzahl der Kontextzeichen, die auf jeder Seite bereitgestellt werden sollen (Standard = 100).

Chrome und andere Browser mit integrierten PDF-Viewern sollten ziemlich ähnlich sein, Sie müssen jedoch herausfinden, welches HTML-Objekt den tatsächlichen PDF-Inhalt enthält ( id="viewer"bei Firefox ist es das Element, bei den anderen bin ich mir nicht sicher – im schlimmsten Fall verwenden Sie einfach document.bodyanstelle von document.getElementById("viewer"). Möglicherweise passen die Elemente im Inhaltsverzeichnis zusammen.)

Antwort2

Wenn ich mich nicht irre, Adobe Acrobat Readergibt es eine Funktion namens read out loud, die jedes Wort von Anfang bis Ende auswählt.

verwandte Informationen