Come utilizzare Perl per cercare un doc PDF

September 17

Come utilizzare Perl per cercare un doc PDF


script in Perl \ "strisciare \" attraverso il web, setacciando l'oceano di pagine HTML per le informazioni, e, inevitabilmente incontrano alcuni dei milioni di file Adobe Acrobat PDF cosparsi attraverso Internet. Anche se sono pronti per la stampa e attraente, dal punto di vista di un web crawler, PDF sono un dado leggermente più difficile da decifrare che semplici, pagine HTML basati su testo. Per fortuna, come con molte attività web, vi è un modulo Perl che può contribuire a rendere la vita più facile: CAM :: PDF. Questa interfaccia di programmazione, anche se per lo più intesa per creare e manipolare file PDF, ha alcuni programmi di utilità che consente script per cercare il loro contenuto.

istruzione

1 Installare CAM :: PDF. L'utilità CPAN offre il modo più semplice per farlo - avviare CPAN dalla riga di comando e al prompt, tipo \ "install CAM :: PDF \" (senza virgolette).

2 Aprire un editor e avviare lo script, inserendo i seguenti linee per avviare l'interprete Perl e importare il modulo necessario:

! / Usr / bin / perl

usare CAM :: PDF
ANDARE

Aggiungere le due righe successive per elaborare gli argomenti della riga di comando che l'utente passerà in:

il mio $ file = shift
ANDARE
il mio $ ricerca = shift
ANDARE

Il primo argomento passato allo script sarà il nome di un file PDF, e la seconda, la stringa di ricerca.

3 Creare un nuovo oggetto CAM :: PDF aggiungendo la seguente riga allo script:

il mio $ doc = CAM :: PDF-> nuovo ($ file)
ANDARE

Usando il metodo numPages del modulo importato per definire il limite superiore, creare un ciclo per elaborare ogni pagina del documento:

foreach my $ p ((1 .. $ doc-> numPages ()))
{

4 All'interno del ciclo, aggiungere questa riga per ottenere ogni pagina del testo dal file PDF:

il mio $ str = $ doc-> getPageText ($ p)
ANDARE

Aggiungere la dichiarazione prossimo script di dividere della pagina di testo fino in una serie di linee separate:

@linee = split (/ \ n /, $ str)
ANDARE

Termina la dichiarazione ciclo inserendo una parentesi di chiusura:

}

5 Infine, aggiungere un altro ciclo per lo script per elaborare ogni riga della pagina e cercare una corrispondenza per stringa di ricerca dell'utente come un'espressione regolare. Se l'espressione regolare restituisce una partita, questo esempio stampa la linea e numero di pagina sullo standard output. Al posto di queste dichiarazioni di stampa, è necessario implementare il codice per elaborare i risultati in base alle esigenze.

my $ i = 0
ANDARE
foreach $ line (@linee)
{

++$i

ANDARE

if($line =~ /$search/)
{
print \"\\\"$search\\\" found in line $i of page $p\\n\"

ANDARE

print \"$line\\n\\n\"
}

}

Consigli e avvertenze

  • Poiché il testo in file PDF non è gerarchicamente organizzata come quella di file HTML, è molto probabile che sia necessario progettare gli script per cercare alcuni tipi di file PDF (ad esempio moduli, bollettini, orari). Potrebbe non essere possibile scrivere un robusto script Perl in grado di ricercare in modo efficace qualsiasi tipo di file PDF.