Bir belge yönetimi uygulamasında belge çiftleri ve benzeri belgeler için denetleme

2 Cevap php

Update: Şimdi php_ssdeep for the ssdeep C API to facilitate fuzzy hashing ve hash comparisons in PHP natively. More information can be found over at my blog adında bir PHP uzantısı yazdım. Ben bu insanlar için yararlı olduğunu umuyoruz.

Veritabanında tekrarını önlemek için önce çeşitli dosya formatlarını saklamak (dosyaların potansiyel 1000) ve biz bir metin belgesi yüklendi olup olmadığını kontrol edebilmek için gereken bir Linux kutusunda PHP bir özel belge yönetimi uygulaması yazıyorum dahil am .

Bir kullanıcı yeni bir dosya yükler Esasen biz ya çoğaltır veya benzer içeriğe sahip dosyaların bir listesini sunmak için muktedir istiyorum. Bu daha sonra onları önceden varolan belgelerden birini seçebilir veya kendi yükleyerek devam için izin verecek.

Benzer belgeleri benzer sentances ve belki de anahtar kelimeler dinamik olarak oluşturulmuş bir liste içeriğine bakarak belirlenecektir. Biz sonra onları çiftleri bulmak yardımcı olmak için kullanıcıya bir yüzdesi maç görüntüleyebilirsiniz.

Bu işlem için herhangi bir paket ve geçmişte yapmış olabilirsiniz nasıl herhangi bir fikir tavsiye edebilir misiniz?

Bence direkt yinelenen tüm metin içeriği ve elde yapılabilir

  • Boşluk sıyırma
  • Noktalama Çıkarma
  • Alt veya üst harf dönüştür

sonra herhangi bir yeni belgeleri ile karşılaştırmak için bir MD5 hash oluştururlar. Üzerinden bu öğeler sıyırma kullanıcı, örneğin fazladan paragraf sonları eklemek için bir belge düzenlerse bulunamadı olmamak dupes önlemeye yardımcı olmalıdır. Herhangi bir düşünce?

Bu süreç aynı zamvea potansiyel bir gece iş olarak çalıştırabilir ve hesaplama gereksinimi gerçek zamanlı olarak çalıştırmak için çok büyük ise onlar sonraki giriş yaptığınızda herhangi çiftleri kullanıcıya bildirmek olabilir. Realtime ancak tercih olacaktır.

2 Cevap

Update: Şimdi php_ssdeep for the ssdeep C API to facilitate fuzzy hashing and hash comparisons in PHP natively. More information can be found over at my blog adında bir PHP uzantısı yazdım. Ben bu insanlar için yararlı olduğunu umuyoruz.

Ben onun yaratıcısı, Jesse Kornblum, "Bulanık Kıyımlama" çağrıları yapar ne bir program bulduk. Çok temelde benzer dosyaları veya aynı sonuç tespit etmek için kullanılabilen bir dosya sağlamalarının hale getirir.

Bunun arkasındaki teori burada belgelenmiştir: Identifying almost identical files using context triggered piecewise hashing

ssdeep programın adıdır ve Windows veya Linux üzerinde çalıştırılabilir. Bu adli bilgisayar kullanım için tasarlanmıştır, ama bizim için uygun yeterli görünüyor oldu. Ben eski bir Pentium 4 makine üzerinde kısa bir test yaptım ve (hemen altında 135,000 dosyalar için sağlamalarının) iki dosya karşı kibrit arayan 23MB bir hash dosyası üzerinden gitmek için yaklaşık 3 saniye sürer. O zaman ben de karşı aradığı iki dosya için hash oluşturma içerir.

Ben web2project benzer bir sorun üzerinde çalışıyorum ve çevresinde soran ve kazma sonra, ben "kullanıcı umurumda değil" sonuca geldi. Yinelenen belgeleri sahip doesn't sürece onlar kendi adıyla kendi belge bulmak gibi kullanıcı için önemli.

Söyleniyor, burada ben alıyorum yaklaşım:

  • Bir kullanıcı istedikleri hangisi Projeler / Görevler ile ilişkilendirerek bir belge yüklemek için izin ver;
  • Dosya http .. ya da daha iyi web kök dışında depolanan aracılığı de alıyorum birisi önlemek için isminin değiştirilmesi gerekmektedir. Kullanıcı hala sistemde kendi dosya göreceksiniz ve bunu indirmek ise, "doğru" dosya adı ile başlıkları ayarlayabilirsiniz;
  • Çiftleri olsa bu noktada .. varsa belge görmek için gelecek, süreç içinde bazı noktada, biz not belge değiştirme. Sonuçta, önemli nedenler veya boşluk harf değiştirildi var olabilir;
  • Dupes varsa, yeni dosyayı silin ve ardından eski birine bağlamak;
  • Dupes yoksa, hiçbir şey yapmak;
  • Endeks arama terimleri için dosya - dosya formatına bağlı olarak, hatta Word belgeleri için birçok seçenek vardır;

Tüm bu boyunca, biz bir yinelenen oldu kullanıcıyı söyleme ... onlar umurumda değil. O bakımı bize (geliştiriciler, db yöneticileri, vb) bulunuyor.

Ve evet, bu daha sonra dosyanın yeni bir sürümünü yüklemek bile çalışır. İlk olarak, daha sonra, dosyaya başvuru silin - sadece çöp toplama gibi - kendisine sıfır referanslar varsa sadece eski dosyayı silin.