빅데이터/빅데이터 with python

[빅데이터 python] 웹 검색 엔진 만들기 - 5. 수집한 웹 페이지 형태소 분석 및 역파일 생성하기

언제나휴일 2020. 11. 17. 12:25
반응형

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

 

[빅데이터/빅데이터 with python] - [빅데이터 python] 웹 검색 엔진 만들기 - 1. 웹 검색 엔진 소개

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

[빅데이터/빅데이터 with python] - [빅데이터 python] 웹 검색 엔진 만들기 - 3. MorphemeSql 클래스 정의

[빅데이터/빅데이터 with python] - [빅데이터 python] 웹 검색 엔진 만들기 - 4. InverseSql 클래스 정의

 

이번에는 웹 수집 로봇이 수집한 웹 페이지를 형태소 분석하고 이를 형태소 테이블 및 역파일 테이블에 추가하는 부분을 구현합시다.

 

1. 사용할 라이브러리

from CandidateSql import CandidateSql
from MorphemeSql import MorphemeSql
from WebPageSql import WebPageSql
from WebRobot import WebRobot
from InverseSql import InverseSql
from MorphemeParser import MorphemeParser

2. DoIt 함수 만들기 - 웹 수집하였을 때 수행하는 콜백 함수

수집한 웹 페이지 정보를 출력합니다.

def DoIt(url,depth,wp):
    print("{0}:{1}".format(wp.url,wp.title))

수집한 웹 페이지 제목과 본문을 형태소 분석합니다.

    m1 = MorphemeParser.Parse(wp.title)
    m2 = MorphemeParser.Parse(wp.description)

WebPage 테이블에 수집한 웹 페이지의 형태소 개수를 변경합니다.

    WebPageSql.UpdateMCnt(wp.url,len(m1)+len(m2))    

제목으로 분석한 결과와 본문으로 검색한 결과를 하나로 병합합니다.

    m1.extend(m2)
    m1 = MorphemeParser.Merge(m1)

사이트 주소로 웹 페이지 일련 번호(wid)를 얻어옵니다.

    wid = WebPageSql.FindWid(wp.url)

분석한 형태소 컬렉션의 각 형태소에 관하여 다음 작업을 반복합니다.

형태소 테이블에 추가하기

역파일 요소에 추가하기

형태소와 참조 개수 출력하기

    for mo in m1:
        MorphemeSql.AddMorpheme(mo)
        mid = MorphemeSql.FindMid(mo.word)
        InverseSql.AddInverseItem(wid,mid,mo.ref)
        print("{0}:{1}".format(mo.word,mo.ref))

3. 진입점 코드 작성하기

Seed 사이트를 입력받아 수집 후보 테이블에 등록합니다.

웹 로봇을 가동합니다. 

seed_url = input("Seed 사이트 주소(ex:http://sample.co.kr):")
CandidateSql.AddCandidate(seed_url,0)
WebRobot.CollectTM(5,DoIt)

4. 전체 코드

from CandidateSql import CandidateSql
from MorphemeSql import MorphemeSql
from WebPageSql import WebPageSql
from WebRobot import WebRobot
from InverseSql import InverseSql
from MorphemeParser import MorphemeParser

def DoIt(url,depth,wp):
    print("{0}:{1}".format(wp.url,wp.title))
    m1 = MorphemeParser.Parse(wp.title)
    m2 = MorphemeParser.Parse(wp.description)
    WebPageSql.UpdateMCnt(wp.url,len(m1)+len(m2))    
    m1.extend(m2)
    m1 = MorphemeParser.Merge(m1)
    wid = WebPageSql.FindWid(wp.url)
    for mo in m1:
        MorphemeSql.AddMorpheme(mo)
        mid = MorphemeSql.FindMid(mo.word)
        InverseSql.AddInverseItem(wid,mid,mo.ref)
        print("{0}:{1}".format(mo.word,mo.ref))

seed_url = input("Seed 사이트 주소(ex:http://sample.co.kr):")
CandidateSql.AddCandidate(seed_url,0)
WebRobot.CollectTM(5,DoIt)
반응형