У меня есть таблица продуктов SQL Server, и каждый продукт имеет описание, которое доступно на нашем сайте. Я хочу предотвратить или, по крайней мере, предупредить наших пользователей, когда описание слишком похоже на описание другого продукта. Длина описания каждого продукта может сильно различаться.SQL - сходство между двумя строками переменной длины
Я хотел бы запросить продукты с описаниями, которые включают в себя дубликаты/аналогичные абзацы/блоки текста между собой. т.е. Строка имеет кучу уникального контента, но разделяет подобный/идентичный пункт ж/строки B. Однако, я не уверен, схожесть алгоритм лучше всего использовать: появляются
В Levenshtein distance и Jaro-Winler distance алгоритмов чтобы хорошо работать только с короткими струнами.
Я не уверен, что longest common subsequence algorithm учитывает большие различия очень хорошо. то есть он, как представляется, игнорирует потенциальное пространство между двумя символами, нахожу любую подобную комбинационную последовательность.
Fuzzy hashing рода звуков, что я ищу, но я не только ищет дублировать содержание ж/тонкие различия. Я также ищет дублирующийся контент w/тонкие различия, введенные в уникальном блоке текста. И я понятия не имел, как реализовать нечеткие хэши в SQL. SOUNDEX() и DIFFERENCE(), похоже, используют нечеткое хеширование, но для моего варианта использования довольно неточны.
В идеале функция SQL сходства была бы быстрой, но я мог бы хранить значения кеширования в другой таблице и планировать задание, которое иногда обновляется.
Какова наилучшая реализация алгоритма/SQL (или интеграция CLR) для достижения этой цели?
Почему вы ограничиваете себя внедрением этого в SQL? –
Ну, я полагаю, это не обязательно в SQL. Тем не менее, я предполагаю, что чистая реализация SQL будет более эффективной. Я мог бы использовать интеграцию .NET CLR, например [эту библиотеку сходства] (http://blog.hoegaerden.be/2011/02/05/finding-similar-strings-with-fuzzy-logic-functions-built-into- mds /) ... но у меня нет опыта интеграции с SQL Server CLR, и я до сих пор не знаю, какой алгоритм использовать. –
Одна вещь, которую вы могли бы попробовать, - взять строку и рассмотреть только экземпляры определенных букв, а затем Levenshtein те строки.Например, возьмите текст, подобный «Lorem ipsum dolor sit amet», и рассмотрите только примеры e и t. Результирующей строкой будет etet, который вы могли бы использовать Levenshtein для другой отфильтрованной строки. Очевидно, требует некоторой настройки, но, надеюсь, вы получите эту идею. – kevmo314