Nyligen finns ett problem som måste hanteras, nämligen att jämföra strängen som användaren anger med strängen som erhålls av systemet, om felet inte är mycket stort kommer systemet att betrakta det som uppfyllande kraven, och det är bäst att sätta en tröskel. När du använder CAPTCHA-igenkänning behöver du jämföra likheten mellan teckenkoder och använda "edit distance algorithm" för att göra en dokumentation av principen och C#-implementeringen.
Enligt Baidu-encyklopedin:
Redigeringsavstånd, även känt som Levenshtein-avstånd (även känt som redigeringsavstånd), är det minsta antalet redigeringar som krävs för att byta från en till en annan mellan två strängar, och ju större avstånd, desto mer olika är de. Behörighetsstyrda redigeringsoperationer inkluderar att ersätta ett tecken med ett annat, infoga ett tecken och ta bort ett tecken.
Till exempel, omvandla ordet kattunge till sittande:
Sitten (K→S)
Sittin (E→I)
sittande (→g)
Den ryske vetenskapsmannen Vladimir Levenshtein föreslog detta koncept 1965. Därav namnet Levenshtein Distance.
Till exempel
Om str1="ivan", str2="ivan", så beräknas den att vara lika med 0. Inte konverterad. likhet=1-0/Math.Max(str1.length,str2.length)=1 Om str1="ivan1", str2="ivan2", så beräknas den som lika med 1. "1" i str1 omvandlas till "2", omvandlar ett tecken, så avståndet är 1, likhet = 1-1/Math.Max(str1.length, str2.length) = 0,8
Tillämpning:
- DNA-analys
- Stavningskontroll
- Taligenkänning
- Plagiatupptäckt
Algoritmen är implementerad i C#:
Testkod:
Utifrån testresultaten dras slutsatsen attrymdellerInterpunktion、SträngpositionOlika städerResultat som påverkar likhetDärför rekommenderas det, när man jämför strängigenkänning, att ta bort alla mellanslag och specialsymboler i strängen innan algoritmen anropas。
Resurser:Inloggningen med hyperlänken är synlig.
På GitHub finns det också ett bibliotek för jämförelser av C#-strängslikheter
FuzzyString är ett bibliotek utvecklat för mitt dagliga arbete för att samordna namngivningskonventioner mellan olika rutnätsmodeller. Jag har tagit bort den kraftsystemspecifika koden och satt ihop vad som effektivt kan användas som en strängförlängning för att avgöra den ungefärliga likheten mellan de två strängarna. Alla algoritmer som används här har extraherats från onlinekällor, konverterats till C# och kompilerats till detta bibliotek. Jag hittade flera andra liknande open source-implementationer som inte finns tillgängliga för . NET / C#。 Att lägga till *.dll i ditt projekt ger dig tillgång till denna extension och de individuella tilläggen under ApproximatelyEquals()-tillägget.
Adress:Inloggningen med hyperlänken är synlig.
NuGet-installation:
Algoritmer som ingår i detta projekt:
- Hammingavstånd
- Jaccard-avstånd
- Jaro-avståndet
- Jaro-Winkler-distansen
- Levenshtein-avstånd
- Den längst offentliga publiken
- Den längsta gemensamma delsträngen i delsekvensen
- Överlappskoefficient
- Ratcliff-Obershelp-likhet
- Sorensen-Dice-avståndet
- Tanimotokoefficient
Användning:
Utfall:
(Slut)
|