시멘틱 웹 검색 서비스 프로젝트 6. Core 라이브러리 만들기 [데이터분석 with C#]

안녕하세요. 언제나 휴일에 언휴예요.

이번 강의에서는 웹 검색 서비스 프로젝트의 Core 라이브러리를 만들어요.

여러 컴포넌트에서 공통으로 사용할 형식을 정의하는 것이예요.

이러한 형식이 필요하다는 것을 아키텍쳐링 및 설계 과정에서 도출하는 것이 어렵지 구현은 별 다른 것이 없어요.

WSE Core 클래스 라이브러리
그림 . WSE 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;
        }
    }
}