|
| Fuzzy søgning Fra : Lars Hoffmann |
Dato : 08-08-02 14:09 |
|
Jeg har en side med en SQL server hvor man kan søge i. Søgningen foregår
noget alá:
.....WHERE info LIKE '%" & request.form("soegeord") & "%'...
og det virker jo også fint nok.
Nu er der blot det ved det at en stor del af det der bliver søgt på er
filmtitler og mange folk kan ikke stave ordentligt på engelsk. Derfor vil
jeg gerne implementere en fuzzy search, således at hvis jeg søger på "srek"
eller "sherk" finder man også de steder hvor der optræder "Shrek".
www.imdb.com har noget i den stil på deres side
Hvordan kommer jeg igang med det?
Med venlig hilsen
Lars Hoffman
| |
Mark S. Rasmussen (08-08-2002)
| Kommentar Fra : Mark S. Rasmussen |
Dato : 08-08-02 14:15 |
|
> Hvordan kommer jeg igang med det?
Hvis det bare er nogle få ting du vil søge efter, så lav en manuel replace
funktion. Hvis du derimod vil kunne udbygge den, så lav en tabel som
indeholder fejlord, og hvad de burde være. Så kan du ved søgningen loope
igennem hvert ord i søgningen, og se om det er forkert (hvor du slår op imod
db'en og ser om ordet findes deri). Sørg også for ikke at slå ord som "og,
and, if" alle sådanne små ubetydelige ord, som nemt kan checkes med en InStr
og Replace.
Mvh Mark
--
www.improve.dk
| |
Lars Hoffmann (08-08-2002)
| Kommentar Fra : Lars Hoffmann |
Dato : 08-08-02 18:29 |
|
Mark S. Rasmussen escribió / skrev
> Hvis det bare er nogle f† ting du vil s›ge efter, s† lav en manuel
> replace funktion.
Den går desværre ikke. Der kan søges på over 1000 filmtitler (der alle
kan skrives på 20 forskellige måder) og de varierer konstant, desuden
kan der søger på artikler, beskeder i et forum og meget andet, så det
går desværre ikke.
Med venlig hilsen
Lars Hoffmann
| |
Jakob Andersen (08-08-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 08-08-02 14:22 |
|
Lars Hoffmann wrote:
> Nu er der blot det ved det at en stor del af det der bliver søgt på er
> filmtitler og mange folk kan ikke stave ordentligt på engelsk. Derfor
> vil jeg gerne implementere en fuzzy search, således at hvis jeg søger
> på "srek" eller "sherk" finder man også de steder hvor der optræder
> "Shrek". www.imdb.com har noget i den stil på deres side
> Hvordan kommer jeg igang med det?
I BOL prøv at kigge på SOUNDEX, denne kan give dig et bud på hvor tæt to ord
er i ordlyd.
F.eks. vil både
SELECT SOUNDEX('srek')
og
SELECT SOUNDEX('shrek')
Returnere:
S620
--
Jakob Andersen
| |
Lars Hoffmann (08-08-2002)
| Kommentar Fra : Lars Hoffmann |
Dato : 08-08-02 18:40 |
|
Jakob Andersen escribió / skrev
> SOUNDEX
Kanon, lige det jeg søgte efter. Mange tak
Med venlig hilsen
Lars Hoffmann
| |
MS (08-08-2002)
| Kommentar Fra : MS |
Dato : 08-08-02 20:41 |
|
>I BOL prøv at kigge på SOUNDEX, denne kan give dig et bud på hvor tæt to ord
>er i ordlyd.
>
>F.eks. vil både
>SELECT SOUNDEX('srek')
>og
>SELECT SOUNDEX('shrek')
>
>Returnere:
>S620
>
Lyder spændende, er det muligt at få lidt mere kode, eller ligesågodt, et
link omhandlende metoden.
/Martin
| |
Jakob Andersen (08-08-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 08-08-02 21:24 |
| | |
Martin Svenningsen (09-08-2002)
| Kommentar Fra : Martin Svenningsen |
Dato : 09-08-02 08:02 |
|
->< http://msdn.microsoft.com/library/en-us/tsqlref/ts_setu-sus_3o6w.asp>
->
->
->En simpel søgning på f.eks. "srek" kunne se sådan her ud:
->
->SELECT felt1, felt2 FROM tabel WHERE SOUNDEX(felt1) =
SOUNDEX('srek')
->
>>Jeg har en side med en SQL server hvor man kan søge i. Søgningen..
Arrgh, SQL-server, mon der findes noge tilsvarende til Access
databaser ?
Martin
| |
Lars Hoffmann (09-08-2002)
| Kommentar Fra : Lars Hoffmann |
Dato : 09-08-02 08:18 |
|
"Martin Svenningsen" <ms@REMOVEmartinsvenningsen.com> escribió
> Arrgh, SQL-server, mon der findes noge tilsvarende til Access
> databaser ?
Saa skal du have fat i noget trediepart software eller selv skrive en
soundex funktion. dette kan maaske interessere dig:
http://www.hallogram.com/soundxx/index.html
Med venlig hilsen
Lars Hoffmann
| |
ms (09-08-2002)
| Kommentar Fra : ms |
Dato : 09-08-02 10:32 |
|
->Saa skal du have fat i noget trediepart software eller selv skrive
en
->soundex funktion. dette kan maaske interessere dig:
-> http://www.hallogram.com/soundxx/index.html
De ved hvist godt at det er er smart, $$
SoundX/X Single User License (Download Only).........$119.00
Nå men vi har før snakket om at vi skal have ændret vores intranet
news site til at køre på vores SQL server istedet for sin egen Access
database, det er bare aldrig blevet, men her er der en rigtig god
grund til at gøre det.
Jeg siger mange tak for informationerne.
mvh.
Martin Svenningsen
| |
Lars Hoffmann (09-08-2002)
| Kommentar Fra : Lars Hoffmann |
Dato : 09-08-02 11:10 |
|
"ms" <ms@msv.dk.NOT> escribió
> De ved hvist godt at det er er smart, $$
> SoundX/X Single User License (Download Only).........$119.00
Så må du jo bare implementere den selv :
Function SoundEx(sWord As String) As String
Dim Num As String ' Holds the generated code
Dim sChar As String
Dim lWordLength As Long
Dim sLastCode As String
Num = UCase(Mid$(sWord, 1, 1)) ' Get the first letter
sLastCode = GetSoundCodeNumber(Num)
lWordLength = Len(sWord)
' Create the code starting at the second letter.
For I = 2 To lWordLength
sChar = GetSoundCodeNumber(UCase(Mid$(sWord, I, 1)))
' If two letters that are the same are next to each other
' only count one of them
If Len(sChar) > 0 And sLastCode <> sChar Then
Num = Num & sChar
End If
sLastCode = sChar
Next
SoundEx = Mid$(Num, 1, 4) ' Make sure code isn't longer then 4 letters
If Len(Num) < 4 Then ' Make sure the code is at least 4 characters long
SoundEx = SoundEx & String(4 - Len(Num), "0")
End If
End Function
Private Function GetSoundCodeNumber(sChar As String) As String
Select Case sChar
Case "B", "F", "P", "V"
GetSoundCodeNumber = "1"
Case "C", "G", "J", "K", "Q", "S", "X", "Z"
GetSoundCodeNumber = "2"
Case "D", "T"
GetSoundCodeNumber = "3"
Case "L"
GetSoundCodeNumber = "4"
Case "M", "N"
GetSoundCodeNumber = "5"
Case "R"
GetSoundCodeNumber = "6"
End Select
End Function
| |
ms (09-08-2002)
| Kommentar Fra : ms |
Dato : 09-08-02 13:24 |
|
->"Lars Hoffmann" <lars@intercambiodvd.com> wrote:
->Så må du jo bare implementere den selv :
Nu har jeg forsøgt at "omskrive" koden til vbs, men den retunerer kun
nuller.
Jeg har en mistanke til mid hvor jeg har fjernet $ tegnet for ikke at
få fejl. Har mid og mid$ forskellige funktioner ?
Martin
<%
Function Soundex(Word)
Dim strCode
Dim strChar
Dim lngWordLength
Dim strLastCode
'Grabs the first letter
strCode = UCase(mid(Word, 1, 1))
Response.write "<BR>" & strCode & "<BR>"
strLastCode = GetSoundCodeNumber(strCode)
'Stores the word length
lngWordLength = Len(Word)
'Continues the code, starting at the second letter
For i = 2 To lngWordLength
strChar = GetSoundCodeNumber(UCase(Mid(Word, i, 1)))
' If adjacent numbers are the same,
' only count one of them
If Len(strChar) > 0 And strLastCode <> strChar Then
strCode = strCode & strChar
End If
strLastCode = strChar
Next
'Trim it down to a maximum of four characters...
Soundex = Mid(strCode, 1, 4)
'... but if it's less than four characters, pad
'it out with a bunch of zeros...
If Len(strCode) < 4 Then
Soundex = Soundex & String(4 - Len(strCode), "0")
End If
End Function
Function GetSoundCodeNumber(Character)' As String) As String
'Accepts a character and returns the
'appropriate number from the Soundex table
Select Case Character
Case "B", "F", "P", "V"
GetSoundCodeNumber = "1"
Case "C", "G", "J", "K", "Q", "S", "X", "Z"
GetSoundCodeNumber = "2"
Case "D", "T"
GetSoundCodeNumber = "3"
Case "L"
GetSoundCodeNumber = "4"
Case "M", "N"
GetSoundCodeNumber = "5"
Case "R"
GetSoundCodeNumber = "6"
End Select
End Function
response.write "shrek " & SoundEX(shrek)
%>
| |
Peter Lykkegaard (09-08-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 09-08-02 14:38 |
|
"ms" <ms@msv.dk.NOT> wrote in message
news:3d53b2dc.182506750@news.inet.tele.dk...
> ->"Lars Hoffmann" <lars@intercambiodvd.com> wrote:
> ->Så må du jo bare implementere den selv :
>
> Nu har jeg forsøgt at "omskrive" koden til vbs, men den retunerer kun
> nuller.
> Jeg har en mistanke til mid hvor jeg har fjernet $ tegnet for ikke at
> få fejl. Har mid og mid$ forskellige funktioner ?
>
Det er samme funktion
Vær opmærksom på at _alt_ er dimmet som variant i VBScript
Det kan godt drille
mvh/Peter Lykkegaard
| |
MS (09-08-2002)
| Kommentar Fra : MS |
Dato : 09-08-02 19:17 |
|
On Fri, 09 Aug 2002 12:23:30 GMT, ms@msv.dk.NOT (ms) wrote:
>Nu har jeg forsøgt at "omskrive" koden til vbs, men den retunerer kun
>nuller.
>
>response.write "shrek " & SoundEX(shrek)
Sådan skal linien være, OG DET VIRKER
response.write "shrek " & SoundEX("shrek")
Kanont og mange tak for hjælpen til jer alle
Mvh.
Martin
| |
Lars Hoffmann (08-08-2002)
| Kommentar Fra : Lars Hoffmann |
Dato : 08-08-02 23:47 |
|
Jakob Andersen escribió / skrev
> SOUNDEX
Lige en hurtig opfølgning....
Det virker skide godt. Feks vil "Harry potter" findes selv om der søges
på "Hari Poter", og "Mission Impossible" findes også ved at søge på
"mychon ymbociple" Nu kan selv den mest ordblinde finde film på mit
site.
Jeg endte med at bruge funktionen difference(), som regner forskellen på
på to soundex ud. difference returnere et tal mellem 4 og 1 hvor 4 er en
fonetisk exact match og 1 er to ord der intet har med hinanden at gøre.
Helt konkret ser min søgning således ud:
SELECT IdEdicion,Titulo,Distribuidora
FROM Blacklist
WHERE difference(Titulo,'" & Request.querystring("Titulo") & "')=4
ORDER BY titulo"
Jeg bruger en SQL server til min database
Med venlig hilsen og tak for hjælpen
Lars Hoffmann
| |
Jakob Andersen (08-08-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 08-08-02 22:00 |
|
"Lars Hoffmann" <lars@hoffmann.ac> wrote
> Det virker skide godt. Feks vil "Harry potter" findes selv om der søges
> på "Hari Poter", og "Mission Impossible" findes også ved at søge på
> "mychon ymbociple" Nu kan selv den mest ordblinde finde film på mit
> site.
Godt at høre
> Jeg endte med at bruge funktionen difference(), som regner forskellen på
> på to soundex ud. difference returnere et tal mellem 4 og 1 hvor 4 er en
> fonetisk exact match og 1 er to ord der intet har med hinanden at gøre.
Difference er også god hvis man skal vise et søgeresultat sorteret efter
relevans.
--
Jakob Andersen
http://www.stresscd.dk/ - Udnyt stress positivt
| |
|
|