문제

PDF 파일이 많이 있으며 PERL 프로그램은 특정 문자열이 포함 된 어떤 파일을 검색 해야하는지 전체 텍스트 검색을 수행해야합니다. 지금까지 나는 이것을 사용하고 있습니다.

my @search_results = `grep -i -l \"$string\" *.pdf`;

여기서 $ string은 찾을 텍스트입니다. 그러나 파일 형식이 분명히 ASCII가 아니기 때문에 대부분의 PDF에서는 실패합니다.

가장 쉬운 일은 무엇을 할 수 있습니까?

설명 : 미리 알지 못하는 300 PDF가 있습니다. PDF :: Core는 아마도 과잉 일 것입니다. 나는 pdftotext와 grep을 얻으려고 노력하고 있습니다. PDF의 이름을 모르면 아직 올바른 구문을 찾을 수 없습니다.

아래에 Adam Bellaire의 제안을 사용한 최종 솔루션 :

@search_results = `for i in \$( ls ); do pdftotext \$i - | grep --label="\$i" -i -l "$search_string"; done`;
도움이 되었습니까?

해결책

Perlmonks 스레드 여기 이 문제에 대해 이야기합니다.

당신의 상황에서는 가장 간단한 것 같습니다. pdftotext (명령 줄 도구), 그런 다음 다음과 같은 작업을 수행 할 수 있습니다.

my @search_results = `pdftotext myfile.pdf - | grep -i -l \"$string\"`;

다른 팁

두 번째 Adam Bellaire 솔루션. PDFTOTEXT 유틸리티를 사용하여 전자 책 라이브러리의 전체 텍스트 색인을 작성했습니다. 다소 느리지 만 그 일을합니다. Full-Text는 Plucene 또는 Kinosearch를 시도하여 전체 텍스트 색인을 저장하십시오.

내 도서관, Cam :: PDF, 텍스트 추출을 지원하지만 PDF 구문의 그래픽 방향을 감안할 때 본질적으로 어려운 문제입니다. 따라서 출력은 때때로 횡설수설입니다. Cam :: PDF 번들 a getpdftext.pl 프로그램 또는 다음과 같은 기능을 호출 할 수 있습니다.

my $doc = CAM::PDF->new($filename) || die "$CAM::PDF::errstr\n";
for my $pagenum (1 .. $doc->numPages()) {
   my $text = $doc->getPageText($pagenum);
   print $text;
}

당신은보고 싶을 수도 있습니다 pdf :: 코어.

내가 사용한 가장 쉬운 풀 텍스트 색인/Seach는 MySQL입니다. 적절한 색인이있는 테이블에 삽입됩니다. 필드의 상대적 가중치를 운동하는 데 시간을 보내야합니다 (제목의 경기는 신체의 경기보다 높은 점수를 얻을 수 있습니다).

Plucene은 Kinosearch에 찬성하여 (지난 2 년 동안 AFAIK에 대한 적극적인 작업이 없었습니다) 더 이상 사용되지 않았습니다. Kinosearch는 부분적으로 Plucene의 건축 한계를 이해하면서 성장했습니다.

~ 300 PDF가있는 경우 PDF에서 텍스트를 추출한 후 (PDF에 텍스트 이미지가 아닌 텍스트가 있다고 가정하고) 쿼리 볼륨에 따라 GREP가 충분할 수 있습니다.

그러나 MySQL/kinosearch 경로가 강력하게 제안되어 있으며, 당신이 멍청하게하는 것이 혜택을받지 못하는 많은 땅 (스템 밍, 스톱워드, 용어 가중치, 토큰 구문 분석)을 덮었 기 때문에 강력하게 제안합니다.

Kinosearch는 아마도 MySQL 경로보다 빠르지 만 MySQL 경로는보다 널리 사용되는 표준 소프트웨어/도구/개발자 경험을 제공합니다. 또한 SQL의 전력을 사용하여 freetext 검색 쿼리를 아는 기능을 얻을 수 있습니다.

따라서 거대한 데이터 세트와 미친 쿼리 볼륨을 말하지 않는 한 내 돈은 MySQL에있을 것입니다.

Lucene (Perl 포트를 Plucene이라고합니다)을 사용해 볼 수 있습니다. 검색은 엄청나게 빠르며 PDFBox는 이미 PDF 파일을 Lucene과 색인화하는 방법을 알고 있습니다. PDFBox는 Java이지만 CPAN 어딘가에 매우 비슷한 것이있을 가능성이 있습니다. 이미 Lucene 인덱스에 PDF 파일을 추가하는 것을 찾을 수 없더라도 직접 수행하려면 몇 줄을 넘지 않아야합니다. Lucene은 단순히 파일에서 문자열을 찾는 것보다 몇 가지 검색 옵션을 제공합니다.

매우 빠르고 더러운 방법도 있습니다. PDF 파일의 텍스트는 실제로 일반 텍스트로 저장됩니다. 텍스트 편집기에서 PDF를 열거 나 '문자열'을 사용하면 텍스트를 볼 수 있습니다. 이진 쓰레기는 일반적으로 내장 글꼴, 이미지 등입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top