Domanda

Aggiornamento: Ora ho scritto un estensione PHP chiamato php_ssdeep per l'API C ssdeep per facilitare sfocati di hashing e hash confronti in PHP in modo nativo. Maggiori informazioni possono essere trovate oltre al mio blog . Spero che questo sia utile per le persone.

Sono coinvolti nella scrittura di un'applicazione di gestione documenti personalizzati in PHP su una macchina Linux che memorizzerà i vari formati di file (potenzialmente 1000 di file) e abbiamo bisogno di essere in grado di verificare se un documento di testo è stato caricato prima per impedire la duplicazione nel database.

In sostanza, quando un utente carica un nuovo file vorremmo essere in grado di presentare loro un elenco di file che sono o duplicati o che contengono contenuti simili. Questo sarebbe quindi consentire loro di scegliere uno dei documenti pre-esistenti o continuare a caricare la propria.

documenti simili sarebbero stati determinati, cercando attraverso il loro contenuto per sentances simili e forse un elenco generato in modo dinamico di parole chiave. Possiamo quindi visualizzare un match percentuale per l'utente per aiutarli a trovare i duplicati.

Mi può consigliare tutti i pacchetti di questo processo e tutte le idee di come potrebbe essere fatto in passato?

Il duplicato diretta Credo che può essere fatto da ottenere tutto il contenuto del testo e

  • Spogliarello spazi
  • Rimozione punteggiatura
  • Converti per abbassare o maiuscole

poi formare un hash MD5 da confrontare con eventuali nuovi documenti. Spogliarello quegli articoli fuori dovrebbe aiutare a prevenire creduloni non essere trovati se l'utente modifica un documento da aggiungere nelle rotture di paragrafo aggiuntivi per esempio. Ogni pensiero?

Questo processo potrebbe anche potenzialmente funzionare come un lavoro notturno e abbiamo potuto informare l'utente di eventuali duplicati al successivo login se il requisito di calcolo è troppo grande per l'esecuzione in tempo reale. In tempo reale sarebbe preferibile tuttavia.

È stato utile?

Soluzione

Aggiornamento: Ora ho scritto un estensione PHP chiamato php_ssdeep per l'API C ssdeep per facilitare sfocati di hashing e hash confronti in PHP in modo nativo. Maggiori informazioni possono essere trovate oltre al mio blog . Spero che questo sia utile per le persone.

Ho trovato un programma che fa quello che il suo creatore, Jesse Kornblum, chiama "hashing Fuzzy". Molto in fondo si rende hash di un file che può essere utilizzato per rilevare file simili o identici partite.

La teoria dietro di esso è documentato qui: identificazione dei file quasi identiche utilizzando contesto innescato tratti di hashing

ssdeep è il nome del programma e può essere eseguito su Windows o Linux. E 'stato progettato per essere utilizzato nel settore dell'informatica legale, ma sembra adatto abbastanza per i nostri scopi. Ho fatto un breve test su un vecchio Pentium 4 macchina e richiede circa 3 secondi per passare attraverso un file hash di 23MB (hash per poco meno di 135.000 file) alla ricerca di partite contro due file. Quella volta include la creazione di hash per i due file che cercavo contro pure.

Altri suggerimenti

Sto lavorando su un problema simile in web2project e dopo aver chiesto in giro e di scavo, sono giunto alla conclusione "l'utente non se ne cura". Avere documenti duplicati non importa per l'utente il più a lungo in quanto possono trovare il proprio documento con il proprio nome.

Detto questo, ecco l'approccio che sto prendendo:

  • Consentire a un utente di caricare un documento associandolo con qualsiasi progetti / compiti che vogliono;
  • Il file deve essere rinominato per evitare che qualcuno sta ottenendo in via http .. o meglio conservati al di fuori della web root. L'utente sarà ancora vedere il loro nome nel sistema e se scaricarlo, è possibile impostare le intestazioni con il "vero" nome del file;
  • Ad un certo punto nel futuro, elaborare il documento per vedere se ci sono duplicati .. a questo punto, però, siamo non modificare il documento. Dopo tutto, ci potrebbero essere importanti motivi gli spazi o capitalizzazione è cambiato;
  • Se ci sono gonzi, eliminare il nuovo file e quindi collegare a quello vecchio;
  • Se non ci sono gonzi, non fare nulla;
  • Indice il file per i termini di ricerca - a seconda del formato del file, ci sono un sacco di opzioni, anche per documenti Word;

Per tutto questo, non diciamo che l'utente è stato un duplicato ... a loro non importa. E 'noi (sviluppatori, amministratori db, ecc) che la cura.

E sì, questo funziona anche se si carica una nuova versione del file in seguito. In primo luogo, si elimina il riferimento al file, quindi - proprio come nella raccolta dei rifiuti -. Si elimina solo il vecchio file se ci sono zero riferimenti ad esso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top