Viime aikoina on ollut ongelma, joka täytyy ratkaista: käyttäjän syöttämää merkkijonoa ja järjestelmän saamaa merkkijonoa vertaillaan, jos virhe ei ole kovin suuri, järjestelmä katsoo sen täyttävän vaatimukset, ja on parasta asettaa kynnysarvo. CAPTCHA-tunnistuksessa sinun täytyy verrata merkkikoodien samankaltaisuutta ja käyttää "edit distance algorithmia" periaatteen ja C#-toteutuksen tallentamiseen.
Baidu-tietosanakirjan mukaan:
Muokkausetäisyys, joka tunnetaan myös nimellä Levenshteinin etäisyys (tunnetaan myös nimellä muokkausetäisyys), on vähimmäismäärä muokkauksia, joita tarvitaan kahden merkkijonon vaihtamiseen, ja mitä suurempi etäisyys, sitä erilaisempia ne ovat. Sallittuihin muokkausoperaatioihin kuuluu merkin korvaaminen toisella, merkin lisääminen ja merkin poistaminen.
Esimerkiksi käännetään sana kissanpentu muotoon istuminen:
sitten (k→s)
Sittin (e→i)
istuminen (→g)
Venäläinen tiedemies Vladimir Levenshtein esitti tämän käsitteen vuonna 1965. Tästä juontuu nimi Levenshtein Distance.
Esimerkiksi
Jos str1="ivan", str2="ivan", lasketaan olevan yhtä suuri kuin 0. Ei muunnettu. samankaltaisuus=1-0/Math.Max(str1.length,str2.length)=1 Jos str1="ivan1", str2="ivan2", lasketaan olevan yhtä suuri kuin 1. Str1:n "1" muunnetaan muotoon "2", muuntaa merkin, joten etäisyys on 1, samankaltaisuus = 1-1/Math.Max(str1.length, str2.length) = 0.8
Käyttötarkoitus:
- DNA-analyysi
- Oikoluku
- Puheentunnistus
- Plagioinnin tunnistus
Algoritmi toteutetaan C#:lla:
Testikoodi:
Testitulosten perusteella pääteltiin, ettäavaruustaiVälimerkit、Kielen sijaintiEri kaupungitTulokset, jotka vaikuttavat samankaltaisuuteenSiksi merkkijonojen tunnistusta verrattaessa suositellaan poistamaan kaikki välilyönnit ja erityissymbolit merkkijonosta ennen algoritmin kutsumista。
Varat:Hyperlinkin kirjautuminen on näkyvissä.
GitHubissa on myös kirjasto C#-merkkijonojen samankaltaisuuden vertailuun
FuzzyString on kirjasto, joka on kehitetty päivittäistä työtäni varten koordinoimaan nimeämiskäytäntöjä eri ruudukkomallien välillä. Olen poistanut sähköjärjestelmäkohtaisen koodin ja koonnut sen, mitä voidaan tehokkaasti käyttää merkkijonojen laajennuksena määrittääkseni kahden merkkijonon likimääräisen yhtäläisyyden. Kaikki tässä käytetyt algoritmit on poimittu verkkolähteistä, muunnettu C#:ksi ja käännetty tähän kirjastoon. Löysin useita muita vastaavia avoimen lähdekoodin toteutuksia, joita ei ole saatavilla . NET / C#。 Lisäämällä *.dll projektiisi saat pääsyn tähän laajennukseen ja yksittäisiin laajennuksiin ApproximatelyEquals()-laajennuksen alla.
Osoite:Hyperlinkin kirjautuminen on näkyvissä.
Nuget-asennus:
Tähän projektiin sisältyvät algoritmit:
- Hamming-etäisyys
- Jaccardin etäisyys
- Jaro-etäisyys
- Jaro-Winkler -etäisyys
- Levenshteinin etäisyys
- Pisimmän yleisön
- Alajonon pisin yhteinen alijono
- Päällekkäisyyskerroin
- Ratcliff-Obershelpin samankaltaisuus
- Sorensen-Dice -etäisyys
- Tanimoto-kerroin
Käyttö:
Tulos:
(Loppu)
|