[빅데이터 python] 웹 검색 엔진 만들기 – 2. 형태소 및 Inverse 테이블 정의

안녕하세요. 언제나휴일입니다.

앞에서 수집할 웹 페이지 후보 테이블(Candidate)와 수집한 웹 페이지 테이블(WebPage)을 만들었어요.

Candidate 테이블 디자인 모습
[그림] WebPage 테이블 디자인 모습

1. Morpheme – 형태소 테이블 만들기

Morpheme 테이블 디자인 모습
Morpheme 테이블 디자인 모습
CREATE TABLE [dbo].[Morpheme] (
     [mid] INT IDENTITY (1, 1) NOT NULL,
     [word] VARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([mid] ASC), 
     CONSTRAINT [WU] UNIQUE NONCLUSTERED ([word] ASC) 
);

형태소 테이블에는 형태소(word)와 일련 번호(mid)를 멤버로 갖습니다.

일련 번호를 주요 키로 설정하고 형태소는 유일하게 제약 조건을 추가하였습니다.

2. Inverse – 역(파일) 테이블 만들기

수집한 웹 페이지가 많아지면 검색 질의를 모든 웹 페이지 내용과 비교하는 것은 매우 많은 시간을 요구합니다. 짧은 시간에 검색이 가능하게 하기 위해 질의에 있는 단어에 해당하는 형태소 테이블의 mid를 구합니다. 그리고 Inverse 테이블에 mid로 어느 웹 페이지(wid)에 있는지 확인합니다.

이처럼 포함하는 웹 페이지의 내용과 비교하여 검색하는 것이 아니라, 단어에서부터 어느 웹 페이지에 해당 단어가 있는지 검색하여 역파일이라고 부릅니다.

Inverse 테이블 디자인 모습
Inverse 테이블 디자인 모습
CREATE TABLE [dbo].[Inverse] (
    [wid] INT NOT NULL, [mid] INT NOT NULL,
    [rcnt] INT NOT NULL, CONSTRAINT [FK_Inverse_News] FOREIGN KEY ([wid]) REFERENCES [dbo].[WebPage] ([wid]),
    CONSTRAINT [FK_Inverse_Morpheme] FOREIGN KEY ([mid]) REFERENCES [dbo].[Morpheme] ([mid]) 
);

역파일 테이블에는 형태소 일련 번호(mid), 웹 페이지 일련 번호(wid)를 갖습니다. 이는 외래키로 관계를 설정합니다.

그리고 웹 페이지 내에 해당 형태소가 몇 번 나오는 지 참조 개수(rcnt)를 멤버로 갖습니다.