V zadnjem času se pojavi težava, ki jo je treba rešiti, in sicer, da je treba primerjati niz, ki ga je uporabnik vnesel, in niz, ki ga sistem dobi; če napaka ni zelo velika, bo sistem ocenil, da izpolnjuje zahteve, in najbolje je postaviti prag. Pri prepoznavanju CAPTCHA morate primerjati podobnost znakovnih kod in uporabiti "algoritem za urejanje razdalje" za zapis principa in implementacije v C#.
Po Baidu enciklopediji:
Razdalja urejanja, znana tudi kot Levenshteinova razdalja (znana tudi kot razdalja urejanja), je minimalno število urejev, potrebnih za prehod med dvema strunama, in večja kot je razdalja, bolj se razlikujeta. Urejanje z dovoljenji vključuje zamenjavo enega znaka z drugim, vstavljanje znaka in odstranjevanje znaka.
Na primer, besedo mucek spremenite v sedenje:
Sitten (K→s)
Sittin (E→I)
sedenje (→g)
Ruski znanstvenik Vladimir Levenshtein je ta koncept predlagal leta 1965. Od tod tudi ime Levenshteinova razdalja.
Na primer
Če je str1="ivan", str2="ivan", se izračuna, da je enak 0. Ni bila pretvorjena. podobnost=1-0/Matematika.Max(str1.dolžina,str2.dolžina)=1 Če je str1="ivan1", str2="ivan2", se izračuna, da je enako 1. "1" v str1 se pretvori v "2", pretvori znak, tako da je razdalja 1, podobnost = 1-1/Math.Max(str1.length, str2.length) = 0,8
Uporaba:
- Analiza DNK
- Preverjanje črkovanja
- Prepoznavanje govora
- Zaznavanje plagiatorstva
Algoritem je implementiran v C#:
Testna koda:
Iz rezultatov testov je razvidno, daprostoraliLočila、Položaj strunRazlična mestaRezultati, ki vplivajo na podobnostZato je pri primerjavi prepoznavanja nizov priporočljivo odstraniti vse presledke in posebne simbole v nizu, preden pokličete algoritem。
Sredstva:Prijava do hiperpovezave je vidna.
Na GitHubu obstaja tudi knjižnica za primerjavo podobnosti nizov v C#
FuzzyString je knjižnica, razvita za moje vsakodnevno delo za usklajevanje konvencij poimenovanja med različnimi modeli mrež. Odstranil sem kodo, specifično za energetski sistem, in sestavil tisto, kar se lahko učinkovito uporabi kot razširitev nizov za določitev približne enakosti med obema nizoma. Vsi algoritmi, uporabljeni tukaj, so bili izvlečeni iz spletnih virov, pretvorjeni v C# in prevedeni v to knjižnico. Našel sem še več podobnih odprtokodnih implementacij, ki niso na voljo za . NET / C#。 Dodajanje *.dll v vaš projekt vam bo omogočilo dostop do te razširitve in posameznih razširitev pod razširitvijo ApproximatelyEquals().
Naslov:Prijava do hiperpovezave je vidna.
Namestitev NuGeta:
Algoritmi, vključeni v ta projekt:
- Hammingova razdalja
- Jaccardova razdalja
- Jaro razdalja
- Jaro-Winklerjeva razdalja
- Levenshteinova razdalja
- Najdaljša javnost
- Najdaljši skupni podniz podzaporedja
- Koeficient prekrivanja
- Podobnost med Ratcliffom in Obershelp
- Sorensen-Diceova razdalja
- Tanimotov koeficient
Uporaba:
Rezultat:
(Konec)
|