Metin bloğu ile kelimelerin bir dizi maç için hızlı yolu?

4 Cevap php

Konu muhtemelen olabilir gibi net değil, ama kolayca açıklamak için daha iyi bir şekilde düşünmek için uğraşıyordu.

Sanırım bir XML besleme pick up bazı maddeler üzerinde bir küfür filtre uygulamak duyuyorum. Şu anda ben bir dizide Badwords var ve sadece bu yüzden gibi metin kontrol;

str_replace($badwords, '', $text, $count); 
if ($count > 0) // We have bad words...

Ama bu YAVAŞ! Yani yavaş! Ben bir seferde 30.000 + makaleler işlemek için çalışıyorum, ben bunu başarmak için daha iyi bir yolu olup olmadığını merak başlar. Sadece strpos dizileri destekleniyorsa! O zaman bile daha hızlı olacağını sanmıyorum ...

Ben herhangi bir öneriniz isterim. Şimdiden teşekkürler!

EDIT:

I have now tested a few methods between calls to microtime() to time them. str_replace() = 990 seconds preg_match() = 1029 seconds (Remember I only need to identify them, not replace them) no bad word filtering = 1057 seconds (presumably because it has another thousand or so bad-worded articles to process.

Tüm cevaplar için teşekkürler, ben yaparım sadece hala str_replace ile. :)

4 Cevap

Nasıl tek seferde her şeyi değiştirmek için bir regex tüm kelimeleri birleştirerek hakkında? Ben bu performans için gitmek nasıl olacak emin değilim ama o might daha hızlı olacak.

Örneğin

preg_replace('/(' . implode('|', $badwords) . ')/i', '', $text);

benim yerel gazete ofiste çalışmak için kullanılır. yerine ne ben yaptım bir kullanıcı makaleyi görüntülemek üzere istendiğinde sadece bir filtre çalıştırın oldu orijinal dosyalar, gelen Badwords silmek için metni değiştirme. Eğer orijinal metni korumak bu şekilde hiç ihtiyacınız, ama aynı zamanda izleyiciler için temiz bir sürümünü saçmak gerekir. Bir şey yanlış anlama am sürece seferde 30.000 makaleler işleme gerek olmamalıdır.

"Yavaş" Define? 30.000 makaleler işleme edilecek oluyor şey muhtemelen tamamlamak için biraz zaman alacaktır.

O dedi, (ben sadece göz için oraya atarak, benchmarked değil) bir seçenek bir regex kelimeleri birleştirmek ve (sadece onları bir araya koymak için | operatörünü kullanarak preg_replace yoluyla bu çalıştırmak olacaktır .)