Быстрая замена множества слов в тексте. Как ?

xtester

Новичок
Быстрая замена множества слов в тексте. Как ?

Дано:
Есть некий форум на котором юзеры общаются используя множество технических терминов (например "пороховой костылезабивщик", "приёмник скребков")

Хочется:
Изменять текст публикуемого сообщения юзера таким образом, чтобы в тексте технические термины менялись на ссылки с описанием этого термина.
Например юзер написал:
"Коллеги, я тут прикупил пороховой костылезабивщик. Не подскажете как он включается ?"

и этот текст необходимо показывать на страничке как
"Коллеги, я тут прикупил <a href="../poroh.htm">пороховой костылезабивщик</a>. Не подскажете как он включается ?"


Проблема:
Технических терминов очень много (~50000). Проверка сообщения юзера через прямой перебор всех терминов - очень затратная процедура, особенно когда сообщений достаточно много.

Вопрос:
Каким образом сделать быстрой проверку текста на наличие технических терминов ?

(сообщения пользователей хранятся в базе в виде "id" - "текст сообщения"
описание терминов хранятся тоже в базе : "id" - "название термина" - "описание термина")
 

xtester

Новичок
Автор оригинала: nalim
почему критична скорость?
замените медленно
потому что
1) сообщений очень много
2) терминов очень много
3) думаю что есть решение лучше
 

newARTix

Новичок
xtester
на вскидку, перебирать можно не термины, а слова сообщения. И не каждый раз, а только при сохранении. И сохранять в отдельное поле, например. Можно даже в этом отдельном поле хранить не весь текст отпарсеного сообщения, а как раз те термины которые в этом сообщении нашлись, тогда можно сделать очень гибкий вывод.
С другой стороны, в большинстве готовых форумов есть процедуры индексации сообщений для быстрого поиска, сначала нужно разобраться с их алгоритмом.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
особенно когда сообщений достаточно много.
сообщение только одно. То, которое сейчас добавляется на форум. Зачем повторно выполнять сделанное действие?
 

xtester

Новичок
Автор оригинала: флоппик
сообщение только одно. То, которое сейчас добавляется на форум. Зачем повторно выполнять сделанное действие?
всё так, но поскольку юзеры могут редактировать сообщения и часто добавляют их, то процедура замены слов в тексте запросто может повесить любой сервак
 

флоппик

promotor fidei
Команда форума
Партнер клуба
всё так, но поскольку юзеры могут редактировать сообщения и часто добавляют их, то процедура замены слов в тексте запросто может повесить любой сервак
Где замеры? Не вижу.
 

xtester

Новичок
Автор оригинала: newARTix
xtester
на вскидку, перебирать можно не термины, а слова сообщения. И не каждый раз, а только при сохранении. И сохранять в отдельное поле, например. Можно даже в этом отдельном поле хранить не весь текст отпарсеного сообщения, а как раз те термины которые в этом сообщении нашлись, тогда можно сделать очень гибкий вывод.
С другой стороны, в большинстве готовых форумов есть процедуры индексации сообщений для быстрого поиска, сначала нужно разобраться с их алгоритмом.
предложенный вариант не подойдет, потому что среди терминов встречаются составные из других

Например у вас текст сообщения такой:
"У меня есть карбид диметил хлорид натрия. Можно его выпить ?"

и в базе терминов записано:
Термин - Описание
"карбид" - странное серое вещество
"карбид диметил" - очень странное, но зеленое вещество
"карбид диметил хлорид" - штука, используемая химиками

Как в таком случае модифицировать текст ?

-~{}~ 12.12.08 14:28:

Автор оригинала: флоппик
Где замеры? Не вижу.
просто такой метод - это брутфорс какой-то :)
я его естественно не пробовал и не замерял
 

Alexandre

PHPПенсионер
поиск-подмена должна делаться один раз при записи
можно ее поставить в крон:
обходим раз в час БД, выбираем отредактированные или добавленные сообщения и делаем подмену.
 

newARTix

Новичок
предложенный вариант не подойдет, потому что среди терминов встречаются составные из других

Например у вас текст сообщения такой:
"У меня есть карбид диметил хлорид натрия. Можно его выпить ?"

и в базе терминов записано:
Термин - Описание
"карбид" - странное серое вещество
"карбид диметил" - очень странное, но зеленое вещество
"карбид диметил хлорид" - штука, используемая химиками

Как в таком случае модифицировать текст ?
непонял, а в случае когда мы перебираем термины, что-то меняется? они перестают быть составными? будет точно такая же проблема только в профиль. тут все зависит от средней длины сообщения. если длина сообщения обычно не превышает 500 слов, а средняя длина колеблется около 50 слов... то выигрыш в 100-1000 раз по количеству перебираемых слов помоему вполне достоен 10 минут размышлений и решения проблемы с составными терминами. позволю себе больше не приводить вариантов "на вскидку", дабы не уговаривать никого...
Надеюсь, хотя бы то что "на лету" это делать не стоит, в не оспариваете?
 
Сверху