2

Steve Hanov에 설명 된대로 트리 트리를 사용하여 Levenshtein 거리 알고리즘을 구현했습니다. 그러나 특수 문자를 처리하는 데 어려움이 있습니다. 예를 들어, Großmann과 Grossmann 사이의 거리를 계산할 경우 ß와 ss는 같아야하므로 거리가 0이어야합니다.Levenshtein 거리 및 특수 문자

이러한 특별한 경우를 지원하는 가장 좋은 해결책 (있는 경우)은 무엇이 될까요?

나의 초기 생각은 거리를 계산하기 전에 모든 문자열을 표준화하는 것이 었습니다. Großmann -> Grossman, österreich -> oesterreich, ... 그러나 .NET에는 이러한 기능이없는 것 같습니다.

답변

1

도전 과제는 현재 문화권이 개별 단어의 언어를 식별하지 못하는 것입니다.

일치하는 부분에 오류가 있다고 가정합니다.

매핑 할 필요가없는 문자 집합을 식별하십시오.

모든 문화권에 대한 집합 매핑을 식별합니다.

특정 문화권에 대한 매핑을 식별합니다.

먼저 매핑되지 않은 Levenshtein 거리를 수행하십시오.

매핑되지 않은 거리가 0 인 경우 중지하십시오.

매핑되지 않은 거리가 x (예 : 4)보다 큰 경우 일치하지 않으므로 중지하십시오.

단어에 매핑 할 필요가없는 문자 (예 : a-z) 만있는 경우 중지하십시오.

거리가 0 스톱 인 경우 모든 문화권에 매핑하십시오.

기본 문화권에 매핑하고 거리가 제로 인 경우지도.

다른 문화권에 매핑하고 거리가 제로 스톱 인 경우지도.

그리고 나는 사실 인 경우 0을보고하기 위해 Levenshtein에 직선 string.compare를 추가했습니다.

+0

제안 된 접근 방식은 내가 원하는 것에 대해서만 도움이 될 것이라고 생각합니다. 감사합니다 .-) –

0

정규화 방법을 생각합니다.

저는이 기성품을 수행하는 라이브러리를 전혀 모르고 있으며 빠른 검색으로 아무 것도 나타나지 않았습니다.

비슷한 문제가 여기에 설명되어 있습니다. Converting "Bizarre" Chars in String to Roman Chars.

사전에 필요한 모든 매핑을 포괄적으로 식별 할 수있는 한 수동으로 매핑을 만드는 솔루션이 효과적입니다.

+0

예, 그렇지만 매우 귀찮습니다. 예를 들어, 독일어를 비교할 때, oe를 대체해야하지만, 예를 들어 영어 문화를 비교할 때 정상화해서는 안됩니다. –

+0

@KevinMeiresonne 그 이유는 분명하지 않지만 필요한 경우 각 문화권에 대한 별도의 매핑을 작성합니다. –

+0

문화권이 영어 인 경우 ö를 oe로 변환하지 않으시겠습니까? 그건 나에게 의미가 없다. – Paparazzi