크롤러, 인덱서, 쿼리엔진, 페이지랭킹, 신경망(Neural Network)
(1) 검색 엔진이란?
- 문서 수집 개발(크롤링 포함 여부, 고정된 문서 컬렉션으로 시작하는 경우도 있음)
- 문서를 모은 후에는 색인을 함(여러 다른 단어들의 위치와 문서들을 담는 테이블을 만듬)
- 색인에는 파일 시스템 경로나 URL과 같이 문서 위치에 대한 참조만 저장
- 질의에 대해 랭킹된 문서 목록을 찾아서 돌려줌

(2) 단순 크롤러
urllib2 - 페이지들을 쉽게 다운로드 받을 수 있게 해주는 파이썬 번들 라이브러리
크롤러 코드 - Beautiful Soup API(웹페이지의 구조적 표현을 만드는 멋진 라이브러리)

(3) 색인하기
색인이란 단어 목록으로, 그 단어가 나타난 문서와 그 문서 안에서 나타난 위치를 가짐
SQLite를 사용하여 색인을 저장함

- 스키마 설정하기
1) urllist - 색인된 URL목록을 가짐
2) wordlist - 단어 목록을 가짐
3) wordlocation - 문서들 내의 단어 위치 목록을 가짐
4) link table - 한테이블에서 다른 테이블로의 연결을 가리키는 두 개의 URL ID를 저장
5) linkwords - wordid와 linkid칼럼을 사용해서 링크에서 실제 사용된 단어들을 저장

- 페이지 내 단어 찾기
soup를 사용해서 텍스트 노드를 찾고 그들의 내용을 모음
문자열을 단어 목록으로 분리하여 색인에 넣을 수 있도록 한다.

- 색인에 넣기
이전 절에서 만든 두개의 함수를 호출하여 페이지 내 단어 목록을 얻는다.
그런 후 페이지와 단어들을 색인에 추가하고 문서 내 단어 위치와 연결을 생성

(4) 검색하기
검색엔진의 검색부 만들기
검색어 문자열을 받아 개별 단어로 분리한 후 모든 다른 단어들을 담고 있는 URL들만 선별하도록 SQL쿼리를 생성하는 검색 함수

(5) 내용 기반 랭킹
주어진 검색어에 대해 페이지에 점수를 매기고 가장 높은 점수를 가진 결과들을 먼저 리턴함

- 검색어와 페이지 내용을 기반으로 점수를 계산하는 여러 방법
각각에 Weight를 주고 계산함
1) 단어 빈도 - 해당 페이지에 검색어 내 단어들이 출현한 횟수를 기반으로 페이지의 점수를 매김
2) 문서 내 위치 - 페이지 상단 가까이나 제목 줄에 나타남
3) 단어 거리 - 페이지에서 서로 가까이 붙어 있는 결과들을 찾는 것들이 유용할 때가 많음

- 정규화 함수
모든 결과를 동일한 범위와 방향으로 맞춤
ID와 점수로 된 딕셔너리를 받아 같은 ID로 0과 1사이의 점수만을 가진 새로운 딕셔너리를 리턴함

(6) 유입 링크 사용

- 단순 계산
각 페이지의 유입 링크 개수를 세고 링크 전체 개수를 페이지에 대한 지표로 사용하는 것
누군가 점수를 높이고 싶은 페이지를 참조하는 여러 사이트들을 마들어 그들이 원하는 페이지의 점수를 쉽게 높일 수 있음

- 페이지랭크 알고리즘
구글의 창업자에 의해 발명됨
페이지마다 점수를 할당함 - 그 페이지에 대한 링크를 가진 다른 페이지들의 중요도와 각각의 다른 페이지들이 가지고 있는 링크 수로 계산됨
모든 페이지랭크 값을 초기에 임의의 값으로 놓고 여러 번 반복 계산함(20번 정도)


- 링크 텍스트 활용
링크를 걸 때 페이지에 남긴 간락한 설명을 이용

(7) 클릭 학습
인공 신경망 구축 - 검색어 안에 있는 단어들과 사용자에게 제공된 검색 결과, 사용자가 클릭한 것으로 학습됨

- 클릭 추적 네트워크 설계
MLP네트워크(다중충 인식망) :

신고
Posted by 공놀이나하여보세