MySQL функция для проверки процента сходства между двумя текстами - PullRequest
6 голосов
/ 12 октября 2011

Мне нужен код MySQL для проверки процента сходства текста, отправленного через форму, с количеством текстов, хранящихся в базе данных MySQL.

Я ищу хранимую процедуру MySQL, которая будет работать как PHP similar_text()* функция 1005 *.Уже существует процедура расстояния MySQL Левенштейна, но ее недостаточно.

Когда пользователь отправляет текст, алгоритм должен возвращать любую запись в базе данных с заданным процентом сходства с представленным текстом (он будет сравнивать только один столбец в базе данных).), например, вернуть все записи из базы данных, которые имеют сходство> 40% с текстом, представленным пользователем.

Например, таблица

TABLE - Articles
id, article_body, article_title

Код должен возвращать все строки, которые имеют процент сходства> 40% (или другое заданное значение) с текстом (article_body), отправленным пользователем.

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Я бы сделал это в приложении.

Может быть, результат функции SOUNDEX поможет вам -

SELECT SOUNDEX('Hello'), SOUNDEX('Hello world'), SOUNDEX('hellboy');
+------------------+------------------------+--------------------+
| SOUNDEX('Hello') | SOUNDEX('Hello world') | SOUNDEX('hellboy') |
+------------------+------------------------+--------------------+
| H400             | H4643                  | H410               |
+------------------+------------------------+--------------------+
0 голосов
/ 12 октября 2011

Я думаю, что алгоритм должен быть таким ..

  • сначала вычислите длину данного слова (используя LENGTH ).
  • затем ищите это слово в определенном столбце (используя INSTR или любую конкретную функцию)
  • теперь вычислите длину каждого подобранного слова и используйте простые математические выражения

Например: я хочу найти ' Ад ' с соответствием более чем 50% , и в моей базе данных есть 2 подходящих слова ' Hello World ' и ' Хеллбой '

длина (ад) = 4
длина (привет мир) = 11
длина (хеллбой) = 7

для Привет, мир (11-4) / 11 = 63,63%
для хеллбоя (7-4) / 7 = 42,85%

теперь только Hello World будет восстановлено на основе вышеуказанного расчета.

надеюсь, что это работает ..

...