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

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
пока использую код - твой первый вариант


в QA
declare @retval bigint

declare @p1 int
declare @p2 varchar(50)
declare @p3 varchar(50)
declare @p4 int


set @p1 = 50
set @p2 = '"НальчикскиеНальчикскиеНальчикские'
set @p3 = '"НальчикскиеНальчикскиеНальчикские'
EXECUTE master.dbo.xp_similarity @p2 , @p3 ,@p1, @p4 output -- дает большое совпадение

--select @p4 as returnvalue если разремить эту строку то паузы достаточно чтобы вернуть правильный результат

EXECUTE master.dbo.xp_similarity 'aaaaaa','zzzzz' ,@p1, @p4 output -- по идее должно давать 0

select @p4 as returnvalue


но если выполнено без паузы - выдает предыдущее
28 апр 04, 19:55    [655707]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
SeVa
Member [заблокирован]

Откуда: Москва
Сообщений: 4324
И просил сишный код.Быстрее всего, у тебя при полном несовпадении выходному параметру не задается нулевое значение.
28 апр 04, 20:11    [655725]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Casper_
Member

Откуда:
Сообщений: 85
Было похоже, токо со своими dll
лечилось накатыванием последнего sp3
28 апр 04, 20:17    [655731]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
SeVa
Member [заблокирован]

Откуда: Москва
Сообщений: 4324
Извини невнимательно прочитал твой ответ. Используй второй вариант.
Первый писался в попыхах.
28 апр 04, 20:18    [655734]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683

RETCODE __declspec(dllexport) xp_similarity(SRV_PROC* srvproc)


{

int iMaxLen;
TCHAR* pcA;
TCHAR* pcB;
CompResult total;
int iCurSubLen = 2; // Текущая длина подстроки.
long int iVariantsSim =0 ; // Схожесть. - вот она обнуляется

//!!!!!!!!!!!!!!!!!!!!! fix me добавить проверку параметров !!!!!!!!!!!!!!!!

pcA = (TCHAR*) srv_paramdata(srvproc, 1);
pcB = (TCHAR*) srv_paramdata(srvproc, 2);
iMaxLen = *((int *)srv_paramdata(srvproc, 3));
//iMaxLen = MIN(iMaxLen, MIN(srv_paramlen(srvproc, 1), srv_paramlen(srvproc, 2)); знать бы какую библиотеку подключить ?



if (iMaxLen <= 2 || pcA == NULL || pcB == NULL)
srv_paramset (srvproc, 4, &iCurSubLen , sizeof(int)); // Передан недопустимый аргумент.



total.iVariantsQty = total.iMatchesQty = 0;



while (iCurSubLen <= iMaxLen && pcA[iCurSubLen] && pcB[iCurSubLen])
{
CompResult res;

// Сравниваем строку A со строкой B.
res = processStrings (pcA, pcB, iCurSubLen);
iVariantsSim = iVariantsSim + res.iMatchesQty * iCurSubLen ; // Схожесть. хотел iVariantsSim + res.iMatchesQty * pow(3, iCurSubLen) но опять трабл в какой библиотеке? - не компилируется хотя math.h объявил
// Сравниваем строку B со строкой A.
res = processStrings (pcB, pcA, iCurSubLen);

iVariantsSim = iVariantsSim + res.iMatchesQty * iCurSubLen ; // Схожесть.
(long int)iCurSubLen ; // Схожесть.

iCurSubLen++;
}

srv_paramset (srvproc, 4, &iVariantsSim , sizeof(long int));
// srv_paramsetoutput(pSrvProc, 1, szText, strlen(szText), FALSE)
srv_senddone(srvproc, (SRV_DONE_COUNT | SRV_DONE_MORE), 0, 1);


return (XP_NOERROR);
}
28 апр 04, 20:23    [655737]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
SeVa
Member [заблокирован]

Откуда: Москва
Сообщений: 4324
Странно!? Все верно, если processStrings не находит совпадения.
Проверь это в отладчике и не гадай.
28 апр 04, 20:35    [655748]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
видимо нужен сервиспак
но теперь после 9 мая - отчаливаю

всем спасибо и удачных праздников!!
28 апр 04, 20:47    [655755]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Denis Bondar
Member

Откуда:
Сообщений: 49
Алексей, не могли бы Вы выслать мне переделанную dll, которая работает из-под MS SQL? Мой адрес denisbondar[no spam]mail.ru
Заранее благодарен
30 авг 04, 15:11    [918480]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Denis Bondar
Алексей, не могли бы Вы выслать мне переделанную dll, которая работает из-под MS SQL? Мой адрес denisbondar[no spam]mail.ru
Заранее благодарен



да чего уж там. прожект надо зазиповать и повесить в BOL
12 янв 05, 18:42    [1240113]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
раз уж автор потерялся пришлом самому скомпилить


подключение :

sp_addextendedproc 'xp_similarity', 'ipsesp.dll'



использование :

declare @retval float
EXECUTE xp_similarity 'petrov', 'petrov' , 6, @retval OUTPUT
select @retval
------------------------------
1.0

declare @retval float
EXECUTE xp_similarity 'petrov', 'petrou' , 6, @retval OUTPUT
select @retval
------------------------------
0.7142857142857143

