Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
Запилил субж, возможно кому-то пригодится )

Основная функция, которая делает всю магию - считает вероятности появления в строке последовательностей символов:
USE [eHealth]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Denis Nikiforov
-- Create date: 24.12.2012
-- Description:	The function generates a character sequence occurence probability table
-- =============================================
ALTER FUNCTION [dbo].[GetProbabilityTable]
(	
	@String nvarchar(max),
	@SequenceLength tinyint
)
RETURNS @Result TABLE
(
	Sequence nvarchar(255) not null,
	P float not null
)
AS
BEGIN
	DECLARE @freq table (Sequence nvarchar(255) not null)
	DECLARE @seq nvarchar(255)
	DECLARE @n int, @i int, @j tinyint

	SET @String = UPPER(@String)
	SET @n = LEN(@String)
	SET @i = 1
	WHILE @i <= @n
	BEGIN
		SET @j = 1
		WHILE @j <= @SequenceLength AND @i + @j - 1 <= @n
		BEGIN
			IF CHARINDEX(SUBSTRING(@String, @i + @j - 1, 1), '- ().,/"''') > 0 BREAK
			INSERT INTO @freq VALUES (SUBSTRING(@String, @i, @j))
			SET @j = @j + 1
		END
		SET @i = @i + 1
	END

	INSERT INTO @Result
	SELECT Sequence, CAST(COUNT(*) AS float)/(SELECT COUNT(*) FROM @freq)
	FROM @freq
	GROUP BY Sequence
	
	RETURN
END


Заполняем индекс:
TRUNCATE TABLE eHealth.dbo.AreaIndex

INSERT INTO eHealth.dbo.AreaIndex
SELECT RegionID, t.Sequence, AreaID, t.P
FROM eHealth.dbo.Area
CROSS APPLY eHealth.dbo.GetProbabilityTable(name, 2) t
Мне был нужен поиск по населенным пунктам. RegionID - регион - в общем случае, какой-то дополнительный атрибут сужающий диапазон поиска, их может быть несколько.

Ищем:
SELECT AreaIndex.AreaID
      ,Area.name
      ,CASE WHEN SUM(t.P) < SUM(AreaIndex.P)
            THEN SUM(t.P) ELSE SUM(AreaIndex.P) END
FROM GetProbabilityTable('Екирбитрург', 2) t
LEFT OUTER JOIN eHealth.dbo.AreaIndex
  ON AreaIndex.Sequence = t.Sequence AND AreaIndex.RegionID = 0
INNER JOIN eHealth.dbo.Area ON AreaIndex.AreaID = Area.AreaID
GROUP BY AreaIndex.AreaID, Area.name
ORDER BY CASE WHEN SUM(t.P) < SUM(AreaIndex.P)
              THEN SUM(t.P) ELSE SUM(AreaIndex.P) END DESC

Вычисляемое число - мера сходства, изменяется от 0 до 1. Равна 1, если строки совпадают с точностью до знаков препинания. Равна 0, если нет ни одного совпадающего символа. Лень думать, как всё это правильно называется )
24 дек 12, 09:51    [13675230]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
По-моему я гений )) Изначально я пытался сделать какую-то вариацию на тему критерия хи-квадрат, но результаты были очень плохие. Оно и понятно, частоты маленькие, много нулей. Вся магия даже не в функции, а в последнем запросе.

Я назову этот алгоритм Probably Matched Strings, или просто PMS. Он такой же не предсказуемый, возможно возьмет сумму вероятностей для исходной строки, а возможно - для строки из словаря )
24 дек 12, 18:15    [13678973]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51282

Ares_ekb
По-моему я гений

Настолько, что даже не понял куда запостил.
Posted via ActualForum NNTP Server 1.5

Модератор: Тема перенесена из форума "Проектирование БД".


Сообщение было отредактировано: 24 дек 12, 23:09
24 дек 12, 18:20    [13678997]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
Ну, вообще-то от MS SQL тут только APPLY. Интересно, как такие задачи решаются в принципе:

Есть словарь на 105-106 строк или больше (например, КЛАДР). И есть данные, которые нужно связать с этим справочником. В данных есть только введенные с ошибками слова из словаря. Я находил тут что-то подобное, но полную жесть.

