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

  • Автор темы Автор темы xtester
  • Дата начала Дата начала

xtester

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

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

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

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


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

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

(сообщения пользователей хранятся в базе в виде "id" - "текст сообщения"
описание терминов хранятся тоже в базе : "id" - "название термина" - "описание термина")
 
Автор оригинала: nalim
почему критична скорость?
замените медленно
потому что
1) сообщений очень много
2) терминов очень много
3) думаю что есть решение лучше
 
xtester
на вскидку, перебирать можно не термины, а слова сообщения. И не каждый раз, а только при сохранении. И сохранять в отдельное поле, например. Можно даже в этом отдельном поле хранить не весь текст отпарсеного сообщения, а как раз те термины которые в этом сообщении нашлись, тогда можно сделать очень гибкий вывод.
С другой стороны, в большинстве готовых форумов есть процедуры индексации сообщений для быстрого поиска, сначала нужно разобраться с их алгоритмом.
 
особенно когда сообщений достаточно много.
сообщение только одно. То, которое сейчас добавляется на форум. Зачем повторно выполнять сделанное действие?
 
Автор оригинала: флоппик
сообщение только одно. То, которое сейчас добавляется на форум. Зачем повторно выполнять сделанное действие?
всё так, но поскольку юзеры могут редактировать сообщения и часто добавляют их, то процедура замены слов в тексте запросто может повесить любой сервак
 
всё так, но поскольку юзеры могут редактировать сообщения и часто добавляют их, то процедура замены слов в тексте запросто может повесить любой сервак
Где замеры? Не вижу.
 
Автор оригинала: newARTix
xtester
на вскидку, перебирать можно не термины, а слова сообщения. И не каждый раз, а только при сохранении. И сохранять в отдельное поле, например. Можно даже в этом отдельном поле хранить не весь текст отпарсеного сообщения, а как раз те термины которые в этом сообщении нашлись, тогда можно сделать очень гибкий вывод.
С другой стороны, в большинстве готовых форумов есть процедуры индексации сообщений для быстрого поиска, сначала нужно разобраться с их алгоритмом.
предложенный вариант не подойдет, потому что среди терминов встречаются составные из других

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

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

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

-~{}~ 12.12.08 14:28:

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

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

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

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