Php ile metin anahtar kelime değiştirme &

3 Cevap php

I have a news site containing an archive with more than 1 million news. I created a word definitions database with about 3000 entries, consisting of word-definition pairs.

What I want to do is adding a definition next to every occurence of these words in the news. I cant make a static change as I can add a new keyword everyday, so i can make it realtime or cached.

Soru, bir str_replace veya preg_replace bir metinde 3 bin anahtar kelime arama ve onları değiştirmek için çok yavaş olurdu.

Herhangi bir hızlı alternatifler var mı?

3 Cevap

str_replace (Eğer bir anahtar kelime için "üstün" in "perl" istediğiniz sürece), sen (\b ile örneğin preg_replace) dikkate sözcük sınırları alır şey gerekir sizin için çalışmaz. Tabii ki, bir kerede tüm anahtar kelimeleri 3000 preg_replace edemez, ama bir tek belge neredeyse hepsini içerebilir, bu nedenle ben bir dizin tablo DOC_ID-> word_id koruyarak, örneğin, tüm belgeler öncesi endekslenmesi öneririm. Belirli bir belgeyi hizmet veren, indeks sorgulamak ve yalnızca belge (aslında muhtemelen en fazla 100) içeren kelimeleri değiştirin.

Belgeler kısa ise, diğer tarafta, dizin tablo muhafaza sorun değerinde olmayabilir. Sadece anında ön indeksleme yapabilirsiniz, örneğin ile strpos,

 $kw = array();
 foreach($all_keywords as $k) if(strpos($text, $k)) $kw[] = $k;

 // $kw contains only words that actually occur in the text
 // (and perhaps some more, but that doesn't matter)

 preg_replace_callback('/\b(' . implode('|', $kw) . ')\b/',  'insert_keyword', $text)

str_replace oldukça hareketli olduğunu ve olduğunu bildiğim için, hızlı PHP için bulacaksınız. Kesinlikle bir önbellek tutmalı; Bu irade bypass performans sorunları.

Bu hataları vb azaltmak, süreci hızlandırmak için sadece bir öneri

  1. Toplu haber arşivleri olacak bir işlev oluşturun.
  2. Metni değiştirmek için bir işlev oluşturun. str_replace benim bahistir.
  3. Php işlem spawn bir işlev oluşturun. Bu thread bakın
  4. Önbelleğe alma işlevlerini ekleyin.