Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

similar_text

5 views
Skip to first unread message

Andrea

unread,
Aug 19, 2005, 4:36:25 AM8/19/05
to
Come posso fare per ottenere lo stesso risultato della
funzione php "similar_text" con transact-sql, ovvero dove
posso trovare un algoritmo che mi restituisca il grado di
similitudine di due stringhe.
le funzioni soundex e difference non fanno proprio al
caso mio!
Grazie a tutti

Albe V°

unread,
Aug 19, 2005, 4:40:57 AM8/19/05
to
Andrea ha pensato forte :

Beh, difference restituisce 'il grado di similitudine di due stringhe'.
Se non fa al caso tuo, forse dovresti indicare quale peculiarità ti
serve, che non sia coperta da Difference.

Ciao

Alberto

--
"Se viriamo, viriamo viriamo viriamo;
Se andiamo dritti, viriamo"
(Cit. "il tattico")

anon...@discussions.microsoft.com

unread,
Aug 19, 2005, 5:05:22 AM8/19/05
to
come dicevo nel mio primo messaggio ... un funzione
simile (o l'algoritmo stesso) di "similar_text" di php
che tiene in considerazione anche le "vocali" e la
similitudine della lunghezza del testo con una precisione
molto superiore al 1,2,3 o 4 di "difference", ovvero una
percentuale di similitudine che include anche i decimali
(98,8 ... etc).
ciao

Lorenzo Benaglia

unread,
Aug 19, 2005, 5:34:46 AM8/19/05
to

Ciao Andrea,

che io sappia SQL Server 2000 non implementa una funzione simile a quella
che cerchi.
Credo che l'unica alternativa sia quella di eseguire la "similar_text" lato
client.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org


Marcello

unread,
Aug 27, 2005, 10:14:28 AM8/27/05
to
Ciao,

potressi sfruttare la distanza Levenshtein, cioè il numero di passaggi
neccessari per trasformare una parola in un altra, trovi molti dettagli in:
http://www.merriampark.com/ld.htm

e un'implementazione tsql in:
http://www.merriampark.com/ldtsql.htm

per una implementazione tsql migliore servirebbero le matrici...
sarebbe interessante elaborarne una nuova buona versione tsql, magari
partendo dall'interessante versione perl:
http://www.mgilleland.com/ld/ldperl2.htm

marc.


Andrea ha scritto:

Marcello

unread,
Aug 27, 2005, 2:09:29 PM8/27/05
to
Ciao,

ci ho lavorato un po' [serve pure a me!] senza grandi risultati.
Ne ho fatta una versione per sql 2005 che mi soddisfa abbastanza, è il
primo caso di uso del CLR che mi capita...è stato divertente. :-)

CLR [C#]----------------------------------------
public class Tools
{
public static int Levenshtein(string s, string t)
{
int n = s.Length;
int m = t.Length;
char[] ss=s.ToCharArray();
char[] tt=t.ToCharArray();
int[,] d=new int[n+1,m+1];
int i,j;

if(n==0) return m;
if(m==0) return n;

for(i=0;i<n+1;i++) d[i,0]=i;
for(i=0;i<m+1;i++) d[0,i]=i;

for(i=1;i<n+1;i++)
for(j=1;j<m+1;j++)
d[i,j]=System.Math.Min(
System.Math.Min(d[i-1,j]+1,d[i,j-1]+1),
d[i - 1, j - 1] + (ss[i - 1] == tt[j - 1] ? 0 : 1));

return d[n, m];
}
}
-------------------------------------------------
SQL ---------------------------------------------
CREATE ASSEMBLY MyTools from 'C:\Test\Test\Test\bin\Release\test.dll'
WITH PERMISSION_SET = SAFE
go
create function f_Levenshtein(@t1 nvarchar(125),@b nvarchar(125))
returns int
as
external name MyTools.Tools.Levenshtein
go
select dbo.f_Levenshtein('gumbo','gamboll')
go
drop function f_Levenshtein
go
drop assembly MyTools
------------------------------------------------

marc.

Marcello ha scritto:

0 new messages