안녕하세요. 언제나 휴일에 언휴예요.
이번 강의에서는 웹 검색 서비스 프로젝트의 Core 라이브러리를 만들어요.
여러 컴포넌트에서 공통으로 사용할 형식을 정의하는 것이예요.
이러한 형식이 필요하다는 것을 아키텍쳐링 및 설계 과정에서 도출하는 것이 어렵지 구현은 별 다른 것이 없어요.
웹 검색 서비스에서는 수집할 사이트(Candidate), 수집한 사이트 정보(PostedUrl), 형태소(Morpheme), 형태소를 포함하는 사이트를 역 추적할 수 있는 역파일 요소(InvertedElem), 검색 결과를 TF-IDF 방식으로 점수화한 사이트 정보(RankedUrl)가 필요합니다.
이 부분은 클래스 라이브러리(.NET Framework)로 만들거예요.
Candidate.cs
using System; namespace WSECoreLib { /// /// 수집할 대상 사이트 /// [Serializable] public class Candidate { /// /// 사이트 주소 /// 가져오기 및 설정하기 /// public string Url { get; set; } /// /// Seed 사이트에서의 상대적 거리 /// 가져오기 및 설정하기 /// public int Depth { get; set; } /// /// 기본 생성자 /// public Candidate() { Url = string.Empty; Depth = 0; } /// /// 생성자 /// ///사이트 주소 ///Seed 사이트에서 상대적 깊이 public Candidate(string url,int depth) { Url = url; Depth = depth; } /// /// ToString 재정의 /// /// 사이트 주소 public override string ToString() { return Url; } } }
PostedUrl.cs
using System; namespace WSECoreLib { /// /// 수집한 웹 페이지 /// [Serializable] public class PostedUrl { /// /// 수집한 웹 페이지 주소 /// 가져오기 및 설정하기 /// public string Url { get; set; } /// /// 수집 요청한 원래 주소 /// 가져오기 및 설정하기 /// public string OriginUrl { get; set; } /// /// 페이지 제목 /// 가져오기 및 설정하기 /// public string Title { get; set; } /// /// 페이지 내용 /// 가져오기 및 설정하기 /// public string Content { get; set; } /// /// Seed 사이트에서 상대적 깊이 /// 가져오기 및 설정하기 /// public int Depth { get; set; } /// /// 수집한 DateTime /// 가져오기 및 설정하기 /// public DateTime PostedTime { get; set; } /// /// 기본 생성자 /// public PostedUrl() { Url = string.Empty; OriginUrl = string.Empty; Title = string.Empty; Content = string.Empty; Depth = 0; PostedTime = new DateTime(0); } /// /// 생성자 /// ///수집한 페이지 주소 ///수집 요청한 원래 주소 ///페이지 제목 ///페이지 내용 ///Seed 사이트에서 상대적 깊이 ///수집한 DateTime public PostedUrl(string url, string originurl, string title, string content, int depth, DateTime postedtime) { Url = url; OriginUrl = originurl; Title = title; Content = content; Depth = depth; PostedTime = postedtime; } /// /// ToString 재정의 /// /// 페이지 제목 public override string ToString() { return Title; } } }
Morpheme.cs
using System; namespace WSECoreLib { /// /// 형태소 /// [Serializable] public class Morpheme { /// /// 형태소 이름 /// 가져오기 및 설정하기 /// public string Name { get; set; } /// /// 참조 개수 /// 가져오기 및 설정하기 /// public int Count { get; set; } /// /// 기본 생성자 /// public Morpheme() { Name = string.Empty; Count = 0; } /// /// 생성자 /// ///형태소 이름 ///참조 개수 public Morpheme(string name, int count) { Name = name; Count = count; } /// /// ToString 재정의 /// /// 형태소 이름 public override string ToString() { return Name; } } }
InvertedElem.cs
using System; namespace WSECoreLib { /// /// 역 파일의 항목 /// [Serializable] public class InvertedElem { /// /// 사이트 주소 /// 가져오기 및 설정하기 /// public string Url { get; set; } /// /// 참조 개수 /// 가져오기 및 설정하기 /// public int RefCount { get; set; } /// /// 기본 생성자 /// public InvertedElem() { Url = string.Empty; RefCount = 0; } /// /// 생성자 /// ///사이트 주소 ///참조 개수 public InvertedElem(string url, int refcount) { Url = url; RefCount = refcount; } /// /// ToString 재정의 /// /// 사이트 주소 public override string ToString() { return Url; } } }
RankedUrl.cs
using System; namespace WSECoreLib { /// /// 순위화한 페이지 /// [Serializable] public class RankedUrl { PostedUrl postedurl; /// /// 수집한 페이지 /// 가져오기 /// public PostedUrl PUrl { get { return postedurl; } } /// /// 사이트 주소 /// 가져오기 /// public string Url { get { if (postedurl != null) { return postedurl.Url; } return string.Empty; } } /// /// 평가 점수 /// 가져오기 및 설정하기 /// public double Score { get; set; } /// /// 기본 생성자 /// public RankedUrl() { postedurl = null; Score = 0; } /// /// 생성자 /// ///수집한 페이지 ///평가 점수 public RankedUrl(PostedUrl purl, double score) { postedurl = purl; Score = score; } /// /// ToString 재정의 /// /// 페이지 제목 public override string ToString() { if (postedurl == null) { return string.Empty; } return postedurl.Title; } } }