Кто-нибудь может привести более простое и эффективное решение?
25 дек 12, 05:14    [13680508]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
95648455
Guest
Ares_ekb
Ну, вообще-то от MS SQL тут только APPLY. Интересно, как такие задачи решаются в принципе:

Есть словарь на 105-106 строк или больше (например, КЛАДР). И есть данные, которые нужно связать с этим справочником. В данных есть только введенные с ошибками слова из словаря. Я находил тут что-то подобное, но полную жесть.

Кто-нибудь может привести более простое и эффективное решение?


Это называется морфологический поиск.Такие технологии применяются в поисковиках.НО!!!!!!!!

Там SQL не применяться,любой SQL сервак ляжет под промышленной нагрузкой.
25 дек 12, 05:32    [13680514]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
Кстати, гугл на запрос Екирбитрург находит только эту тему. И Яндекс, несмотря на всю свою заточенность под русский язык не может исправить ошибку в запросе. Так что не факт, что морфологический поиск справится с этой задачей. Вот, первые 10 соответствий выданные PMS:

Населенный пунктСоответствие
Екатеринбург0.565217391304348
д Кекур (Ирбитский район)0.555555555555556
с Кирга (Ирбитский район)0.555555555555555
п Березит (Екатеринбург)0.540540540540541
д Трубина (Ирбитский район)0.525
Ирбит0.523809523809524
Ирбитский район0.5
Санкт-Петербург0.5
с Горки (Ирбитский район)0.5
п Ики-Бурул (Ики-Бурульский район)0.5

Размер словаря ~ 160 000 записей. Индекс генерится 6,5 минут. 10 наиболее похожих записей находятся за ~ 1 секунду.
25 дек 12, 07:25    [13680556]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Ares_ekb
Я назову этот алгоритм Probably Matched Strings, или просто PMS.
Я бы настоятельно советовал подумать еще раз - не самая удачная аббревиатура.
25 дек 12, 08:32    [13680623]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
Ennor Tiegael,

в чем и фишка:
Ares_ekb
Он такой же непредсказуемый, возможно возьмет сумму вероятностей для исходной строки, а возможно - для строки из словаря )
Запоминающееся название )) Это не какое-нибудь CRF (conditional random field).
25 дек 12, 09:10    [13680682]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
aleks2
Guest
Гениям несвойственна забота о мелочах...
Но императивщина в функции не нужна.

Намекаю: while не нужен
declare @String nvarchar(max)
      , @SequenceLength tinyint
      , @n int

set  @String = 'Екирбит,рург'
set  @SequenceLength = 3

