Nylig har det oppstått et problem som må løses, nemlig å sammenligne strengen som er lagt inn av brukeren og strengen som systemet oppnår – hvis feilen ikke er veldig stor, vil systemet vurdere den som oppfylt kravene, og det er best å sette en terskel. Når du bruker CAPTCHA-gjenkjenning, må du sammenligne likheten mellom tegnkoder og bruke "edit distance algorithm" for å lage en oversikt over prinsippet og C#-implementeringen.
Ifølge Baidu-leksikonet:
Redigeringsavstand, også kjent som Levenshtein-avstand (også kjent som redigeringsavstand), er det minste antallet redigeringer som kreves for å bytte mellom to strenger, og jo større avstand, desto mer forskjellige er de. Tillatelsesbaserte redigeringsoperasjoner inkluderer å erstatte ett tegn med et annet, sette inn et tegn og fjerne et tegn.
For eksempel, konverter ordet kattunge til sittende:
Sitten (K→S)
Sittin (E→I)
sittende (→g)
Den russiske vitenskapsmannen Vladimir Levenshtein foreslo dette konseptet i 1965. Derfor navnet Levenshtein Distance.
For eksempel
Hvis str1="ivan", str2="ivan", beregnes det til å være lik 0. Ikke konvertert. likhet=1-0/Math.Max(str1.length,str2.length)=1 Hvis str1="ivan1", str2="ivan2", så beregnes det til å være lik 1. "1" i str1 konverteres til "2", konverterer et tegn, så avstanden er 1, likhet = 1-1/Math.Max(str1.length, str2.length) = 0,8
Anvendelse:
- DNA-analyse
- Stavekontroll
- Talegjenkjenning
- Plagiatdeteksjon
Algoritmen er implementert i C#:
Testkode:
Ut fra testresultatene konkluderes det med atromellerTegnsetting、StrengposisjonUlike byerResultater som påvirker likhetDerfor anbefales det, når man sammenligner strenggjenkjenning, å fjerne alle mellomrom og spesialsymboler i strengen før man kaller algoritmen。
Ressurser:Innloggingen med hyperkoblingen er synlig.
På GitHub finnes det også et bibliotek for sammenligninger av C#-streng-likhet
FuzzyString er et bibliotek utviklet for mitt daglige arbeid for å koordinere navnekonvensjoner mellom ulike rutenettmodeller. Jeg har fjernet den systemspesifikke koden og satt sammen det som effektivt kan brukes som en strengutvidelse for å bestemme den omtrentlige likheten mellom de to strengene. Alle algoritmene som brukes her er hentet ut fra nettbaserte kilder, konvertert til C# og kompilert inn i dette biblioteket. Jeg fant flere andre lignende open source-implementasjoner som ikke er tilgjengelige for . NET / C#。 Å legge til *.dll i prosjektet ditt gir deg tilgang til denne utvidelsen og de individuelle utvidelsene under ApproximatelyEquals()-utvidelsen.
Adresse:Innloggingen med hyperkoblingen er synlig.
NuGet-installasjon:
Algoritmer inkludert i dette prosjektet:
- Hamming-distanse
- Jaccard-distanse
- Jaro-distanse
- Jaro-Winkler-distansen
- Levenshtein-avstand
- Den lengst offentlige
- Den lengste felles delstrengen i delsekvensen
- Overlappskoeffisient
- Ratcliff-Obershelp-likhet
- Sorensen-Dice avstand
- Tanimoto-koeffisienten
Bruk:
Utfall:
(Slutt)
|