Hiljuti tuleb lahendada probleem, nimelt kasutaja sisestatud stringi ja süsteemi saadud stringi võrdlemine, kui viga pole väga suur, peab süsteem seda nõuetele vastavaks ning on kõige parem seada lävi. CAPTCHA tuvastuses tuleb võrrelda märgikoodide sarnasust ja kasutada "edit distance algoritmi", et salvestada printsiip ja C# rakendus.
Baidu entsüklopeedia kohaselt:
Redigeerimiskaugus, tuntud ka kui Levenshteini kaugus (tuntud ka kui redigeerimiskaugus), on minimaalne redigeerimiste arv, mis on vajalik kahe stringi vahel vahetamiseks, ning mida suurem on kaugus, seda erinevamad need on. Lubatud redigeerimistoimingud hõlmavad ühe tähemärgi asendamist teisega, tähemärgi lisamist ja tähemärgi eemaldamist.
Näiteks teisendage sõna kassipoeg istumiseks:
sitten (k→s)
Sittin (e→i)
istumine (→g)
Vene teadlane Vladimir Levenshtein pakkus selle kontseptsiooni välja 1965. aastal. Sellest ka nimi Levenshteini kaugus.
Näiteks
Kui str1="ivan", str2="ivan", siis arvutatakse, et see võrdub 0-ga. Ei konverteeritud. sarnasus=1-0/Matemaatika.Max(str1.pikkus,str2.pikkus)=1 Kui str1="ivan1", str2="ivan2", siis arvutatakse võrdne 1-ga. Str1 "1" teisendatakse "2"-ks, teisendab märgi, seega kaugus on 1, sarnasus = 1-1/Math.Max(str1.length, str2.length) = 0.8
Rakendus:
- DNA analüüs
- Õigekirjakontroll
- Kõnetuvastus
- Plagiaadi tuvastamine
Algoritm on rakendatud C# keeles:
Testkood:
Testitulemustest järeldatakse, etruumvõiKirjavahemärgid、Keele asendErinevad linnadTulemused, mis mõjutavad sarnasustSeetõttu on soovitatav stringi tuvastamise võrdlemisel eemaldada kõik tühikud ja erisümbolid stringist enne algoritmi kutsumist。
Ressursse:Hüperlingi sisselogimine on nähtav.
GitHubis on olemas ka raamatukogu C# stringide sarnasuse võrdlusteks
FuzzyString on raamatukogu, mis on loodud minu igapäevase töö jaoks, et koordineerida nimetamiskonventsioone erinevate ruudustikumudelite vahel. Olen eemaldanud elektrisüsteemispetsiifilise koodi ja pannud kokku selle, mida saab tõhusalt kasutada stringi laiendusena, et määrata kahe stringi ligikaudne võrdsus. Kõik siin kasutatavad algoritmid on välja võetud veebiallikatest, teisendatud C# keelde ja kompileeritud sellesse teeki. Leidsin mitmeid teisi sarnaseid avatud lähtekoodiga rakendusi, mis pole saadaval . NET / C#。 *.dll lisamine oma projekti annab sulle ligipääsu sellele laiendusele ja individuaalsetele laiendustele ApproximatelyEquals() laienduse all.
Aadress:Hüperlingi sisselogimine on nähtav.
Nuget paigaldus:
Selles projektis kaasatud algoritmid:
- Hammingi kaugus
- Jaccardi distants
- Jaro kaugus
- Jaro-Winkleri distants
- Levenshteini kaugus
- Pikim avalikkus
- Alamjärjestuse pikim ühine alamstring
- Kattuvuskoefitsient
- Ratcliff-Obershelp sarnasus
- Sorensen-Täringu kaugus
- Tanimoto koefitsient
Kasutamine:
Tulemus:
(Lõpp)
|