13주 실습강의 2009. 1학기, 소프트웨어 설계 및 실험(Ⅰ)
정보 검색의 간략한 과정 문서 수집 문서 전처리 문서 분석 문서 색인 역파일 생성 역파일 저장 문서 검색 수작업, robot 색인어 사전 구축, 색인어와 문서 id 부여 역파일 생성 색인어 기준으로 각 문서 내용 정렬 문서를 색인어별로 merge 역파일 저장 문서 검색 질의어 색인 질의 오늘 할 부분 – 문서 색인, 질의어 색인
Friends, Romans, countrymen. Inverted index 생성 Tokenizer Token stream. Friends Romans Countrymen Linguistic modules Modified tokens. friend roman countryman Indexer Inverted index. 2 4 13 16 1 색인 Documents to be indexed. Friends, Romans, countrymen.
Linguistic modules n-gram 형태소 분석기 Term을 n개의 음절로 나누는 것 “정보검색”에 대한 2-gram(bigram)은 “정보”, “보검”, “검색”이다. 일반적으로 한글은 2-gram, 영어는 4-gram을 많이 사용 간단하지만 성능은 좋지 않다. 형태소 분석기 주어진 문장을 문법상 의미가 있는 최소단위(형태소)로 분리 자연어처리에 필요한 기초 기술 신조어와 구어에 약점을 지닌다. 영어에 비해 한글의 형태소 분석은 어렵다. 일반적으로 약 95% 이상의 성능
실습 - 색인 부산대 인공지능연구실의 형태소 분석기를 이용해서 문서와 질의어를 색인한 뒤 검색 색인서버와 통신하여 결과를 받아오는 형태 ATL COM DLL로 제공
COM 컴포넌트 개체 모델(Component Object Model, COM) 목적 : 특정한 기능을 갖는 컴포넌트를 여러 어플리케이션에 재사용 가능 컴포넌트 소프트웨어의 조건 언어 독립적 C++로 작성하더라도 C#에서 사용 가능 이진(binary) 형태로 제공 Win32 DLL 또는 EXE로 생성된 실행 코드 버전 호환성 제공 위치 투명성(location transparency) 제공 COM 컴포넌트를 사용하는 어플리케이션은 COM 컴포넌트가 설치되고 실행하는 위치에 관계없이 사용 가능
ATL(Active Template Library) C++의 템플릿(template)을 사용하여 작성된 클래스 라이브러리 MFC와 ATL MFC 풍부한 사용자 인터페이스 컴포넌트가 무거워짐 속도가 느림 ATL MFC 수준의 사용자 인터페이스를 제공하지 않음 프레임워크, 실행 라이브러리를 필요로 하지 않음 작고 빠른 COM 컴포넌트를 생성하는데 적합
ATL COM DLL 장점 단점 실버라이트로 해결하기 어려운 문제를 해결할 수 있다. C++로 되어있다. 디버깅이 어렵다. 파일 접근, 소켓 통신 등 C++로 되어있다. 익히기 쉬움 C++ 대부분의 문법을 사용 가능 단점 디버깅이 어렵다. 로그 파일 등으로 해결 DLL 파일을 지우고 다시 쓰는 것이 번거롭다. DLL을 실행하고 있는 프로세스를 직접 찾아서 꺼야 함. procexp.exe를 사용하여 DLL을 찾을 수 있다. http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
실습 – ATL COM DLL 만들기
실습 – ATL COM DLL 만들기 프로젝트 -> 추가 -> 클래스 추가 -> ATL Active Server Page 구성 요소
실습 – ATL COM DLL 만들기 약식 이름을 적고 다음 버튼을 누른다.
실습 – ATL COM DLL 만들기 스레딩 모델 : 모두 지원 : 자유 스레드된 마샬러
실습 – ATL COM DLL 만들기 클래스 뷰 -> Interface선택(IMyStrObj) -> 추가 -> 메서드 추가
실습 – ATL COM DLL 만들기
실습 – ATL COM DLL 만들기 stdafx.h #include <comdef.h> 추가 STDMETHODIMP CMyStrObj::Append(BSTR str_1, BSTR str_2, BSTR* result) { // TODO: 여기에 구현 코드를 추가합니다. _bstr_t bstr1 = str_1; _bstr_t bstr2 = str_2; bstr1 += bstr2; *result = bstr1.Detach(); return S_OK; }
실습 – ATL COM DLL 사용 *.Web project -> 참조 추가 -> COM tab -> DLL 선택 WCF 서비스 추가 실행 결과 [OperationContract] public string Append(string str1, string str2) { MyStringLib.MyStrObjClass mystr = new MyStringLib.MyStrObjClass(); return mystr.Append(str1, str2); }
실습 – ATL COM DLL 사용 색인기 사용 실행 결과 시작 – 실행 - regsvr32 “c:\폴더\LinguisticModule.dll” 참조 추가 LinguisticModuleLib.LinguisticObjClass 생성 getIWords() 함수 사용 실행 결과
실습 문서 색인 질의어 색인 새 글쓰기에서 색인기를 사용. ‘|’와 ‘ ’(공백)으로 tokenize 지난 주 실습했던 AND, OR 연산을 수정하여 우선순위 적용 OR 연산 수행 후 AND 연산 수행 예) A B|C ‘B’와 ‘C’를 먼저 OR 연산한 후 ‘A’와 AND 연산한다.