8. 1 역 파일 생성기 예광탄 만들기

먼저 분석하기 버튼 클릭 이벤트 핸들러를 추가합니다.

private void btn_parse_Click(object sender, EventArgs e)

컨트롤에 입력한 정보를 이용하여 수집한 웹 페이지 정보 개체를 생성합니다. 여기에서 입력하는 것은 가상의 데이터입니다. 부분적으로 단위 테스트를 하기 위해 가상의 데이터를 입력하는 것입니다.

PostedUrl purl = new PostedUrl();
purl.Title = tbox_title.Text;
purl.Url = tbox_paddr.Text;
purl.OriginUrl = tbox_oaddr.Text;
purl.Depth = (int)nud_depth.Value;
purl.PostedTime = dtp_posted.Value;
purl.Content = tbox_content.Text;

이미 작성한 형태소 분석기 라이브러리를 참조하여 정적 클래스 MorphemeParser의 메서드 Parse를 이용하여 페이지의 컨텐츠 내용을 분석합니다.

List<Morpheme> list = MorphemeParser.Parse(purl.Content);

분석한 결과를 결과 창에 출력합니다. 이 부분은 별도의 메서드로 작성합시다.

AddMorpheme(list);

마지막으로 검색한 결과로 역 파일을 만듭니다. 역 파일을 만드는 것은 역 파일 라이브러리로 만들 것이므로 여기에서는 라이브러리에 만들 클래스를 미리 만들어서 사용합시다. 역 파일 라이브러리는 예광탄 설명 뒤에 별도로 설명할게요.

InvFileMaker.MakeInvFile(purl.Url, list);

분석한 결과를 출력하는 메서드를 작성합시다.

private void AddMorpheme(List<Morpheme> list)

먼저 결과를 출력할 리스트 컨트롤의 아이템 항목을 지워줍니다.

lv_result.Items.Clear();

입력 인자로 받은 형태소 목록의 각 항목을 리스트 컨트롤 항목으로 생성하여 목록에 추가합니다.

ListViewItem lvi = null;
foreach (Morpheme mo in list)
{
    lvi = new ListViewItem(
               new string[2] { mo.Name, mo.Count.ToString() });
    lv_result.Items.Add(lvi);
}

이번에는 역 파일 참조 버튼 클릭 이벤트 핸들러를 추가하세요.

private void btn_ref_inv_Click(object sender, EventArgs e)

먼저 역 파일 상세 목록을 지워줍니다.

lv_mo_site.Items.Clear();

검색을 위해 만든 WSEForSearch 라이브러리를 참조하여 EHDbmForSearch 정적 클래스의 GetInvertedFile 메서드를 이용하여 역 파일 목록을 얻어옵니다.

List<InvertedElem> list = null;
list = EHDbmForSearch.GetInvertedFile(tbox_mname.Text);

얻어온 목록으로 리스트 뷰 컨트롤 항목을 생성하여 목록에 추가합니다.

ListViewItem lvi = null;
foreach (InvertedElem ie in list)
{
    lvi = new ListViewItem(
                new string[2] { ie.Url, ie.RefCount.ToString() });
    lv_mo_site.Items.Add(lvi);
}

▷ MainForm.cs

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using WSE_Core;
using MorphemeParserLib;
using DBMForSearchLib;
using InvFileMakerLib;
 
namespace InvFileMaker_예광탄
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        } 
        private void btn_parse_Click(object sender, EventArgs e)
        {
            PostedUrl purl = new PostedUrl();
            purl.Title = tbox_title.Text;
            purl.Url = tbox_paddr.Text;
            purl.OriginUrl = tbox_oaddr.Text;
            purl.Depth = (int)nud_depth.Value;
            purl.PostedTime = dtp_posted.Value;
            purl.Content = tbox_content.Text;
 
            List<Morpheme> list = MorphemeParser.Parse(purl.Content);
            AddMorpheme(list);
            InvFileMaker.MakeInvFile(purl.Url, list);
        } 
        private void AddMorpheme(List<Morpheme> list)
        {
            lv_result.Items.Clear();

            ListViewItem lvi = null; 
            foreach (Morpheme mo in list)
            {
                lvi = new ListViewItem(
                    new string[2] { mo.Name, mo.Count.ToString() });
                lv_result.Items.Add(lvi);
            }
        }
 
        private void btn_ref_inv_Click(object sender, EventArgs e)
        {
            lv_mo_site.Items.Clear();
 
            List<InvertedElem> list = null;
            list = EHDbmForSearch.GetInvertedFile(tbox_mname.Text);
 
            ListViewItem lvi = null;
            foreach (InvertedElem ie in list)
            {
                lvi = new ListViewItem(
                    new string[2] { ie.Url, ie.RefCount.ToString() });
                lv_mo_site.Items.Add(lvi);
            }
        }
    }
}