Vérification des doublons de documents et de documents similaires dans une application de gestion de documents

StackOverflow https://stackoverflow.com/questions/1728977

Question

Mise à jour: Je l'ai maintenant écrit une extension PHP appelé php_ssdeep pour l'API ssdeep C pour faciliter les comparaisons et hachage floue hachage en PHP natif. Plus d'informations peuvent être trouvées sur mon blog . J'espère que cela est utile aux gens.

Je suis impliqué par écrit une application de gestion de documents personnalisé en PHP sur une boîte Linux qui va stocker différents formats de fichiers (potentiellement 1000 de fichiers) et nous devons être en mesure de vérifier si un document texte a été téléchargé avant d'éviter la duplication dans la base de données.

Essentiellement lorsqu'un utilisateur télécharge un nouveau fichier, nous aimerions pouvoir les présenter avec une liste de fichiers qui sont soit en double ou contiennent un contenu similaire. Ce serait alors leur permettre de choisir l'un des documents pré-existants ou continuer de transférer leurs propres.

documents similaires seraient déterminés en regardant à travers leur contenu sentances similaires et peut-être une liste générée dynamiquement des mots-clés. On peut alors afficher un match de pourcentage à l'utilisateur pour les aider à trouver les doublons.

Pouvez-vous recommander des forfaits pour ce processus et des idées de la façon dont vous pourriez avoir fait dans le passé?

Le double directe, je pense que peut être fait en obtenant tout le contenu du texte et

  • Suppression des espaces blancs
  • Suppression de la ponctuation
  • Convertir en minuscule ou en majuscule

forment alors un hachage MD5 pour comparer avec tous les nouveaux documents. Décapage ces articles sur devrait contribuer à prévenir les dupes pas trouvés si l'utilisateur édite un document pour ajouter des sauts de paragraphe supplémentaires par exemple. Toute pensée?

Ce processus pourrait également exécuter potentiellement comme un travail de nuit et nous avons pu informer l'utilisateur de tous les doublons lors de leur connexion suivante si l'exigence de calcul est trop grand pour fonctionner en temps réel. En temps réel serait cependant préférable.

Était-ce utile?

La solution

Mise à jour: Je l'ai maintenant écrit une extension PHP appelé php_ssdeep pour l'API ssdeep C pour faciliter les comparaisons et hachage floue hachage dans PHP en mode natif. Plus d'informations peuvent être trouvées sur mon blog . J'espère que cela est utile aux gens.

J'ai trouvé un programme qui fait ce que son créateur, Jesse Kornblum, appelle « Hashage floue ». Très fondamentalement, il fait hash d'un fichier qui peut être utilisé pour détecter les fichiers similaires ou des correspondances identiques.

La théorie sous-jacente est documentée ici: L'identification des fichiers presque identiques en utilisant le contexte déclenché hashing piecewise

ssdeep est le nom du programme et il peut être exécuté sous Windows ou Linux. Il a été conçu pour être utilisé dans l'informatique légale, mais il semble assez adapté à nos besoins. Je l'ai fait un petit test sur un vieux Pentium 4 machine et il faut environ 3 secondes pour passer par un fichier de hachage de 23Mo (hachages pour un peu moins de 135.000 fichiers) à la recherche de matchs contre deux fichiers. Ce temps comprend la création hash pour les deux fichiers que je cherchais contre aussi bien.

Autres conseils

Je travaille sur un problème similaire dans web2project et après avoir demandé autour et creuser, je suis venu à la conclusion de « l'utilisateur ne se soucie pas ». Avoir des documents en double ne pas question à l'utilisateur aussi longtemps qu'ils peuvent trouver leur propre document par son propre nom.

Cela étant dit, voici l'approche que je prends:

  • Permettre à un utilisateur de télécharger un document associant à des projets / tâches quel que soit qu'ils veulent;
  • Le fichier doit être renommé pour empêcher quelqu'un à obtenir via http .. ou mieux stocké à l'extérieur de la racine web. L'utilisateur verra toujours son nom de fichier dans le système et si elles le télécharger, vous pouvez définir les en-têtes avec le nom du fichier « approprié »;
  • À un certain moment dans l'avenir, le processus du document pour voir s'il y a des doublons .. à ce stade cependant, nous sommes pas modifier le document. Après tout, il pourrait y avoir des raisons importantes l'espace ou la capitalisation est modifiée;
  • S'il y a des dupes, supprimez le nouveau fichier, puis créer un lien vers l'ancien;
  • S'il n'y a pas dupes, ne rien faire;
  • Index le fichier des termes de recherche - en fonction du format de fichier, il y a beaucoup d'options, même pour les documents Word;

on Tout au long de tout cela, pas dire que l'utilisateur était un doublon ... ils ne se soucient pas. Il nous est (les développeurs, les administrateurs db, etc.) que les soins.

Et oui, cela fonctionne même si elles télécharger une nouvelle version du fichier plus tard. Tout d'abord, vous supprimez la référence au fichier, puis - comme dans la collecte des ordures -. Vous ne supprimez que l'ancien fichier s'il y a zéro des références à ce

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top