Nu har jeg f.eks. et soege element: A451e3544114ff
Dette ligner MEGET 3), men ikke saa meget de andre. Jeg kunne godt taenke mig at faa de raekker ud der har stor sammenligning, gerne med en raekke der er kaldet RANK. Andre der ville have stor RANK ville vaere: A451e35441114ff 451e3544114ff osv.
Hvordan goer man dette i ms sql. Skal man have indsat full text soegning.. Jeg har kigget paa det, men jeg har ikke kunne finde noget a la dette her.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
jeg programmerer i c#, men hvis jeg skal til at lave en plugin til mssql, saa er "det heller ikke noget problem".
Jeg formoder at du refererer til at jeg henter alle raekkerne ud. Jeg kan ikke se at det er smart(men det er det muligvis alligevel), eftersom det er >20000. Det er meget at skulle hente ud fra en sql server over nettet.
Ja, jeg har vaeret inde og kigge paa record linkage, hvilket levenshtein vist nok kan gaa ind under. Det er vist lige noget af dette som jeg har brug for. Jeg vil lige kigge lidt paa det.
Med 20000 raekker tager det alligevel lidt under 2 min, hvilket er alt for meget, men sikkert den tid det tager. Jeg tror jeg vil proeve janus' ide og hente dataen ud, og proeve at processere det i c#. Vender tilbage.
Janus>> Funktionen ligger i den omtalte pakke paa siden
ok, nu har jeg lige overfoert den til c#, og det viser sig at med udhentning af data og koersel af 'Levensthein distance' tager det under 5 sekunder hvor det paa sql serveren tog henmod 2 min. Det maa man jo sige er en forskel.
Janus>> du skrev at du havde en sammenlignings algoritme ogsaa... er det noget du kan share med mig?
Det var en jeg skrev for mange år siden, jeg har den her i VB, men du kan vel selv oversætte :-)
Private Sub Command1_Click() lTimer = Timer For iTest = 0 To 10000 Compare Text1, Text2 Next iTest Label2 = Timer - lTimer End Sub
Private Sub Compare(ByVal sText1 As String, ByVal sText2 As String) Dim arrWord1() As String Dim arrWord2() As String sText1 = Trim(sText1) sText2 = Trim(sText2) iLenghtComp = Len(sText1) - 1 If Len(sText1) < Len(sText2) Then iLenghtComp = Len(sText2) - 1
For n = 1 To Len(sText1) ReDim Preserve arrWord1(n - 1) arrWord1(n - 1) = Mid(sText1, n, 1) Next n
For n = 1 To Len(sText2) ReDim Preserve arrWord2(n - 1) arrWord2(n - 1) = Mid(sText2, n, 1) Next n
a = 0 For n = 0 To iLenghtComp
If n <= UBound(arrWord1) Then If arrWord1(n) = arrWord2(a) Then i = i + 1
Else If arrWord2(a) = " " Then If InStr(n, sText1, " ") Then n = InStr(n, sText1, " ") - 1 i = i + 1 End If End If iMax = iMax + i i = 0 End If End If If a < UBound(arrWord2) Then a = a + 1
Next n iMax = iMax + i
Label1 = iMax / (Len(sText1) + Len(sText2)) * 2 End Sub
For mig virker den fint. Jeg faar 1, hvilket jo er det rigtige. Jeg har ogsaa proevet den omvendte raekkefoelge, og det giver mig det samme.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.