Автоматическая вставка ссылок на ключевые слова.

opaHzheBb1u
На сайте с 26.05.2006
Offline
168
1091

Есть словарь с >2000 терминов. есть новостной сайт. нужно чтобы в новых статьях в слова, имеющиеся в словаре, автоматически вставлялись линки на их расшифровку в словаре. Какие способы реализации наиболее предпочтительны?

Самый простой способ вроде как str_replace слово на слово с ссылкой, только если учесть что их там больше 2000, а надо еще и формы слов как-то охватить... выполняться долго будет.

спасибо

Ayavryk
На сайте с 11.10.2003
Offline
209
#1
opaHzheBb1u:
Самый простой способ вроде как str_replace слово на слово с ссылкой, только если учесть что их там больше 2000, а надо еще и формы слов как-то охватить... выполняться долго будет.
спасибо

Выполняйте один раз при загрузке новости. Только не str_replace, а eregi_replace. В последнем случае можно еще и словарные окончания ловить.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
opaHzheBb1u
На сайте с 26.05.2006
Offline
168
#2

ок спасибо. попробую

[Удален]
#3

str_replace как раз самая быстрая, затем идет preg_replace. ereg_replace - самая медленная.

str_replace(массив_слов, массив_замен, текст). А если надо окончания ловить, то можно preg_replace использовать.

Segey
На сайте с 23.08.2005
Offline
404
#4
javadf:
str_replace как раз самая быстрая

Зависит от ситуации, при довольно сложной замене пробовал заменить preg_replace на много str_replace - в итоге вышло дольше.

Brexit - уже совсем рядом. (https://about-this-model.blogspot.com/2019/03/brexit.html)
Каширин
На сайте с 03.01.2004
Offline
1031
#5

Только preg_replace:

1. Большие возможности, в том числе - замена по маске и все прелести регулярных.

2. Большее быстродействие.

Кроме того - слов в словаре много ;) он может вырасти с 2-х тысяч до 20-и, к примеру. А выполнять обработку новости 20 тыс. раз - не рационально. Мне кажется, стоит наоборот - разбить новость на слова в масссив, отбросить короткие (3 символа и менее), выделить уникальные слова в формах. Останется массив из 1500 членов. Ну и циклом. Всех делов - на пару сек ;)

Kolyaj
На сайте с 28.03.2006
Offline
69
#6

Циклы не выход с точки зрения здравого смысла: очевидно, что при оптимальном варианте новость просматривается один раз.

Лучше использовать preg_replace_callback с регулярным выражением /\w+/. Если мысль не ясна - пишите, поясню.

opaHzheBb1u
На сайте с 26.05.2006
Offline
168
#7

Kolyaj,мысль не очень ясна. опишите подробнее пожалуйста.

Kolyaj
На сайте с 28.03.2006
Offline
69
#8

opaHzheBb1u,


function callback($matches) {
// В $matches[0] будет нужное слово,
// если оно есть в словаре то функция возвращает ссылку
// если нет, то само слово
}
$news = preg_replace_callback("/\w+/", "callback", $news);

В результате имеем один проход по новости (причем даже внутри регулярного выражения без возвратов).

opaHzheBb1u
На сайте с 26.05.2006
Offline
168
#9

аа.. все понял. огромное спасибо!!!!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий