Сходство между строками - SQL Server 2005 - PullRequest
4 голосов
/ 12 апреля 2010

Я ищу простой способ (UDF?), Чтобы установить сходство между строками. Функции SOUNDEX и DIFFERENCE, похоже, не справляются с работой.

Сходство должно основываться на количестве общих символов (порядок имеет значение).

Например:

Spiruroidea sp. AM-2008

и

Spiruroidea gen. зр. AM-2008

следует признать похожим.

Любые указатели будут очень признательны.

Спасибо.

Christian

Ответы [ 2 ]

8 голосов
/ 12 апреля 2010

Возможно, вы захотите реализовать алгоритм Расстояние Левенштейна как UDF, чтобы он возвращал количество операций, которые необходимо выполнить над строкой A, чтобы она стала строкой B. часто называется расстояние редактирования .

Затем можно сравнить результат функции расстояния Левенштейна с фиксированным порогом или с процентной длиной строки A или строки B.

Вы бы просто использовали его следующим образом:

WHERE LEVENSHTEIN(Field_A, Field_B) < 4;

Возможно, вы захотите проверить следующую реализацию расстояния Левенштейна для SQL Server:

1 голос
/ 12 апреля 2010

Подобные вещи нетривиальны, и вы должны привести больше примеров.

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

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

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

...