Onlangs is er een probleem dat moet worden opgelost, namelijk het vergelijken van de door de gebruiker ingevoerde string en de string die door het systeem is verkregen; als de fout niet erg groot is, zal het systeem deze als aan de eisen beschouwen en is het het beste om een drempel in te stellen. Bij het uitvoeren van CAPTCHA-herkenning moet je de gelijkenis van tekencodes vergelijken en het "edit distance algorithm" gebruiken om een registratie te maken van het principe en de C#-implementatie.
Volgens de Baidu Encyclopedie:
Bewerkingsafstand, ook wel Levenshtein-afstand genoemd (ook wel bewerkingsafstand genoemd), is het minimale aantal bewerkingen dat nodig is om tussen twee strings van de ene naar de andere te schakelen, en hoe groter de afstand, hoe verschillender ze zijn. Bewerkingsbewerkingen met toestemming omvatten het vervangen van het ene teken door het andere, het invoegen van een teken en het verwijderen van een teken.
Zet bijvoorbeeld het woord kitten om in zitten:
Sitten (K→s)
Sittin (E→i)
Zittend (→g)
De Russische wetenschapper Vladimir Levenshtein stelde dit concept in 1965 voor. Vandaar de naam Levenshtein Afstand.
Bijvoorbeeld
Als str1="ivan", str2="ivan", dan wordt het berekend als gelijk aan 0. Niet omgezet. gelijkheid=1-0/Math.Max(str1.length,str2.length)=1 Als str1="ivan1", str2="ivan2", dan wordt het berekend als gelijk aan 1. De "1" van str1 zet om in "2", zet een karakter om, dus de afstand is 1, gelijkenis = 1-1/Math.Max(str1.length, str2.length) = 0.8
Toepassing:
- DNA-analyse
- Spellingscontrole
- Spraakherkenning
- Plagiaatdetectie
Het algoritme is geïmplementeerd in C#:
Testcode:
Uit de testresultaten wordt geconcludeerd datruimteofInterpunctie、SnaarpositieVerschillende stedenResultaten die de gelijkenis beïnvloedenDaarom wordt bij het vergelijken van stringherkenning aanbevolen om alle ruimtes en speciale symbolen in de string te verwijderen voordat het algoritme wordt aangeroepen。
Weg:De hyperlink-login is zichtbaar.
Op GitHub is er ook een bibliotheek voor gelijkenisvergelijkingen van C#-strings
FuzzyString is een bibliotheek die is ontwikkeld voor mijn dagelijkse werk om naamgevingsconventies tussen verschillende gridmodellen te coördineren. Ik heb de code voor het energiesysteem verwijderd en samengesteld wat effectief als stringuitbreiding kan worden gebruikt om de benaderende gelijkheid tussen de twee strings te bepalen. Alle hier gebruikte algoritmen zijn uit online bronnen gehaald, omgezet naar C# en gecompileerd in deze bibliotheek. Ik heb verschillende andere vergelijkbare open source implementaties gevonden die niet beschikbaar zijn voor . NET / C#。 Door *.dll aan je project toe te voegen, krijg je toegang tot deze extensie en de individuele extensies onder de extensie ApproximatelyEquals().
Adres:De hyperlink-login is zichtbaar.
NuGet-installatie:
Algoritmen die in dit project zijn opgenomen:
- Hammingafstand
- Jaccard-afstand
- Jaro-afstand
- Jaro-Winkler-afstand
- Levenshtein-afstand
- Het langst publieke
- De langste gemeenschappelijke deelreeks van de deelreeks
- Overlapcoëfficiënt
- Ratcliff-Obershelp-overeenkomst
- Sorensen-Dice afstand
- Tanimoto-coëfficiënt
Gebruik:
Resultaat:
(Einde)
|