9. 2 랭커 라이브러리 만들기

이제 랭커 라이브러리를 만듭시다.

랭커 클래스도 내부에 개체의 상태를 기억할 것이 없으므로 정적 클래스로 정의할게요.

검색 요청 메서드를 작성합시다. 검색 요청 메서드는 검색 질의를 입력 인자로 받아 검색 후에 순위를 부여하여 순위화 한 결과 목록을 반환합니다.

결과를 보관할 컬렉션 개체를 생성합니다.

검색 질의를 형태소 분석합니다.

검색 질의를 분석한 목록의 형태소 별로 검색 및 순위를 부여합니다.

결과를 점수 순으로 정렬하여 반환합니다.

 

정렬할 수 있게 WSECore 라이브러리의 RankedUrl을 비교 가능한 클래스로 변경합니다.

그리고 RankedUrl 클래스에 IComparable<T> 인터페이스에 약속한 CompareTo 메서드를 구현합니다.

다시 Ranker 클래스의 형태소 이름으로 검색한 후에 검색 결과를 순위화하여 결과를 반환하는 메서드를 작성합시다.

먼저 WSEForSearch 라이브러리를 참조하여 정적 클래스 EHDbmForSearch의 역 파일 정보를 얻어오는 GetInvertedFile 메서드를 호출합니다.

만약 검색 결과의 개수가 없다면 그대로 메서드를 끝냅니다.

 

역 파일 목록에서 페이지 주소와 참조 개수 및 형태소를 포함하는 목록 개수로 순위화 한 페이지 개체를 구합니다. 그리고 다시 후처리 작업을 수행합니다. 순위화 한 페이지 개체를 구하는 부분과 후처리 작업은 별도의 메서드로 작성합시다.

페이지 주소와 참조 개수 및 형태소를 포함하는 목록 개수로 순위화 한 페이지 개체를 구하는 메서드를 구현합시다.

TF 값을 구하기 위해 정적 클래스 EHDbmForSearch의 GetTotalCountInUrl 메서드를 이용하여 웹 사이트에 포함한 전체 형태소 개수를 얻어옵니다.

DF 값을 구하기 위해 정적 클래스 EHDbmForSearch의 GetPostedUrlCount 메서드를 이용하여 수집한 전체 페이지 개수를 얻어옵니다.

TF 값은 웹 사이트의 전체 형태소에서 해당 형태소의 빈도수로 계산합니다.

DF 값은 수집한 전체 웹 사이트 개수에서 해당 형태소를 포함하는 문서 개수로 계산합니다.

TF 값과 DF 값을 이용하여 점수를 부여합니다.

수집한 웹 사이트 개체를 얻어와서 부여한 점수와 함께 순위화 한 페이지 개체를 생성하여 반환합니다.

후처리 작업을 수행하는 메서드를 작성합시다. 여기에서는 이미 결과 목록에 포함한 순위화한 페이지 개체일 때 두 개체의 점수를 합산하는 작업을 수행합니다.

먼저 결과 목록에서 입력 인자로 받은 순위화한 개체와 같은 사이트인 항목을 검색합니다. 이 부분은 별도의 메서드로 작성합시다.

만약 검색 결과가 있으면 두 개체의 점수를 합산합니다. 그리고 없다면 결과 목록에 입력 인자로 받은 개체를 추가합니다. WSECore 라이브러리의 RankedUrl 형식에서는 두 개체의 점수를 합산하는 Merge 메서드가 없습니다. 이 부분은 추가해야 합니다.

WSECore 라이브러리의 RankedUrl 클래스에 두 개체의 점수를 합산하는 Merge 메서드를 추가합시다.

다시 Ranker 클래스로 돌아와서 결과 목록에 같은 페이지 주소의 순위화 한 개체를 찾는 메서드를 구현합시다.

결과 목록의 각 개체의 Url 정보가 입력 인자로 받은 개체의 Url 정보가 같은 개체를 찾아 반환합니다.

 

▷ Ranker.cs

▷ RankedUrl.cs(WSECore 라이브러리 코드 변경)