Pastaruoju metu yra problema, kurią reikia išspręsti, tai yra, palyginti vartotojo įvestą eilutę ir sistemos gautą eilutę, jei klaida nėra labai didelė, sistema laikys, kad ji atitinka reikalavimus, ir geriausia nustatyti slenkstį. Užsiimdami CAPTCHA atpažinimu, turite palyginti simbolių kodų panašumą ir naudoti "redagavimo atstumo algoritmą", kad įrašytumėte principą ir C# įgyvendinimą.
Pagal Baidu enciklopediją:
Redagavimo atstumas, taip pat žinomas kaip Levenshtein atstumas (taip pat žinomas kaip redagavimo atstumas), yra minimalus redagavimų skaičius, reikalingas norint perjungti iš vienos į kitą tarp dviejų eilučių, ir kuo didesnis atstumas, tuo labiau jos skiriasi. Leidimo redagavimo operacijos apima vieno simbolio pakeitimą kitu, simbolio įterpimą ir simbolio pašalinimą.
Pavyzdžiui, žodį kačiukas paverskite sėdėjimu:
Sitten (K→s)
Sittinas (E→I)
sėdėjimas (→g)
Rusų mokslininkas Vladimiras Levenšteinas šią koncepciją pasiūlė 1965 m. Iš čia ir kilo pavadinimas Levenšteino atstumas.
Pavyzdžiui
Jei str1="ivan", str2="ivan", tada skaičiuojama, kad jis lygus 0. Nekonvertuota. panašumas = 1-0 / Math.Max (str1.ilgis, str2 ilgis) = 1 Jei str1="ivan1", str2="ivan2", tada skaičiuojama, kad jis yra lygus 1. Str1 "1" konvertuojamas į "2", konvertuoja simbolį, taigi atstumas yra 1, panašumas = 1-1/Math.Max(str1.length, str2.length) = 0.8
Taikymas:
- DNR analizė
- Rašybos tikrinimas
- Kalbos atpažinimas
- Plagiato aptikimas
Algoritmas įdiegtas C#:
Bandymo kodas:
Remiantis bandymų rezultatais daroma išvada, kaderdvėarbaSkyrybos ženklai、Stygos padėtisSkirtingi miestaiRezultatai, turintys įtakos panašumuiTodėl, lyginant eilučių atpažinimą, prieš iškviečiant algoritmą rekomenduojama pašalinti visus eilutės tarpus ir specialius simbolius。
Išteklių:Hipersaito prisijungimas matomas.
"GitHub" taip pat yra biblioteka, skirta C# eilučių panašumų palyginimui
FuzzyString yra biblioteka, sukurta mano kasdieniam darbui, siekiant koordinuoti pavadinimų konvencijas tarp skirtingų tinklelio modelių. Aš pašalinau maitinimo sistemos specifinį kodą ir sujungiau tai, kas gali būti efektyviai naudojama kaip eilutės plėtinys, siekiant nustatyti apytikslę lygybę tarp dviejų eilučių. Visi čia naudojami algoritmai buvo išgauti iš internetinių šaltinių, konvertuoti į C# ir sukompiliuoti į šią biblioteką. Radau keletą kitų panašių atvirojo kodo įgyvendinimų, kurių nėra. NET / C#。 Pridėję *.dll prie savo projekto, gausite prieigą prie šio plėtinio ir atskirų plėtinių pagal ApproximatelyEquals() plėtinį.
Adresas:Hipersaito prisijungimas matomas.
Nuget įdiegti:
Į šį projektą įtraukti algoritmai:
- Hamming atstumas
- Jaccard atstumas
- Jaro atstumas
- Jaro-Winkler atstumas
- Levenšteino atstumas
- Ilgiausia viešoji
- Ilgiausia bendra sekos eilutė
- Persidengimo koeficientas
- Ratcliff-Obershelp panašumas
- Sorensen-kauliukų atstumas
- Tanimoto koeficientas
Naudojimas:
Rezultatus:
(Pabaiga)
|