Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Search Pdf

  1. #1

    Search Pdf

    Ciao a tutti,
    volevo chiedervi se conoscete qualche search ottimizzato per la ricerca di file pdf. Dovrei fare una ricerca solo all'interno di una cartella che contiene del file pdf. Avevo pensato ad uno script creato da me che prelevasse il testo all'interno del pdf e lo scrivesse nel database, ma mi sembra troppo macchinoso e poco efficente. Infatti, se dovessi cancellare un file o modificarlo lo script non funzionerebbe bene.

    Ho provato sphider ma non sembra il massimo, infatti chiede un exe per la conversione da pdf a text. Io vorrei far girare il sistema su un server linux, quindi non mi sembra il migliore.

    Grazie in anticipo

  2. #2
    esiste pdftotext, che fa parte del pacchetto xpdf-utils (o xpdf, dipende dalla distribuzione) che permette di estrarre il testo dai file pdf

    potresti caricarti il tutto sul database per poi sfruttare le funzionalità di mysql (full text search) per fare le ricerche o le funzionalità di componenti esterni (lucene ad esempio)

    http://en.wikipedia.org/wiki/Pdftotext
    http://foolabs.com/xpdf/download.html

  3. #3
    L'avevo visto pure io questa funzione.
    Quindi mi consiglieresti di fare un form con allega. Al momento del carimento faccio la funzione che mi hai postato in modo tale da inserire il testo del pdf appena inserito nel db. E poi per le ricerche faccio una normale query con LIKE.
    Penso che faro' in questo modo. Anche se un qualche motore di ricerca che mi scansionava e mi convertiva automaticamente con un click tutti i file pdf di una directory mi avrebbe garbato molto di piu'.

    IL CODICE PHP DOVREBBE ESSERE QUESTO:
    <?php
    $file = "test.pdf";
    $outpath = preg_replace("/\.pdf$/", "", $file).".txt";

    system("pdftotext ".escapeshellcmd($file), $ret);
    if ($ret == 0)
    {
    $value = file_get_contents($outpath);
    unlink($outpath);
    print $value;
    }
    if ($ret == 127)
    print "Could not find pdftotext tool.";
    if ($ret == 1)
    print "Could not find pdf file.";
    ?>

    Grazie comunque per la tua esaustiva risposta.

  4. #4
    ma puoi farlo comunque, una volta che hai il testo puoi fare che:
    - parte la procedura
    - tira fuori il testo dal PDF per tutti quei PDF per i quali non lo ha ancora fatto salvandolo in una cartella apposita
    - cicla i file di testo
    - cerca all'interno la/le parole specificate (visto che vuoi usare il like non penso ti interessi una ricerca full text) leggendo il file a blocchi di 8kb per evitare di uccidere php
    - stampi fuori i risultati

  5. #5
    Non mi e' molto chiaro questo punto:

    - cerca all'interno la/le parole specificate (visto che vuoi usare il like non penso ti interessi una ricerca full text) leggendo il file a blocchi di 8kb per evitare di uccidere php
    Non devo fare la ricerca full text con mysql??? Come faccio a leggere il file a blocchi di 8kb??

    Grazie in anticipo

  6. #6
    mi è parso di capire che tu non voglia passare da mysql, in questo caso devi leggere il file di testo e cercare manualmente all'interno tu

    però, invece di caricare tutto il file in memoria e cercarci dentro, leggi il file a blocchi

    (in realtà dovresti cercare 8kb + lunghezza della parola per intero mantenendo questo residuo dal blocco precedente per avere la certezza che una parola che si accavalla nel mezzo venga letta)

  7. #7
    Ah ora mi e' tutto piu' chiaro. Invece di passare attraverso i kb faccio una limitazione di caratteri. Faccio un campo text(10000) e me la cavo così.
    Poi faccio il discorso che mi hai detto tu utilizzando le funzioni specifiche di php.
    10000 caratteri penso che siano non troppi e non pochi considerando che il massimo di un campo text è 65535.

    Ora che ho installato il tool pdftotext (perfettamente funzionante dal terminale), mi ritrovo un altro problema non mi funziona attraverso il php.

    $file = "io.pdf";
    $outpath = preg_replace("/\.pdf$/", "", $file).".txt";

    system("pdftotext ".escapeshellcmd($file), $ret);
    if ($ret == 0)
    {
    $value = file_get_contents($outpath);
    unlink($outpath);
    print $value;
    }
    if ($ret == 127)
    print "Could not find pdftotext tool.";
    if ($ret == 1)
    print "Could not find pdf file.";
    facendo una echo "pdftotext ".escapeshellcmd($file), trovo la stringa di comando. Dopo apro il terminale mi posiziono sulla cartella dove funziona lo script lancio il comando e appare effettivamente il file txt. Ho provato anche con un'altro scriptino che tralascia la formazione del txt:

    $file = "io.pdf";
    $testo = shell_exec('/usr/bin/pdftotext '.$file.' -');
    echo $testo;

    Anche questo dal terminale funziona correttamente. Devo dare qualche permesso strano o abilitare un qualche cosa all'interno del php????

    Grazie

  8. #8
    mmm, non ci siamo capiti

    non devi limitare il numero di caratteri da leggere per fare la ricerca, ma la dovresti fare a blocchi.

    ma, se passi invece da mysql il discorso è diverso, devi (necessariamente) leggere tutto il testo per lanciare una query di inserimento e caricarlo sul database

    dopo di che usi le normali funzioni di ricerca di mysql

    (avevo capito che non volevi usare mysql per la ricerca ^^)

  9. #9
    Ok.
    Vedro' di capire il perche' non vada il comando da shell passando sul php. Non esiste nessuna funzione da abilitare vero?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.