Frage

Update: Ich habe jetzt geschrieben eine PHP-Erweiterung namens php_ssdeep für die ssdeep C API nativ Fuzzy Hashing und Hash-Vergleiche in PHP zu erleichtern. Weitere Informationen finden Sie über auf meinem Blog zu finden . Ich hoffe, dies ist nützlich für die Menschen.

Ich bin in dem Schreiben eine benutzerdefinierten Dokumentmanagement-Anwendung in PHP auf einer Linux-Box beteiligt, die verschiedenen Dateiformate (möglicherweise 1000 von Dateien) gespeichert werden, und wir müssen in der Lage sein zu überprüfen, ob ein Textdokument hochgeladen wurde, bevor eine Wiederholung zu verhindern in der Datenbank.

Im Wesentlichen, wenn ein Benutzer eine neue Datei hochgeladen würden wir in der Lage sein möchten sie mit einer Liste von Dateien zu präsentieren, die entweder Duplikate oder Ähnliche Inhalte enthalten. Dies würde dann erlauben sie eine der bereits bestehenden Dokumente zu wählen oder weiterhin ihre eigenen hochladen.

ähnliche Dokumente würden, indem Sie durch ihre Inhalte für Ähnliche sentances und vielleicht eine dynamisch generierte Liste von Schlüsselwort bestimmt werden. Wir können dann dem Benutzer einen bestimmten Prozentsatz Spiel zeigt sie die Duplikate finden.

Können Sie alle Pakete für diesen Prozess empfehlen und Ideen, wie Sie dies in der Vergangenheit getan haben könnte?

Die direkte doppelte ich denken kann, indem sie alle den Textinhalt und

erfolgen
  • Stripping Leerzeichen
  • Entfernen von Interpunktion
  • Konvertieren zu senken oder Großbuchstaben

dann einen MD5-Hash mit neuen Dokumenten vergleichen bilden. diese Elemente Strippen sollte verhindern Betrogenen nicht, wenn der Benutzer ein Dokument bearbeitet in zusätzlichen Absatzumbrüchen zum Beispiel hinzuzufügen gefunden werden. Irgendwelche Gedanken?

Dieser Prozess könnte auch möglicherweise als nächtlichen Job läuft und wir können die Nutzer von Dubletten beim nächsten Login, wenn der Rechenaufwand zu groß benachrichtigen in Echtzeit ausgeführt werden. Realtime würde jedoch bevorzugt werden.

War es hilfreich?

Lösung

Update: Ich habe jetzt eine PHP-Erweiterung geschrieben namens php_ssdeep für die ssdeep C API nativ Fuzzy Hashing und Hash-Vergleiche in PHP zu erleichtern. Weitere Informationen finden Sie gefunden über auf meinem Blog . Ich hoffe, dies ist nützlich für die Menschen.

Ich habe ein Programm gefunden, das tut, was ihr Schöpfer, Jesse Kornblum, „Fuzzy Hashing“ nennt. Sehr im Grunde macht es Hashes eine Datei, die verwendet werden kann, ähnliche Dateien oder identische Übereinstimmungen zu erkennen.

Die Theorie dahinter hier dokumentiert ist: Identifizierung fast identische Dateien Kontext ausgelöst stückweise Hashing mit

ssdeep ist der Name des Programms, und es kann unter Windows oder Linux ausgeführt werden. Es wurde für den Einsatz in der forensischen Computing gedacht, aber es scheint geeignet genug, um unsere Zwecke. Ich habe einen kurzen Test auf einer alte Pentium 4 Maschine getan, und es dauert ca. 3 Sekunden eine Hash-Datei von 23MB zu durchlaufen (Hashes für knapp 135.000 Dateien) für die Spiele gegen zwei Dateien suchen. Ich war auf der Suche gegen auch, dass die Zeit beinhaltet Hashes für die beiden Dateien.

Andere Tipps

Ich bin auf ein ähnliches Problem in web2project arbeiten und nach um zu fragen und Graben, kam ich zu dem Schluss, von „der Benutzer kümmert sich nicht darum“. Mit doppelten Dokumenten nicht Angelegenheit an dem Benutzer, solange sie ihr eigenes Dokument, das von seinen eigenen Namen finden können.

That being said, hier ist der Ansatz, den ich nehme mir:

  • Lassen Sie einen Benutzer ein Dokument zu mit je nachdem, was Projekten Assoziieren / Aufgaben sie wollen;
  • Die Datei sollte jemand bekommt es über http .. zu verhindern, umbenannt oder besser außerhalb des Web-Root gespeichert. Der Benutzer wird nach wie vor ihre Dateinamen in dem System sehen, und wenn sie es herunterladen, können Sie die Header mit dem „richtigen“ Dateinamen festgelegt;
  • An einem gewissen Punkt in der Zukunft, um das Dokument zu sehen verarbeiten, wenn es Duplikate sind .. an dieser Stelle aber wir sind nicht Modifizieren des Dokuments. Schließlich könnte es wichtige Gründe, die Leerzeichen oder Großschreibung geändert wird;
  • Wenn es Betrogenen sind, löschen Sie die neue Datei und verknüpfen Sie dann auf die alte;
  • Wenn es nicht düpiert, nichts tun;
  • Index der Datei für Suchbegriffe - je nach Dateiformat, gibt es viele Möglichkeiten, auch für Word-Dokumente;

Während all dies, wir haben den Benutzer nicht sagen, dass es ein Duplikat war ... sie kümmern sich nicht. Es ist uns (Entwickler, db Admins, etc.), dass die Pflege.

Und ja, das funktioniert auch, wenn sie später eine neue Version der Datei laden. Zuerst müssen Sie den Verweis auf die Datei löschen, dann - genau wie in der Garbage Collection -. Sie nur die alte Datei löschen, wenn es null Verweise auf sie

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top