для nvarchar так и не вьехал. может кто делал что ? отзовитесь !

К сообщению приложен файл (fuzzy.zip - 35Kb) cкачать
26 май 05, 00:56    [1571284]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
в общем, немного поупражнявшись выяснил, если кастить в бинари, то в С++ нормально кастится в wchar_t.

так что с минимальными обертками можно для UNICODE использовать

возвращает исходное слово целиком, md5 и md5 как результат uppermd5 ^ lowermd5 в виде bigint. bigint тоже не идет как выходной параметр, очень странно, ведь SRVBIGINT описан именно как __int64. еще потестирую - может этой комбинации будет достаточно для использования как hash для русских слов.

CREATE FUNCTION fnMD5( @fword nvarchar(64) ) 
RETURNS BIGINT
AS
BEGIN
declare @inp varbinary (64)
set @inp = CAST( @fword AS varbinary (64))
declare @md5 varbinary (64), @crc varbinary (32)
exec xp_md5 @inp, @inp OUTPUT, @md5 OUTPUT, @crc OUTPUT
RETURN CAST(@crc as bigint)
END

обертка для сравнения слов. теперь уже можно использовать для UNICODE

CREATE FUNCTION fnSim( @fword1 nvarchar(64), @fword2 nvarchar(64), @lenw int ) 
RETURNS FLOAT
AS
BEGIN
declare @inp1 varbinary (64)
declare @inp2 varbinary (64)
set @inp1 = CAST( @fword1 AS varbinary (64))
set @inp2 = CAST( @fword2 AS varbinary (64))
declare @rs float
exec xp_similarity @inp1, @inp2, @lenw, @rs OUTPUT
RETURN @rs
END

использовать :


select dbo.fnMD5( N'тест' )

select dbo.fnSim( N'Петров', N'Петренко', 6 )
----------------------------------------------------------------------
6491482384227701662
----------------------------------------------------------------------
0.42592592592592593




К сообщению приложен файл (ipsesp.dll - 56Kb) cкачать
26 май 05, 19:15    [1574290]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
простите, что пропустил топик
мою проблему давно решил.

загвоздка была в необходимости добавления символа окончания строки
27 май 05, 11:45    [1575633]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
TCHAR* pcA;

...

pcA = (TCHAR*)  srv_paramdata(srvproc, 1);

...
 
pcA[srv_paramlen(srvproc, 1)] = '\0';
27 май 05, 11:51    [1575655]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: расширенная хранимая процедура  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
готовые бесплатные и полнофунциональные расширенные хранимки для 32 и 64 битных версий сервера
тут

проверено на
mssql 7.0 x32
mssql 2000 x32
mssql 2005 x32
mssql 2005 x64
14 янв 10, 10:14    [8181402]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Kumarill
Member

Откуда:
Сообщений: 16
АлексейК
Предыстория:

пробую различные варианты сравнения строк по созвучности.
перепробовал море вариантов, в том числе рекомендованные здесь

на текущий момент самый быстрый вариант сортирующий таблицу из
1000 строк по степени созвучности и сходства со строкой в 40 символов
работает 3-5 сек.

набрел на ДЛЛ в которой делается созвучное сравнение
http://vlak.webzone.ru/rus/projects/fuzzycmp.html
.


пишите на мыло вышлю dll для 2005 - 2008
которая обрабатывает от 200 000 в секунду больше не пробовал
надеюсь ваш комп по мощнее моего :)
14 фев 10, 19:37    [8342245]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
programmator
Member

Откуда: ru
Сообщений: 355
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel IA-64)   Nov 24 2008 12:59:53   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 

подскажите в чем может быть ошибка?

вызаваю

declare @rs float
 exec xp_similarity 'Петров', 'Петренко', 6, @rs OUTPUT
select @rs


получаю

Msg 17750, Level 16, State 0, Procedure xp_similarity, Line 1
Could not load the DLL C:\temp\ipsesp.dll, or one of the DLLs it references. Reason: 193(error not found).
18 фев 10, 10:30    [8362048]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
programmator
Member

Откуда: ru
Сообщений: 355
похоже проблемма в 64-bit
подскажите как скомпилировать под 64-bit itanium?
18 фев 10, 10:44    [8362180]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
думаю дело в (Intel IA-64)

не компилил я версии под эту платформу
18 фев 10, 10:49    [8362235]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
выложены версии под
x86 - 32 bit
x64 - 64 bit

под ia64 не делал т.к. неначем было тестить
18 фев 10, 10:52    [8362268]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: расширенная хранимая процедура  [new]
Николай Н.
Member

Откуда:
Сообщений: 80
Где скачать, ссылки все битые уже? Очень нужно...
13 ноя 13, 11:46    [15120228]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Диам
Member

Откуда:
Сообщений: 1455
Тоже очень нужно. Может кто помочь библиотеками? Ссылки от MsDatabaseru не работают :(
3 сен 14, 01:31    [16526579]     Ответить | Цитировать Сообщить модератору
 Re: расширенная хранимая процедура  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Диам,

К сообщению приложен файл (fuzzy.zip - 35Kb) cкачать


смотрите выше
5 сен 14, 20:26    [16542627]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить