Ostatnio pojawił się problem, który trzeba rozwiązać, a mianowicie porównanie ciągu wpisanego przez użytkownika z ciągiem otrzymanym przez system; jeśli błąd nie jest duży, system uzna go za spełniający wymagania i najlepiej ustalić próg. Podczas rozpoznawania CAPTCHA musisz porównać podobieństwo kodów znaków i użyć "algorytmu dystansu edycji", aby zarejestrować zasadę i implementację C#.
Według Encyklopedii Baidu:
Odległość edycji, znana również jako odległość Levenshteina (znana również jako dystans edycji), to minimalna liczba edycji potrzebna do przejścia między dwoma strunami, a im większa odległość, tym większe są one różnice. Operacje edycji z uprawnieniami obejmują zastąpienie jednego znaku innym, wstawienie znaku oraz usunięcie znaku.
Na przykład, przekształć słowo kociak na siedzące:
Sitten (K→s)
Sittin (E→I)
siedzący (→g)
Rosyjski naukowiec Władimir Levenshtein zaproponował tę koncepcję w 1965 roku. Stąd nazwa Odległość Levenshteina.
Na przykład
Jeśli str1="ivan", str2="ivan", to oblicza się go jako równy 0. Nie przekształcony. podobieństwo=1-0/Matematyka.Max(str1.długość,str2.długość)=1 Jeśli str1="ivan1", str2="ivan2", to oblicza się go jako równe 1. "1" ze str1 zamienia się na "2", przekształca znak, więc odległość wynosi 1, podobieństwo = 1-1/Math.Max(str1.length, str2.length) = 0,8
Zastosowanie:
- Analiza DNA
- Sprawdzanie pisowni
- Rozpoznawanie mowy
- Wykrycie plagiatu
Algorytm jest zaimplementowany w C#:
Kod testowy:
Z wyników testów wynika, żeprzestrzeńlubInterpunkcja、Pozycja strunRóżne miastaWyniki wpływające na podobieństwoDlatego podczas porównywania rozpoznawania ciągów znaków zaleca się usunięcie wszystkich spacji i specjalnych symboli w ciągu przed wywołaniem algorytmu。
Zasoby:Logowanie do linku jest widoczne.
Na GitHubie jest też biblioteka do porównywania podobieństw strun w C#
FuzzyString to biblioteka stworzona na potrzeby mojej codziennej pracy, aby koordynować konwencje nazewnictwa między różnymi modelami siatki. Usunąłem kod specyficzny dla systemu energetycznego i przygotowałem to, co można skutecznie wykorzystać jako rozszerzenie ciągu do określenia przybliżonej równości między tymi dwoma ciągami. Wszystkie użyte tutaj algorytmy zostały wyodrębnione ze źródeł online, przekonwertowane do C# i skompilowane do tej biblioteki. Znalazłem kilka innych podobnych implementacji open source, które nie są dostępne dla . NET / C#。 Dodanie *.dll do projektu da Ci dostęp do tego rozszerzenia oraz poszczególnych rozszerzeń w ramach rozszerzenia ApproximatelyEquals().
Adres:Logowanie do linku jest widoczne.
Instalacja Nugeta:
Algorytmy uwzględnione w tym projekcie:
- Odległość Hamminga
- Odległość Jaccarda
- Odległość Jaro
- Odległość Jaro-Winklera
- Dystans Levenshteina
- Najdłuższa publiczność
- Najdłuższy wspólny podciąg podciągu
- Współczynnik nakładania się
- Podobieństwo Ratcliff-Obershelp
- Odległość Sorensena-Dice
- Współczynnik Tanimoto
Użycie:
Wynik:
(Koniec)
|