-
한글 일치율 비교#2. 한글분리 (초성,중성,종성)c# Winform 개발/글자비교 2021. 6. 22. 16:19
한글 비교할때 완성된 한글자씩 비교하면
아무래도 일치율이 디테일해 지지 않아서
( "노원구 중계동"을 검색하면 "노원구 중계동" 과 "노원구 상계동" 은 같은 일치율을 보임)
초성,중성,종성으로 분리시켰습니다.
divideString("파덜") -> "ㅍㅏ ㄷㅓㄹ"
public static string chosung = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"; public static string jungsung = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ"; public static string jongsung = " ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ"; // 받침이 없을 수 있으므로 제일 첫부분은 띄워줘야 합니다. public static ushort UnicodeHangeulBase = 0xAC00; public static ushort UnicodeHangeulLast = 0xD79F; public string Divide(char c) { ushort check = Convert.ToUInt16(c); if (check > UnicodeHangeulLast || check < UnicodeHangeulBase) { // 한글이 아닌 경우 return ""; } /* * 합칠 때 제일 처음에 UnicodeHangeulBase 를 더해 줬으므로 * 제일 먼저 빼줘야 합니다. */ int Code = check - UnicodeHangeulBase; int JongsungCode = Code % 28; // 종성 코드 분리 Code = (Code - JongsungCode) / 28; int JungsungCode = Code % 21; // 중성 코드 분리 Code = (Code - JungsungCode) / 21; int ChosungCode = Code; // 남는 게 자동으로 초성이 됩니다. char Chosung = chosung[ChosungCode]; // Chosung 목록 중에서 ChosungCode 번째 있는 글자 char Jungsung = jungsung[JungsungCode]; char Jongsung = jongsung[JongsungCode]; return Chosung.ToString() + Jungsung.ToString() + Jongsung.ToString(); //Console.WriteLine("초성: " + Chosung + " / 중성: " + Jungsung + " / 종성: " + Jongsung); } private string divideString(string input) { string output = ""; foreach (char c in input) { output += Divide(c); } return output; }
300x250'c# Winform 개발 > 글자비교' 카테고리의 다른 글
한글 일치율 비교#5. HammingDistance, JaroWinklerDistance 알고리즘 추가 (0) 2021.06.23 한글 일치율 비교#4. 텍스트 비교 및 일치율 추출 (0) 2021.06.22 한글 일치율 비교#3. LevenshteinDistance (0) 2021.06.22 한글 일치율 비교#1. 전국 읍면동 데이터 Map에 담기 (0) 2021.06.22