For nylig er der et problem, der skal løses, nemlig at sammenligne den streng, brugeren indtaster, og den streng, systemet har opnået; hvis fejlen ikke er meget stor, vil systemet betragte den som opfylder kravene, og det er bedst at sætte en tærskel. Når du bruger CAPTCHA-genkendelse, skal du sammenligne ligheden mellem tegnkoder og bruge "edit distance-algoritmen" til at lave en registrering af princippet og C#-implementeringen.
Ifølge Baidu-encyklopædien:
Redigeringsafstand, også kendt som Levenshtein-afstand (også kendt som redigeringsafstand), er det minimale antal redigeringer, der kræves for at skifte fra den ene til den anden mellem to strenge, og jo større afstand, desto mere forskellige er de. Tilladelsesberettigede redigeringsoperationer inkluderer udskiftning af et tegn med et andet, indsættelse af et tegn og fjernelse af et tegn.
For eksempel, omsæt ordet killing til siddende:
Sitten (K→S)
Sittin (E→i)
siddende (→g)
Den russiske videnskabsmand Vladimir Levenshtein foreslog dette koncept i 1965. Derfor navnet Levenshtein Distance.
For eksempel
Hvis str1="ivan", str2="ivan", så beregnes det til at være lig med 0. Ikke konverteret. lighed=1-0/Math.Max(str1.length,str2.length)=1 Hvis str1="ivan1", str2="ivan2", så beregnes det til at være lig med 1. "1" i str1 konverteres til "2", konverterer et tegn, så afstanden er 1, lighed = 1-1/Math.Max(str1.length, str2.length) = 0,8
Anvendelse:
- DNA-analyse
- Stavekontrol
- Tagenkendelse
- Plagiatopdagelse
Algoritmen er implementeret i C#:
Testkode:
Ud fra testresultaterne konkluderes det, atrumellerTegnsætning、StrengpositionForskellige byerResultater, der påvirker lighedDerfor anbefales det, når man sammenligner strenggenkendelse, at fjerne alle mellemrum og specielle symboler i strengen, før algoritmen kaldes。
Ressourcer:Hyperlink-login er synlig.
På GitHub findes der også et bibliotek til sammenligninger af C#-strenge og lighed
FuzzyString er et bibliotek udviklet til mit daglige arbejde for at koordinere navngivningskonventioner mellem forskellige gittermodeller. Jeg har fjernet den elsystemspecifikke kode og samlet, hvad der effektivt kan bruges som en strengudvidelse til at bestemme den omtrentlige lighed mellem de to strenge. Alle algoritmerne, der bruges her, er udtrukket fra onlinekilder, konverteret til C# og kompileret til dette bibliotek. Jeg fandt flere andre lignende open source-implementeringer, som ikke findes for . NET / C#。 Hvis du tilføjer *.dll til dit projekt, får du adgang til denne udvidelse og de enkelte udvidelser under ApproximatelyEquals()-udvidelsen.
Adresse:Hyperlink-login er synlig.
NuGet-installation:
Algoritmer inkluderet i dette projekt:
- Hamming-distance
- Jaccard-afstand
- Jaro-afstand
- Jaro-Winkler-distancen
- Levenshtein-afstand
- Den længst offentlige
- Den længste fælles delstreng i delsekvensen
- Overlapskoefficient
- Ratcliff-Obershelp-lighed
- Sorensen-Dice afstand
- Tanimoto-koefficient
Brug:
Udfald:
(Slut)
|