안녕하세요. 언제나 휴일에 언휴예요.
이번 강의에서는 웹 검색 서비스 프로젝트의 Core 라이브러리를 만들어요.
여러 컴포넌트에서 공통으로 사용할 형식을 정의하는 것이예요.
이러한 형식이 필요하다는 것을 아키텍쳐링 및 설계 과정에서 도출하는 것이 어렵지 구현은 별 다른 것이 없어요.

웹 검색 서비스에서는 수집할 사이트(Candidate), 수집한 사이트 정보(PostedUrl), 형태소(Morpheme), 형태소를 포함하는 사이트를 역 추적할 수 있는 역파일 요소(InvertedElem), 검색 결과를 TF-IDF 방식으로 점수화한 사이트 정보(RankedUrl)가 필요합니다.
이 부분은 클래스 라이브러리(.NET Framework)로 만들거예요.
Candidate.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using System; namespace WSECoreLib { /// <summary> /// 수집할 대상 사이트 /// </summary> [Serializable] public class Candidate { /// <summary> /// 사이트 주소 /// 가져오기 및 설정하기 /// </summary> public string Url { get; set; } /// <summary> /// Seed 사이트에서의 상대적 거리 /// 가져오기 및 설정하기 /// </summary> public int Depth { get; set; } /// <summary> /// 기본 생성자 /// </summary> public Candidate() { Url = string.Empty; Depth = 0; } /// <summary> /// 생성자 /// </summary> /// <param name="url">사이트 주소</param> /// <param name="depth">Seed 사이트에서 상대적 깊이</param> public Candidate(string url,int depth) { Url = url; Depth = depth; } /// <summary> /// ToString 재정의 /// </summary> /// <returns>사이트 주소</returns> public override string ToString() { return Url; } } } |
PostedUrl.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
using System; namespace WSECoreLib { /// <summary> /// 수집한 웹 페이지 /// </summary> [Serializable] public class PostedUrl { /// <summary> /// 수집한 웹 페이지 주소 /// 가져오기 및 설정하기 /// </summary> public string Url { get; set; } /// <summary> /// 수집 요청한 원래 주소 /// 가져오기 및 설정하기 /// </summary> public string OriginUrl { get; set; } /// <summary> /// 페이지 제목 /// 가져오기 및 설정하기 /// </summary> public string Title { get; set; } /// <summary> /// 페이지 내용 /// 가져오기 및 설정하기 /// </summary> public string Content { get; set; } /// <summary> /// Seed 사이트에서 상대적 깊이 /// 가져오기 및 설정하기 /// </summary> public int Depth { get; set; } /// <summary> /// 수집한 DateTime /// 가져오기 및 설정하기 /// </summary> public DateTime PostedTime { get; set; } /// <summary> /// 기본 생성자 /// </summary> public PostedUrl() { Url = string.Empty; OriginUrl = string.Empty; Title = string.Empty; Content = string.Empty; Depth = 0; PostedTime = new DateTime(0); } /// <summary> /// 생성자 /// </summary> /// <param name="url">수집한 페이지 주소</param> /// <param name="originurl">수집 요청한 원래 주소</param> /// <param name="title">페이지 제목</param> /// <param name="content">페이지 내용</param> /// <param name="depth">Seed 사이트에서 상대적 깊이</param> /// <param name="postedtime">수집한 DateTime</param> 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; } /// <summary> /// ToString 재정의 /// </summary> /// <returns>페이지 제목</returns> public override string ToString() { return Title; } } } |
Morpheme.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using System; namespace WSECoreLib { /// <summary> /// 형태소 /// </summary> [Serializable] public class Morpheme { /// <summary> /// 형태소 이름 /// 가져오기 및 설정하기 /// </summary> public string Name { get; set; } /// <summary> /// 참조 개수 /// 가져오기 및 설정하기 /// </summary> public int Count { get; set; } /// <summary> /// 기본 생성자 /// </summary> public Morpheme() { Name = string.Empty; Count = 0; } /// <summary> /// 생성자 /// </summary> /// <param name="name">형태소 이름</param> /// <param name="count">참조 개수</param> public Morpheme(string name, int count) { Name = name; Count = count; } /// <summary> /// ToString 재정의 /// </summary> /// <returns>형태소 이름</returns> public override string ToString() { return Name; } } } |
InvertedElem.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using System; namespace WSECoreLib { /// <summary> /// 역 파일의 항목 /// </summary> [Serializable] public class InvertedElem { /// <summary> /// 사이트 주소 /// 가져오기 및 설정하기 /// </summary> public string Url { get; set; } /// <summary> /// 참조 개수 /// 가져오기 및 설정하기 /// </summary> public int RefCount { get; set; } /// <summary> /// 기본 생성자 /// </summary> public InvertedElem() { Url = string.Empty; RefCount = 0; } /// <summary> /// 생성자 /// </summary> /// <param name="url">사이트 주소</param> /// <param name="refcount">참조 개수</param> public InvertedElem(string url, int refcount) { Url = url; RefCount = refcount; } /// <summary> /// ToString 재정의 /// </summary> /// <returns>사이트 주소</returns> public override string ToString() { return Url; } } } |
RankedUrl.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
using System; namespace WSECoreLib { /// <summary> /// 순위화한 페이지 /// </summary> [Serializable] public class RankedUrl { PostedUrl postedurl; /// <summary> /// 수집한 페이지 /// 가져오기 /// </summary> public PostedUrl PUrl { get { return postedurl; } } /// <summary> /// 사이트 주소 /// 가져오기 /// </summary> public string Url { get { if (postedurl != null) { return postedurl.Url; } return string.Empty; } } /// <summary> /// 평가 점수 /// 가져오기 및 설정하기 /// </summary> public double Score { get; set; } /// <summary> /// 기본 생성자 /// </summary> public RankedUrl() { postedurl = null; Score = 0; } /// <summary> /// 생성자 /// </summary> /// <param name="purl">수집한 페이지</param> /// <param name="score">평가 점수</param> public RankedUrl(PostedUrl purl, double score) { postedurl = purl; Score = score; } /// <summary> /// ToString 재정의 /// </summary> /// <returns>페이지 제목</returns> public override string ToString() { if (postedurl == null) { return string.Empty; } return postedurl.Title; } } } |