-
한글 일치율 비교#4. 텍스트 비교 및 일치율 추출c# Winform 개발/글자비교 2021. 6. 22. 16:37
items에 있는 데이터는 이런식으로 들어가 있습니다.
"ㅅㅓ ㅇㅜㄹㅅㅣ ㄱㅏㅇㄴㅏㅁㄱㅜ ", "서울시강남구|18"
파이프라인( | ) 기준으로 텍스트박스에 보여질(서울시강남구)와 초중종성의 length를 넣었습니다.
초성+중성+종성을 다시 합쳐도 "서울시강남구"가 보여질겁니다. ( 귀찮아서 dictionary에 담음 )
// 주소파일에서 읽어온 데이터 Dictionary<string, string> items = new Dictionary<string, string>(); private void button2_Click(object sender, EventArgs e) { if(textBox1.Text.Length < 1) { MessageBox.Show("2글자 이상입력"); textBox1.Focus(); return; } string tb = divideString(textBox1.Text); int tbLen = tb.Length; Dictionary<string, int> detect = new Dictionary<string, int>(); System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); detect.Clear(); sw.Start(); foreach (var pair in items) { string[] value = pair.Value.ToString().Split('|'); int totalLen = int.Parse(value[1]) > tbLen ? int.Parse(value[1]) : tbLen; int dis = LevenshteinDistance.Compute( pair.Key, tb); int percent = (int)((double)(totalLen - dis) / totalLen * 100); if(percent >= int.Parse(textBox2.Text)) { detect.Add(value[0], percent); } } sw.Stop(); int detectCount = 0; string setText = ""; foreach (var pair in detect) { setText += pair.Key + " " + pair.Value.ToString() + "%" + Environment.NewLine; detectCount++; } tb_output.Text = setText; MessageBox.Show("찾은개수 : " + detectCount.ToString() + Environment.NewLine + "걸린시간 : " + sw.ElapsedMilliseconds.ToString() + " m/s"); }
결과
dictionary에 5천개 데이터 로드할때 5MB 의 메모리가 잡히며, 메모리를 읽는 방식이라 굉장히 빠른속도를 보여줍니다.
퍼센트 별로 정렬해서 보여줄수도 있겠지만 여기까지!
소스 유용하게 잘 쓰시길 바랍니다~
300x250'c# Winform 개발 > 글자비교' 카테고리의 다른 글
한글 일치율 비교#5. HammingDistance, JaroWinklerDistance 알고리즘 추가 (0) 2021.06.23 한글 일치율 비교#3. LevenshteinDistance (0) 2021.06.22 한글 일치율 비교#2. 한글분리 (초성,중성,종성) (0) 2021.06.22 한글 일치율 비교#1. 전국 읍면동 데이터 Map에 담기 (0) 2021.06.22