c# Winform 개발/글자비교
-
한글 일치율 비교#5. HammingDistance, JaroWinklerDistance 알고리즘 추가c# Winform 개발/글자비교 2021. 6. 23. 14:51
HammingDistance : 글자개수로 비교 JaroWinklerDistance : LevenshteinDistance 와 마찬가지로 편집거리 알고리즘 클래스를 우선추가한후 public static class HammingDistance { public static int GetHammingDistance(string s, string t) { /* if (s.Length != t.Length) { throw new Exception("Strings must be equal length"); } */ int distance = s.ToCharArray() .Zip(t.ToCharArray(), (c1, c2) => new { c1, c2 }) .Count(m => m.c1 != m.c2); retur..
-
한글 일치율 비교#4. 텍스트 비교 및 일치율 추출c# Winform 개발/글자비교 2021. 6. 22. 16:37
items에 있는 데이터는 이런식으로 들어가 있습니다. "ㅅㅓ ㅇㅜㄹㅅㅣ ㄱㅏㅇㄴㅏㅁㄱㅜ ", "서울시강남구|18" 파이프라인( | ) 기준으로 텍스트박스에 보여질(서울시강남구)와 초중종성의 length를 넣었습니다. 초성+중성+종성을 다시 합쳐도 "서울시강남구"가 보여질겁니다. ( 귀찮아서 dictionary에 담음 ) // 주소파일에서 읽어온 데이터 Dictionary items = new Dictionary(); private void button2_Click(object sender, EventArgs e) { if(textBox1.Text.Length < 1) { MessageBox.Show("2글자 이상입력"); textBox1.Focus(); return; } string tb = divid..
-
한글 일치율 비교#3. LevenshteinDistancec# Winform 개발/글자비교 2021. 6. 22. 16:24
Levenshtein Distance는 두 개의 문자열 A, B가 주어졌을 때 두 문자열이 얼마나 유사한 지를 알아낼 수 있는 알고리즘입니다 Compute 함수에서는 같으면 0, 다르면 distance를 리턴하기 때문에, 일치율은 이렇게 계산되겠네요. 일치율 = ( 문자열의 길이 - distance ) / 문자열의 길이 * 100 static class LevenshteinDistance { /// /// Compute the distance between two strings. /// public static int Compute(string s, string t) { int n = s.Length; int m = t.Length; int[,] d = new int[n + 1, m + 1]; // St..
-
한글 일치율 비교#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..
-
한글 일치율 비교#1. 전국 읍면동 데이터 Map에 담기c# Winform 개발/글자비교 2021. 6. 22. 16:11
읍면동 데이터를 구글검색으로 받습니다. 보통 이런식으로 데이터가 있기 때문에 구분자로 파싱해서 map 또는 dictionary에 담습니다. 하고자 하는건 입력한 텍스트가 시군구 읍면동의 이름과 몇퍼센트 일치하는지 체크하는 로직입니다. 테스트용이라 UI는 이렇게 구성했음. StreamReader 읽을때 Encoding.Default 사용해줘야 한글이 깨지지 않습니다~ Dictionary items = new Dictionary(); private void button1_Click(object sender, EventArgs e) { int fileCounter = 0; int counter = 0; string line; System.IO.StreamReader file = new System.IO.Str..