Найти похожие строки в базе данных - PullRequest
9 голосов
/ 30 сентября 2010

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

Давайте, например, возьмем таблицу автомобиль (все в одной таблице для простоты примера):

CarID  |  Car Name  | Brand | Year | Top Speed | Performance | Displacement | Price
1         Z3          BMW     1990    250          5.4           123           23456
2         3er         BMW     2000    256          5.4           123           23000
3         Mustang     Ford    2000    190          9.8           120           23000

Теперь я хочу сделать такие запросы:

«Поиск автомобилей, похожих на Z3 (все марки)» (игнорировать «Car Name»)

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

В этом примере это будет «3er BMW», так как 2 столбца (производительность и смещение одинаковы)

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

Также я был бы очень признателен за полезные ссылки или книги. (Не проблема для меня, чтобы продолжить расследование, если я знаю, где искать или что читать)

Ответы [ 5 ]

3 голосов
/ 30 сентября 2010

Вы можете попытаться дать каждой записи «оценку» в зависимости от ее полей.

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

В итоге вы получите оценку для каждой записи, и вы сможете найти похожие записи, сравнив оценки и найдя записи, которые составляют +/- 5% (например) от записи.вы смотрите на

2 голосов
/ 30 сентября 2010

Чтобы решить вашу проблему, вы должны использовать кластерный алгоритм . Во-первых, вам нужно определить метрику сходства, а затем подсчитать сходство между вашими входными кортежами (все Z3) и остальной частью базы данных. Вы можете ускорить процесс, используя алгоритмы, такие как k-means . Пожалуйста, посмотрите на этот вопрос, там вы найдете обсуждение проблемы, аналогичной вашей: Поиск групп похожих строк в большом наборе строк .

Эта ссылка также очень полезна: http://matpalm.com/resemblance/.

Что касается реализации, если у вас много кортежей (и более чем нескольких машин), вы можете использовать http://mahout.apache.org/. Это среда машинного обучения на основе hadoop. Вам потребуются большие вычислительные мощности, потому что кластерные алгоритмы сложны.

2 голосов
/ 30 сентября 2010

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

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

1 голос
/ 30 сентября 2010

Не совсем ответ на ваш вопрос, но вы говорите, что у вас много записей, вы должны рассмотреть нормализацию вашего автомобильного стола, переместить марку в отдельную таблицу и "Имя автомобиля" / модель в отдельную Таблица. Это уменьшит объем данных для сравнения во время поисков.

1 голос
/ 30 сентября 2010

Взгляните на одну из существующих поисковых систем, например Lucene .Они реализуют множество подобных вещей.

Этот документ также может быть полезен: Поддержка разработчиков с помощью запросов на естественном языке

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