최근에는 사용자가 입력한 문자열과 시스템이 얻은 문자열을 비교하는 문제가 생겼습니다. 오류가 크지 않으면 시스템은 요구사항을 충족한다고 판단하여 임계값을 설정하는 것이 최선입니다. 캡차(CAPTCHA) 인식을 할 때는 문자 코드의 유사성을 비교하고 "편집 거리 알고리즘"을 사용해 원리와 C# 구현을 기록해야 합니다.
바이두 백과사전에 따르면:
편집 거리(Edit distance), 또는 레벤슈타인 거리(Levenshtein distance, 편집 거리라고도 함)는 두 문자열 사이에서 다른 문자열로 전환하는 데 필요한 최소 편집 횟수이며, 거리가 길수록 차이가 커집니다. 허가된 편집 작업에는 한 문자를 다른 문자로 교체하거나, 문자를 삽입하고, 제거하는 작업이 포함됩니다.
예를 들어, 'kitten'이라는 단어를 'sitting'으로 바꿔보세요:
시텐 (K→s)
싯틴 (E→I)
앉아 (→g)
러시아 과학자 블라디미르 레벤슈타인은 1965년에 이 개념을 제안했다. 그래서 레벤슈타인 거리라는 이름이 붙었습니다.
예를 들어
만약 str1="ivan", str2="ivan"이라면, 0이 되도록 계산됩니다. 개종하지 않았다. 유사도=1-0/Math.Max(str1.length, str2.length)=1 만약 str1="ivan1", str2="ivan2"라면, 이 값은 1로 계산된다. str1의 "1"은 "2"로 변환되어 문자를 변환하므로 거리는 1, 유사도 = 1-1/Math. Max(str1.length, str2.length) = 0.8
적용 방법:
이 알고리즘은 C#으로 구현됩니다:
테스트 코드:
검사 결과에 따르면,우주또는구두점、줄 위치여러 도시유사성에 영향을 미치는 결과따라서 문자열 인식을 비교할 때는 알고리즘을 호출하기 전에 문자열 내 모든 공간과 특수 기호를 제거하는 것이 권장됩니다。
리소스:하이퍼링크 로그인이 보입니다.
GitHub에는 C# 문자열 유사도 비교 라이브러리도 있습니다
FuzzyString은 제가 일상 업무를 위해 개발된 라이브러리로, 서로 다른 그리드 모델 간의 명명 규칙을 조정하기 위해 만들어졌습니다. 전력 시스템별 코드를 제거하고, 두 문자열 간의 근사적인 등식을 결정하기 위해 효과적으로 문자열 확장으로 사용할 수 있는 코드를 조합했습니다. 여기서 사용된 모든 알고리즘은 온라인 소스에서 추출하여 C#으로 변환한 후 이 라이브러리에 컴파일되었습니다. 저는 . NET / C#. 프로젝트에 *.dll을 추가하면 이 확장과 ApproximatelyEquals() 확장 하에 개별 확장에 접근할 수 있습니다.
주소:하이퍼링크 로그인이 보입니다.
NuGet 설치:
이 프로젝트에 포함된 알고리즘:
- 해밍 거리
- 자카르 거리
- 자로 거리
- 야로-윙클러 거리
- 레벤슈타인 거리
- 가장 긴 대중
- 부분 수열의 가장 긴 공통 부분문자열
- 중첩 계수
- 래트클리프-오버스헬프 유사성
- 소렌센-다이스 거리
- 타니모토 계수
사용법:
결과:
(끝)
|