MySQL ve PHP kullanarak yinelenen içerik bulun

3 Cevap php

Benim web uygulaması geliştirme üzerine bir sorunla karşı karşıyayım, burada açıklaması:

(Boyları oldukça büyük ekran yaklaşık dörtte biri haline rağmen genelde kısa haberler) Bu webapp (hala alpha) kullanıcı tabanlı içerik oluşturulan her kullanıcı bu maddelerin en az 10 gönderir, böylece sayı oldukça hızlı büyümek gerekir. Doğası gereği, makalelerin yaklaşık% 10 çoğaltılamaz olacak, bu yüzden onları almak için bir algoritma gerekir.

Ben aşağıdaki adımlarla geldi:

  1. Sunulması üzerine fetch a length of text ve ayrı bir tabloda depolamak (article_id, uzunluk), problem makaleleri PHP special_entities () fonksiyonu kullanılarak kodlanmış ve kullanıcılar (hafif değişiklikler ile içerik göndermek Bazı biri) virgül, vurgu kaçırmak hatta bazı kelimeleri atlar
  2. % 5 (? Ben makale gönderme ile ilgili akılda insan faktörünü tutarak, başka bir eşiği kullanmalısınız) - Sonra uzaklığı aralığı = new_post_length + / ile veritabanındaki tüm girdileri almak
  3. Ilk 3 anahtar kelimeleri alıp 2. adımda getirilen makaleleri karşı bunları karşılaştırmak
  4. En muhtemel maçları ile son bir dizi PHP'nin Levenstein () işlevini kullanarak yeni girdiyi karşılaştırmak olması

Bu süreç cron kullanarak değil, makale gönderme idam edilmelidir. Ancak bu sunucu üzerinde ağır yükler oluşturabilir şüpheli.

Eğer herhangi bir fikir verebilir misiniz lütfen?

Thank you! Mike

3 Cevap

Metin Benzerlik / plagiat / yinelenen büyük bir konudur. Çok algos ve çözümleri vardır.

Lenvenstein durumda da çalışmaz. Sadece (o nedeniyle CPU öldüreceğini onun "karmaşıklığı" için) küçük metinler üzerinde kullanabilirsiniz.

Bazı projeler (google bu konuda bilgi bulabilirsiniz.) "Anahtar kelimelerin adaptif yerel uyum" kullanımı

Ayrıca, (çok öğretici, cevap 3 bağlantıları kontrol) kontrol edebilirsiniz:

http://stackoverflow.com/questions/945724/cosine-similarity-vs-hamming-distance/1290286#1290286

Bu yardımcı olacağını umuyoruz.

I git, sürüm kontrol sistemi, yinelenen veya yakın yinelenen içerik tespit için mükemmel algoritmaları olduğunu işaret etmek istiyorum. Bir taahhüt yaptığınızda, size (ne olursa olsun yeniden adlandırın) değiştirilmiş dosyaları göstermek ve değişmiş hangi oranda olacaktır.

Bu açık kaynak bulunuyor, ve büyük ölçüde küçük, odaklanmış C programlarında yazılmıştır. Belki kullanabilirsiniz bir şey var.

Sen aynı kategorideki diğer tüm mesajların karşı metin dizeleri ve anahtar kelimeleri kontrol etmek zorunda değil yükü azaltmak için app tasarım olabilir. Eğer kullanıcılar üçüncü parti içerik göndermek olsaydı, onlar adresler olarak başvuran nelerdir? Tumblr uygulamayı görmek - temelde bir serbest biçimli metin alanı böylece her kullanıcı yorum ve sonrası içeriği kendi anlatı bölümü oluşturabilirsiniz var, ama sonra orada biçimlendirilir alanları da kullanıcı (videoyu ekleyen referans türüne bağlı olarak, resim, link, alıntı, vb) on Tumblr bir gelişme Onlar herhangi bir yazı istediğiniz gibi kullanıcı biçimlendirilmiş içerik gibi birçok / birkaç tür eklemek icar olacaktır.

O zaman sadece bir url veya embed video kodunu gibi bilinen türlerine karşı kontrol edilir. Çeşit kategori veya türe göre sınıflandırmak için kullanıcıyı zorlama rexem önerisi ile bu birleştirin ve çiftleri aramak için çok daha küçük bir kapsama sahip olacak.

Eğer her kullanıcıya kendi "stream" ilanıyla bazı yol verebilir eğer birçok kişi aynı içeriği yinelenen Ayrıca eğer o önemli değil. Insanlar onlar yinelenen öğeleri görünce topluluk düzenleyen böylece bir ana "ön sayfa" seviye akımına bireysel derelerden kadar oy için bazı yol ver. Bunun yerine Digg veya Reddit gibi bir oy yukarı / aşağı, sen icar onları sıralama (kişiler, ilgili yazılara mesajları eklemek / birleştirmek için bir yol eklemek ve uygulaması üzerinde bir faaliyet olarak içeriğini yönetmek ziyade arkasında bir sorun yapma olabilir sahneleri işleme).