находя строки, аналогичные заданным по ключевым словам, у каждого ключевого слова есть своя «сила» - PullRequest
0 голосов
/ 24 марта 2011

Этот вопрос - вызов для меня, мой друг не может сказать мне, как это сделать, но он действительно хороший программист (я думаю).

Пользователи могут помещать в базу предложений. Когда пользователь вводит предложение, оно сохраняется в таблице sentences. Далее предложение разбивается на слова, каждый звуковой индекс слова сохраняется в таблице tags с идентификатором разбитого предложения.

Наконец, каждый звуковой осветитель слова помещается в таблицу weights, если там есть арлиады того же soundex, функция добавляет 1 к counter этого soundex.

(Для тех, кто не знает: soundex - это функция, которая возвращает фонетическое представление (как оно звучит) строки)

Структура базы данных: Одна таблица sentences содержит две строки: id и sentence. Другая таблица tags содержит id (с - это id предложения) и tag (с - это одно слово из предложения). tag на самом деле не просто простое слово, а звуковое сопровождение этого слова. Последняя таблица weights содержит tag и weight (с помощью числа это говорит о том, сколько таких тегов в таблице tags)

Мой вопрос: как я могу сделать так, чтобы ведьма возвращала похожие предложения для данной строки. Он должен использовать теги (soundex of word), и каждый тег должен иметь собственную мощность, основанную на таблице weights. Часто используемые теги важнее оригинальных тегов. Это можно сделать всего за один запрос MySQL?

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

Ответы [ 3 ]

2 голосов
/ 24 марта 2011

Что ж, вместо таблицы весов, почему у вас нет таблицы, которая связывает теги с предложениями? Также есть таблица с именем sentence_tags со столбцами sentence_id и tag_id. Затем вы можете вычислить вес, выполнив объединение этих двух таблиц, и, тем не менее, сослаться на предложение, содержащее тег. Вы также можете хранить и тег, и soundex в таблице тегов, пока вы там.

0 голосов
/ 24 марта 2011

Предложение Джо К., похоже, очень важно для хорошего дизайна базы данных.

Не хранить информацию, которая может быть экстраполирована.

То есть использовать оператор соединения и PHP для вычисления веса во время выполнения.

Я понимаю, что это может быть неправильным решением в вашем дизайне, но часто несколько минут, затрачиваемых на интеллектуальный дизайн базы данных, заставляют все работать намного лучше.

0 голосов
/ 24 марта 2011

Возможно, Расстояние Левенштейна - это то, что вы ищете. Он рассчитывает количество шагов, необходимых для перехода от одного слова к другому.

Поймите, что это дорогостоящая операция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...