declare @x table (c char(1) primary key clustered);
insert @x
values ('-'),(' '),('('),(')'),('.'),(','),('/'),('"'),('''');

select @String = REPLACE(@String, c, '') from @x;

SET @String = UPPER(@String)
SET @n = LEN(@String)

select @String;

select SUBSTRING(@String, beg, len) frag, COUNT(*) cnt
from 
(
select N1.Number beg, N2.Number len
from 
( select * from dbo.Numbers where Number between 1 and @n) N1
cross join
( select * from dbo.Numbers where Number between 1 and @SequenceLength) N2
where N1.Number+N2.Number<=@n
) F
group by SUBSTRING(@String, beg, len)
25 дек 12, 18:11    [13684987]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
aleks2,

спасибо! Поправленный вариант работает в 2 раза быстрее:
USE [eHealth]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Denis Nikiforov
-- Create date: 24.12.2012
-- Description:	The function generates a character sequence occurence probability table
-- =============================================
ALTER FUNCTION [dbo].[GetProbabilityTable]
(	
	@String nvarchar(max),
	@SequenceLength tinyint
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT Sequence, CAST(COUNT(*) AS float) / COUNT(*) OVER() P
	FROM
	(
		SELECT SUBSTRING(UPPER(@String), N1.N, N2.N) Sequence
		FROM
			(SELECT * FROM dbo.Number WHERE N BETWEEN 1 AND LEN(@String)) N1
			CROSS JOIN
			(SELECT * FROM dbo.Number WHERE N BETWEEN 1 AND @SequenceLength) N2
		WHERE N1.N + N2.N - 1 <= LEN(@String)
	) F
	WHERE Sequence NOT LIKE '%[- ().,/"'']%'
	GROUP BY Sequence
)
28 дек 12, 11:33    [13699504]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Екирбитрург:
NameProbability
с. Русский Турек0.722222222222222
ТИРУВЕРУМБУР0.666666666666667
Екатеринбург0.619047619047622
Текирдак0.611111111111111
Ирбит0.611111111111111
Уреки0.611111111111111
КИРТИПУР0.611111111111111
Киргули0.611111111111111
Санкт-Петербург0.565217391304345

Разве что выкинул ненавистный Float на Decimal(19,15)

Ares_ekb
Поправленный вариант работает в 2 раза быстрее
Вы видимо имели ввиду "на порядок быстрее".
Для моей тестовой таблички в 55K с первой функцией более минуты (850K), а с последней то 6 сек, и поиск менее 1/10 секунды (секунда если всё и при "холодном" старте).

И мне не нравится что цифры не сходятся. В итоге понял.
У вас не вероятность, а что-то непонятное: Count(*) / Count(*)OVER()
Вероятность будет: Count(*) / Sum(Count(*))OVER()

Следовательно:
NameProbability
ТИРУВЕРУМБУР0.571428571428571
с. Русский Турек0.565217391304345
Екатеринбург0.565217391304345
Текирдак0.523809523809524
Озургети0.523809523809524
Тильбург0.523809523809524
Ирбит0.523809523809524
Уреки0.523809523809524
Киргули0.523809523809524
КИРТИПУР0.523809523809524
Курган-Тюбе0.500000000000004
Санкт-Петербург0.499999999999997
28 дек 12, 14:54    [13700891]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
Mnior,

спасибо за тест ) С вероятностью я действительно налажал ) А почему decimal, а не float?
28 дек 12, 16:39    [13701703]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Bahha_Omsk
Member

Откуда:
Сообщений: 25
Ares_ekb
aleks2,
спасибо! Поправленный вариант работает в 2 раза быстрее:
USE [eHealth]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Denis Nikiforov
-- Create date: 24.12.2012
-- Description:	The function generates a character sequence occurence probability table
-- =============================================
ALTER FUNCTION [dbo].[GetProbabilityTable]
(	
	@String nvarchar(max),
	@SequenceLength tinyint
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT Sequence, CAST(COUNT(*) AS float) / COUNT(*) OVER() P
	FROM
	(
		SELECT SUBSTRING(UPPER(@String), N1.N, N2.N) Sequence
		FROM
			(SELECT * FROM dbo.Number WHERE N BETWEEN 1 AND LEN(@String)) N1
			CROSS JOIN
			(SELECT * FROM dbo.Number WHERE N BETWEEN 1 AND @SequenceLength) N2
		WHERE N1.N + N2.N - 1 <= LEN(@String)
	) F
	WHERE Sequence NOT LIKE '%[- ().,/"'']%'
	GROUP BY Sequence
)

Ares_ekb, пожалуйста, подскажите что за таблица dbo.Number, что в ней хранится?

Мне необходимо сравнить две таблицы и найти в них совпадения.
Фамилии, которые нужно сравнить находятся в таблице zags(количество записей 1600).
Фамилии с которыми нужно сравнить находятся в таблице WM_PERSONAL_CARD (количество записей более 144000).
Стал использовать функцию GetProbabilityTable , которая была размещена в первом посте... далее к ней был дописан курсор для поиска совпадений. Заполнил индекс в таблице OUID_INDEX.. сделал все, как у Вас описано.
Но быстродействие данного курсора мала,на поиски одного человека уходит 5-7 секунд. Использую следующий курсор:
	
declare @nOuid	int,
		@nOuid1	int,
		@sFio	varchar(100),
		@sFio1	varchar(100),
		@sDtr	varchar(10),
		@sDtr1	varchar(10),
		@nKolSimw	int,
		@sStr1	varchar(255),
		@sStr2	varchar(255)
		
DECLARE curSpisLD1  INSENSITIVE CURSOR FOR

select OUID_Z,rtrim(Family)+rtrim(Name)+convert(varchar(10),datr,104)   from zags
where datr is not null
order by OUID_Z
OPEN curSpisLD1
FETCH NEXT FROM curSpisLD1  INTO @nOuid, @sStr1

WHILE @@fetch_status = 0 
BEGIN

/*Заполняем таблицу совпадений по условию CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
            THEN SUM(t.P) ELSE SUM(OUID_INDEX.P)  END >0.8, для формирования протокола*/

insert into KNN_KONTR_SIMWOL_ZAGS (OUID_Z, OUID_LD, SUM_P)

SELECT OUID_INDEX.OUID_LD, @nOuid,
      CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
            THEN SUM(t.P) ELSE SUM(OUID_INDEX.P)  END 
FROM GetProbabilityTable(@sStr1, 2) t
LEFT OUTER JOIN OUID_INDEX on OUID_INDEX.Sequence = t.Sequence 
INNER JOIN FIO on OUID_INDEX.OUID_LD=FIO.OUID
GROUP BY OUID_INDEX.OUID_LD, FIO.FAM, FIO.name, FIO.DTR
having 
 CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
            THEN SUM(t.P) ELSE SUM(OUID_INDEX.P)  END >0.8
ORDER BY CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
              THEN SUM(t.P) ELSE SUM(OUID_INDEX.P) END DESC


FETCH NEXT FROM curSpisLD1  INTO @nOuid, @sStr1
END
CLOSE  curSpisLD1
DEALLOCATE curSpisLD1

Скорость поиска в среднем 12 человек в минуту! Подскажите, как оптимизировать?..
Заранее спасибо!
6 фев 13, 12:28    [13883322]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
aleks2
Guest
Bahha_Omsk
Ares_ekb, пожалуйста, подскажите что за таблица dbo.Number, что в ней хранится?

В ей хранятся натуральные числа
1, 2, 3, .... до скока надо.
6 фев 13, 12:33    [13883362]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33978
Блог
На всякий случай, в 2012 появилась такая штука, как Data Quality Services
6 фев 13, 12:38    [13883419]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Гость333
Member

Откуда:
Сообщений: 3683
aleks2
Bahha_Omsk
Ares_ekb, пожалуйста, подскажите что за таблица dbo.Number, что в ней хранится?

В ей хранятся натуральные числа
1, 2, 3, .... до скока надо.

+ по единственному столбцу этой таблицы построен primary key.
6 фев 13, 12:38    [13883420]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Bahha_Omsk
Member

Откуда:
Сообщений: 25
aleks2
Bahha_Omsk
Ares_ekb, пожалуйста, подскажите что за таблица dbo.Number, что в ней хранится?

В ей хранятся натуральные числа
1, 2, 3, .... до скока надо.

Но все же для тех кто в бронетанке .. а для чего она нужна??
6 фев 13, 13:11    [13883807]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Bahha_Omsk
а для чего она нужна??

Например, с её помощью зачастую можно избавиться от курсоров, циклов и т.п. вещей, плохо влияющих на производительность.
Вот хорошая статья (на английском): The "Numbers" or "Tally" Table: What it is and how it replaces a loop.
6 фев 13, 13:40    [13884117]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
gang
Member

Откуда:
Сообщений: 1394
Bahha_Omsk
aleks2
пропущено...

В ей хранятся натуральные числа
1, 2, 3, .... до скока надо.

Но все же для тех кто в бронетанке .. а для чего она нужна??

Для нумерации, связанных с нумерацией ТОПов, ордербаев, гроупбаев и т.п.
Наличие такой "линейки" под рукой часто упрощает жизнь. До 2005-го sql через такую таблу
решалось очень много задач. Но и сейчас она полезна, т.к. не тратится время на генерацию "на лету"
6 фев 13, 13:44    [13884155]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Bahha_Omsk
Member

Откуда:
Сообщений: 25
gang
Bahha_Omsk
пропущено...

Но все же для тех кто в бронетанке .. а для чего она нужна??

Для нумерации, связанных с нумерацией ТОПов, ордербаев, гроупбаев и т.п.
Наличие такой "линейки" под рукой часто упрощает жизнь. До 2005-го sql через такую таблу
решалось очень много задач. Но и сейчас она полезна, т.к. не тратится время на генерацию "на лету"


в общих чертах понятно...

Но все же у меня остается нерешенная проблема по оптимизации данной задачи:
Мне необходимо сравнить две таблицы и найти в них совпадения.
Фамилии, которые нужно сравнить находятся в таблице zags(количество записей 1600).
Фамилии с которыми нужно сравнить находятся в таблице WM_PERSONAL_CARD (количество записей более 144000).
Стал использовать функцию GetProbabilityTable , которая была размещена в первом посте... далее к ней был дописан курсор для поиска совпадений. Заполнил индекс в таблице OUID_INDEX.. сделал все, как у Вас описано.
Но быстродействие данного курсора мала,на поиски одного человека уходит 5-7 секунд. Использую следующий курсор:


declare @nOuid	int,
		@nOuid1	int,
		@sFio	varchar(100),
		@sFio1	varchar(100),
		@sDtr	varchar(10),
		@sDtr1	varchar(10),
		@nKolSimw	int,
		@sStr1	varchar(255),
		@sStr2	varchar(255)
		
DECLARE curSpisLD1  INSENSITIVE CURSOR FOR

select OUID_Z,rtrim(Family)+rtrim(Name)+convert(varchar(10),datr,104)   from zags
where datr is not null
order by OUID_Z
OPEN curSpisLD1
FETCH NEXT FROM curSpisLD1  INTO @nOuid, @sStr1

WHILE @@fetch_status = 0 
BEGIN

/*Заполняем таблицу совпадений по условию CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
            THEN SUM(t.P) ELSE SUM(OUID_INDEX.P)  END >0.8, для формирования протокола*/

insert into KNN_KONTR_SIMWOL_ZAGS (OUID_Z, OUID_LD, SUM_P)

SELECT OUID_INDEX.OUID_LD, @nOuid,
      CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
            THEN SUM(t.P) ELSE SUM(OUID_INDEX.P)  END 
FROM GetProbabilityTable(@sStr1, 2) t
LEFT OUTER JOIN OUID_INDEX on OUID_INDEX.Sequence = t.Sequence 
INNER JOIN FIO on OUID_INDEX.OUID_LD=FIO.OUID
GROUP BY OUID_INDEX.OUID_LD, FIO.FAM, FIO.name, FIO.DTR
having 
 CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
            THEN SUM(t.P) ELSE SUM(OUID_INDEX.P)  END >0.8
ORDER BY CASE WHEN SUM(t.P) < SUM(OUID_INDEX.P)
              THEN SUM(t.P) ELSE SUM(OUID_INDEX.P) END DESC


FETCH NEXT FROM curSpisLD1  INTO @nOuid, @sStr1
END
CLOSE  curSpisLD1
DEALLOCATE curSpisLD1



Скорость поиска в среднем 12 человек в минуту (это долго очень)! Ну светлые головы подскажите пожалуйста, как оптимизировать?..или может как по другому все это организовать? Спасибо за помощь!
1 мар 13, 19:41    [14000888]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
http://habrahabr.ru/post/114997/ для общего развития... гениЁв..))
2 мар 13, 02:33    [14002390]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
aleks2
Guest
MiCe
http://habrahabr.ru/post/114997/ для общего развития... гениЁв..))

Дык тыкать пальчиком в прописные истины каждый дурак может.
2 мар 13, 05:13    [14002494]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Alexander Us
Member

Откуда:
Сообщений: 1133
MiCe
http://habrahabr.ru/post/114997/ для общего развития... гениЁв..))


Спасибо за ссылку.
Замечательная статья!
2 мар 13, 13:43    [14002975]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
MiCe
Member

Откуда: RUSSIA STAVROPOL Pyatigorsk
Сообщений: 1996
aleks2
о шо вы хотели?... чтоб я на tsql частотный анализ написал? с учетом морфологии языка и раскладки клавиатуры?
сиквел нужен для хранения этих данных... а службу сравнения надо выносить... при больших словарях память у сиквела кончится...
2 мар 13, 14:25    [14003052]     Ответить | Цитировать Сообщить модератору
 Re: Нечеткое сравнение строк / fuzzy matching  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1491
MiCe,

дык, ясно, что 99% чего бы то ни было уже придумано (а не придумано ещё больше, интересный парадокс ))). Но
1) такого простого алгоритма на SQL я не видел
2) именно такой метрики я тоже не видел, обычно используется frequency difference. У меня что-то подобное, но адаптированное под SQL.
3 мар 13, 10:53    [14004955]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить