14주 실습강의 2009. 1학기, 소프트웨어 설계 및 실험(Ⅰ)
검색어 자동완성 검색어로 입력한 키워드를 분석해서, 예상되는 키워드를 자동으로 완성해주는 기능 일반적으로 한글의 경우 자소 단위까지 분석한다 네이버의 자동완성 오늘 할 부분 – 문서 색인, 질의어 색인
문자 코드 – 아스키 코드(ASCII) 1바이트로 영문자, 특수문자 표현 한글을 표현할 수 없다
문자 코드 – 완성형 한글 코드 한글은 초성(19), 중성(21), 종성(28 – 받침 없는 경우 포함)의 조합으로 총 11,172가지의 음절글자를 만들 수 있다. 1바이트로 표현 불가능 현대 한글 초성 : ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ 중성 : ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ 종성 : ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ KS C 5601-1987 1987년에 가장 먼저 국가 표준으로 정해짐 한글을 표상하는 두 바이트 각각의 첫번째 비트는 1 실제 생활에서 사용된다고 생각되는 2,350자만 한글 코드에 배당 1989년에 1,930자를 덧붙임(현행 표준 완성형)
문자 코드 – 조합형 한글 코드 가능한 모든 한글 글자를 표상 완성형과 더불어 1992년에 국가 표준이 됨(KS 5601-1992) 전체 16비트에 최초 비트는 1로, 이후 두 바이트가 한글임을 표시하고, 나머지 5 비트씩 초성, 중성, 종성 부분을 각각 나타낸다. 예) 조합형에서 문자 ‘강’의 표상 자소 분리가 간단하기 때문에, 한글 텍스트 처리 프로그램을 만드는 데 많이 이용 7-bit 아스키 코드 영역과 충돌이 일어날 수 있음 제 1 바 이 트 제 2 바 이 트 1 ㄱ (초성) ㅏ (중성) ㅇ (종성)
문자 코드 – 유니코드(Unicode) 전세계의 모든 문자 표현하고자 함. 모든 현대 문자, 고대 문자를 지원하지는 못한다. 한글 완성형으로 11,172가지의 음절글자가 포함 초성(19), 중성(21), 종성(28 – 받침이 없는 경우 포함) 포함 고어 포함(‘ㄴㄴ’, ‘ㅂㄱ’ 등) 윈도우 시작 – 보조프로그램 – 시스템 도구 – 문자표 참조 간단한 함수로 초성, 중성, 종성 분리 가능
실습 - 자동완성 CodePlex에서 제공하는 Silverlight Toolkit을 이용 AutoCompleteBox 사용 http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=20430 Silverlight 2 Toolkit March 2009 Installer를 Download 후 설치 AutoCompleteBox 사용 System.Windows.Controls.Input.Toolkit 참조 추가
실습 - 자동완성 Page.xaml <UserControl>에 아래 내용추가 xmlns:Toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" <Toolkit:AutoCompleteBox> 추가
실습 - 자동완성 Page.xaml.cs 결과
실습 - 자동완성 유니코드를 이용한 자소 분리 // 초성 List<string> chosung = new List<string>() { "ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" }; // 중성 List<string> jungsung = new List<string>() "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ" // 종성 List<string> jongsung = new List<string>() "", "ㄱ", "ㄲ", "ㄱㅅ", "ㄴ", "ㄴㅈ", "ㄴㅎ", "ㄷ", "ㄹ", "ㄹㄱ", "ㄹㅁ", "ㄹㅂ", "ㄹㅅ", "ㄹㅌ", "ㄹㅍ", "ㄹㅎ", "ㅁ", "ㅂ", "ㅂㅅ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ",
실습 - 자동완성 자소 분리 함수 string StringToJaso(string str) { int hangul, jong, jung, cho; string result = ""; int i = 0; for (i = 0; i < str.Length; i++) if (str[i] < 128) // 영문 result += str[i]; else if (str[i] >= 0xAC00 && str[i] <= 0xD7A3) // 한글(완성형) : 0xAC00 -> '가', 0xD7A3 -> '힣' hangul = (int)(str[i]) - 0xAC00; jong = hangul % 28; jung = ((hangul - jong) / 28) % 21; cho = ((hangul - jong) / 28) / 21; result += chosung.ElementAt(cho) + jungsung.ElementAt(jung) + jongsung.ElementAt(jong); } else if (str[i] >= 0x3131 && str[i] <= 0x3163) // 한글(자소) : 0x3131 -> 'ㄱ', 0x3163 -> 'l' return result;
실습 - 자동완성 TextFilter 추가 검색어 또는 저장된 value를 수정하여 원하는 검색할 수 있다
실습 - 자동완성 기본구현 13주차 게시판의 TextBox를 AutoCompleteBox로 바꿔 검색어 자동완성을 만든다. 자동완성 대상 단어는 InvertedIndex에 저장된 term이다. 오늘 실습내용을 바탕으로 자소 단위까지 분석한다. 추가구현 Term에 대한 df로 자동완성 우선순위를 정한다. 힌트 : descending sorting