Fuzzy søgning.

Tags:    delphi

Hej Udviklerer!
Jeg har fået et lille problem at gruple over. Hvordan søger man en liste med firmanavne og finder dublicater. Jeg er ikke interesseret i selve koden faktisk kun i nogle forslag på hvordan at navne sammenlignes og resultat kan fx være i procent. Fx: "A/S Papir", "Papir A/S" skulle nok give 95 % eller mere måske. Fx: "Nordberg I/S" og "Norberk I/S" skulle nok give 80 % ca. (Bare forestil dig at du har hørt navnet i en dårlig telefon forbindelse fra en normand eller svensker) .Jeg har en ide om at man kan lave strengen om til phonemiske termer, og man kan fx strippe for i/s, aps, a/s mv. Man kunne osse lave en sammenligning over om bogstaverne i den ene streng findes i den anden og kun findes en gang og addere et sandsynlighedstal op hver gang en bogstav går igen, det er så helt uden at tage hensyn til rækkefølgen, for det kunne man osse gøre og så give extra points for det, evt. sådan at jo flere tegn i træk der går igen i samme rækkefølge, jo højre point (igennem en vægtfdaktor der vokser). Hvordan fungerer en "foreslå"-funktion i et stavekontrolprogram? Er det ikke lidt som min sidste "ide".

Er der nogen der måske har noget erfaring indenfor dette område? Du må gerne give exempler, i et hvilket som helst sprog osse assembler. Men jeg er faktisk mest interesseret i en overordnet fremgangsmetode.

MVH MKA.



4 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Du kunne check for hvilke bogstaver der indgår i ordet og så derefter hvormange der falder på den rigtige plads .

Why Aren't You Coding ?
Aaangel



User
Bruger #29 @ 25.07.02 13:06
hejsa.

der findes en algoritme du nok gerne vil kigge lidt på. Ideen er at den sammenligner lyden af ord istedet for bogstaverne. fx. hanz og hans. det vil dog ikke hjælpe dig m.h.t. de eksempler du kom med.

algoritmen jeg snakker om hedder vidst SOUNDEX eller noget. kan ikke huske det præcist, men den er implementeret i Delphi og Pascal, så mon ikke du finder den et sted på nettet (usenet e.l.)

Ellers er der da nogle funktioner i Delphi til at se om en string er indholdt i en anden string. Hvis hele stringen ikke er det, benytter den sig af en forudbestemt algortime (som du sel vmå lave :P), der forsørger med mindre strings. Der bliver du så ved indtil der er en match. du kan vel også gøre det omvendt, så du starter med et enkelt bogstav og arbejder dig op.

hele emnet er meget stort og jeg ved ikke meget om det. hvis jeg var dig ville jeg kigge på nettet, for der er tons information om søgning og hvordan man implementerer det (laver de mest effektive algoritmer). du skal måske overveje at bruge et binært træ i implementationen - i hvert fald er det meget brugt når man snakker søgning.


mark



Tak for soundEx, ikke hele løsningen men det virker sikkert godt nok, jeg har set på noget source med soundex og sålænge at stavningen af ordet(ene) falder indenfor nogle grænser så virker det. Konsonant antal skal være ens ihvertilfælde, og forbogstav SKAL være samme. Men måske er det sammen med en strip af de her a/s, aps mv. noget jeg vil bruge (=det bedste jeg kan lave(!)), men jeg vil lade tråden stå åben lidt endnu for at se om der er andre der har en mening/løsningsforslag. MKA.




Jeg har overført 50 up til Mark Grey som jeg synes hjalp mig mest.



t