특정 순서 없이 여러 단어가 포함된 페이지를 PDF 파일에서 검색할 수 있나요?

특정 순서 없이 여러 단어가 포함된 페이지를 PDF 파일에서 검색할 수 있나요?

특정 순서 없이 여러 단어가 포함된 PDF 파일의 모든 페이지를 검색하고 싶습니다. 예를 들어, "hello"와 "world"(특정 순서 없음)가 모두 포함된 모든 페이지를 찾고 싶습니다.

pdfgrep 그것이 가능한지 잘 모르겠습니다 .

저는 Google 도서에 표시되는 책에서 여러 단어를 검색하는 방법과 비슷한 작업을 수행하려고 합니다.

감사해요.

답변1

-P예, PCRE해당 옵션을 사용하는 경우 너비가 0인 예측 어설션을 사용하여 이를 수행할 수 있습니다(엔진 및 Perl과 유사한 정규식을 사용하도록 함).

$ pdfgrep -Pn '(?=.*process)(?=.*preparation)' ~/Str-Cmp.pdf
8:•     If a preparation process is used, the method used shall be declared.
10:Standard, preparation may be an important part of the ordering process. See Annex C for some examples of
38:padding. The preparation processing could move the original numerals (in order of occurrence) to the very

위 방법은 두 단어가 같은 줄에 있는 경우에만 작동합니다. 단어가 같은 페이지의 다른 줄에 나타날 수 있는 경우 다음을 수행합니다.

$ pdfgrep -Pn '^(?s:(?=.*process)(?=.*preparation))' ~/Str-Cmp.pdf
8:ISO/IEC 14651:2007(E)
9:                                                                                                  ISO/IEC 14651:2007(E)
10:ISO/IEC 14651:2007(E)
12:ISO/IEC 14651:2007(E)
...

s플래그는 개행 문자 (?s:.일치한다는 의미입니다. 이렇게 하면 페이지의 첫 번째 줄만 인쇄됩니다. -A다음 옵션을 사용하여 이를 조정할 수 있습니다.

$ pdfgrep -A4 -Pn '^(?s:(?=.*process)(?=.*preparation))' ~/Str-Cmp.pdf
8:ISO/IEC 14651:2007(E)
8-•     Any specific internal format for intermediate keys used when comparing, nor for the table used. The use of
8-      numeric keys is not mandated either.
8-•     A context-dependent ordering.
8-•     Any particular preparation of character strings prior to comparison.
--
9:                                                                                                  ISO/IEC 14651:2007(E)
...

페이지의 모든 패턴과 일치하는 줄을 인쇄하는 대략적인 래퍼 스크립트모두순서에 관계없이 패턴:

usage: pdfgrepa [options] files ... -- patterns ...

#! /bin/sh
r1= r2=
for a; do
        if [ "$r2" ]; then
                r1="$r1(?=.*$a)"; r2="$r2|$a"
        else
                case $a in
                --)     r2='(?=^--$)';;
                *)      set -- "$@" "$a";;
                esac
        fi
        shift
done
pdfgrep -A10000 -Pn "(?s:$r1)" "$@" | grep -P --color "$r2"

$ pdfgrepa ~/Str-Cmp.pdf -i -- obtains process preparation 37- the strings after preparation are identical, and the end result (as the user would normally see it) could be 37- collation process applying the same rules. This kind of indeterminacy is undesirable. 37-one obtains after this preparation the following strings:

답변2

pdfgrep -nP 'hello.{1,99}world|world.{1,99}hello' a.pdf

https://pdfgrep.org/doc.html

관련 정보