2012-03-02 3 views
0

Я храню HTML-содержимое сообщений электронной почты в своей базе данных.MYSQL найдет, как разные два текстовых поля?

Если в моей базе данных хранятся два одинаковых письма, это лишь немного отличается из-за персонализации (можно сказать, «Привет, Стивен, спасибо вам за подписку ...», а другой «Привет, Андрей, спасибо вы для подписки ... »).

Как я могу сказать, что эти текстовые поля немного отличаются? (возможно, получите процент, говорящий, что они равны 95%).

ответ

4

Вот хорошая отправная точка для MySQL: http://www.artfulsoftware.com/infotree/queries.php#552

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

Для PHP есть встроенная функция Левенштейна: http://www.php.net/manual/en/function.levenshtein.php

+0

О, хватит, это умно. Я буду отмечать это как можно скорее, как только я заставлю его работать. ;) –

+0

@StephenSarcsamKamenar Извините, я смотрел на то, что вы используете MySQL. Если вы хотите сделать это в PHP вместо MySQL, в PHP есть встроенная функция levenshtein: http://www.php.net/manual/en/function.levenshtein.php –

+0

Np. Я бы предпочел сделать это в MYSQL по соображениям производительности. Почему функция levenshtein имеет ограничение на 255 символов для обеих строк? –

1

Это также может помочь: http://www.php.net/manual/en/function.similar-text.php. Аналогичное_text() возвращает количество совпадающих символов в обеих строках.

+0

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

+0

Согласно руководству PHP, levenshtein быстрее, чем аналогичный_текст. levenshtein - O (m * n) (m - len строки 1, n - длина строки 2), тогда как analog_text - O (n ** 3) (n - длина самой длинной строки). –

+0

Слишком плохой levenshtein не работает, если «одна из строк аргумента длиннее 255 символов». /: –

Смежные вопросы