Mostanában felmerült egy probléma, amit kezelni kell, vagyis a felhasználó által beírt string és a rendszer által kapott string összehasonlítása esetén ha a hiba nem túl nagy, a rendszer úgy tekinti, hogy megfelel a követelményeknek, és a legjobb egy küszöbértéket beállítani. CAPTCHA felismerés során össze kell hasonlítanod a karakterkódok hasonlóságát, és a "szerkesztési távolság algoritmusát" kell használnod, hogy rögzítsd az elvet és a C# implementációt.
A Baidu enciklopédia szerint:
A szerkesztési távolság, más néven Levenshtein távolság (más néven szerkesztési távolság), a minimális szerkesztések száma, amely két húr között az egyik közötti váltáshoz szükséges, és minél nagyobb a távolság, annál eltérőbbek egymástól. Az engedélyezett szerkesztési műveletek közé tartozik egy karakter helyettesítése egy másikkal, egy karakter behelyezése és egy karakter eltávolítása.
Például a kiscica szót ültető szóra alakítsuk:
sitten (K→s)
Sittin (e→i)
Ülve (→g)
Az orosz tudós, Vladimir Levenshtein 1965-ben javasolta ezt a koncepciót. Innen ered a Levenshtein Távolság név.
Például
Ha str1="ivan", str2="ivan", akkor úgy számoljuk, hogy 0-val egyenlő. Nem átalakították. hasonlóság=1-0/Math.Max(str1.length,str2.length)=1 Ha str1="ivan1", str2="ivan2", akkor az 1-nek felel meg. Az str1 "1"-e "2"-re alakul át, egy karaktert alakít át, így a távolság 1, hasonlóság = 1-1/Math.Max(str1.length, str2.length) = 0,8
Alkalmazás:
- DNS-elemzés
- Helyesírás-ellenőrzés
- Beszédfelismerés
- Plágium felderítése
Az algoritmus C#-ban van megvalósítva:
Tesztkód:
A teszteredményekből következik ki, hogytérvagyÍrásjelek、Húr pozíciójaKülönböző városokEredmények, amelyek befolyásolják a hasonlóságotEzért a stringfelismerés összehasonlításakor ajánlott eltávolítani az algoritmus meghívása előtt az összes teret és speciális szimbólumot a húrból。
Erőforrások:A hiperlink bejelentkezés látható.
A GitHubon van egy könyvtár C# string hasonlóság-összehasonlításokra is
A FuzzyString egy könyvtár, amelyet a napi munkámhoz fejlesztettem, hogy koordináljam a különböző rácsmodellek közötti elnevezési konvenciókat. Eltávolítottam az energiarendszer-specifikus kódot, és összeállítottam, amit hatékonyan lehet stringkiterjesztésként használni, hogy meghatározzam a két húr közelítő egyenlőségét. Az itt használt összes algoritmust online forrásokból nyerték ki, átalakították C#-ra, és ebből a könyvtárból kompolálták. Találtam több hasonló nyílt forráskódú implementációt, amelyek nem elérhetők . NET / C#。 Ha hozzáadod a *.dll a projektedhez, hozzáférést kapsz ehhez a kiterjesztéshez és az ApproximatelyEquals() kiterjesztés alatt szereplő egyes kiterjesztésekhez.
Cím:A hiperlink bejelentkezés látható.
Nuget telepítés:
A projektben szereplő algoritmusok:
- A hamming távolság
- Jaccard távolság
- Jaro távolság
- Jaro-Winkler távolság
- Levenshtein távolság
- A leghosszabb közönség
- Az al-sorozat leghosszabb közös alhúrja
- Átfedési együttható
- Ratcliff-Obershelp hasonlóság
- Sorensen-Dice távolság
- Tanimoto együttható
Használat:
Eredmény:
(Vége)
|