이 장에서는 사람들이 단어 목록을 찾기 위해 많은 문서 집합을 검색할 수 있고, 그 문서들이 그 단어들과 얼마나 관련이 있는지에 따라 어떤 순위를 매길 수 있는 전체 텍스트 검색 엔진을 다룬다. 전체 텍스트 검색을 위한 알고리즘은 가장 중요한 집단 지능 알고리즘 중 하나이며, 이 분야의 새로운 아이디어에 의해 많은 행운이 이루어졌다. 구글이 학술 프로젝트에서 세계에서 가장 인기 있는 검색 엔진으로 급부상한 것은 이 장에서 배울 수 있는 변화인 PageRank 알고리즘에 크게 근거한 것이라고 널리 알려져 있다.


정보 검색은 오랜 역사를 가진 거대한 분야다. 이번 챕터에서는 몇 가지 핵심 개념만 다룰 수 있을 뿐이지만, 우리는 일련의 문서를 색인화하는 검색 엔진의 구축 과정을 거치고, 당신에게 상황을 더 개선할 수 있는 방법에 대한 아이디어를 남길 것이다. 비록 웹의 많은 부분을 색인화하기 위한 인프라 요구사항보다는 검색과 순위를 위한 알고리즘에 초점을 맞추겠지만, 당신이 구축한 검색 엔진은 최대 10만 페이지까지 수집하는데 문제가 없어야 한다. 이 챕터 내내, 여러분은 한 페이지씩 기어다니고, 색인화하고, 검색하는 데 필요한 모든 단계를 배울 것이고, 심지어 그 결과의 순위를 여러 가지 다른 방식으로 매길 것이다.


검색 엔진에 무엇이 들어 있는가?

검색엔진을 만드는 첫 번째 단계는 문서를 수집하는 방법을 개발하는 것이다. 경우에 따라서는 기어다니는 것(작은 문서 세트에서 시작하여 다른 문서로 연결되는 링크에서)이 포함될 것이고, 다른 경우에는 기업 인트라넷에서 고정된 문서 모음으로 시작할 것이다.


서류를 수집한 후에는 색인을 찍어야 한다. 이것은 보통 문서의 큰 표와 모든 다른 단어의 위치를 만드는 것을 포함한다. 특정 응용프로그램에 따라, 문서 자체는 데이터베이스에 저장되어야 하는 것은 아니다; 색인은 단순히 그들의 위치에 참조(파일 시스템 경로나 URL 등)를 저장해야 한다.


마지막 단계는 물론 질의에서 순위의 문서 목록을 반환하는 것이다. 모든 문서를 특정 단어 세트로 검색하는 것은 일단 색인이 있으면 꽤 간단하지만, 진짜 마법은 결과가 어떻게 분류되는가에 있다. 엄청난 수의 지표가 생성될 수 있으며, 분류 순서를 변경하기 위해 수정할 수 있는 방법에는 부족함이 없다. 단지 모든 다른 측정지표를 배우는 것만으로 여러분은 큰 검색 엔진들이 여러분이 더 많은 검색 엔진들을 통제할 수 있기를 바랄 것이다. 본 장에서는 워드 빈도 등 페이지 내용에 근거한 몇 가지 지표를 살펴본 다음, 다른 페이지가 해당 페이지로 연결되는 방법을 살펴보는 PageRank 알고리즘과 같이 페이지 내용에 외부적인 정보에 근거한 지표를 다룬다.


마지막으로, 당신은 질의 순위를 매기기 위한 신경망을 구축할 것이다. 신경망은 사람들이 검색 결과 목록을 얻은 후 클릭하는 링크에 기초하여 검색을 결과와 연결하는 법을 배울 것이다. 신경망은 이 정보를 이용하여 사람들이 과거에 클릭했던 것을 더 잘 반영하기 위해 결과의 순서를 바꿀 것이다.


이 장의 예를 살펴보려면 surchenuine이라는 파이선 모듈을 만들어야 하는데, 하나는 데이터베이스를 기어다니기 위한 것과 다른 하나는 데이터베이스를 쿼리하여 전체 텍스트 검색을 수행하는 두 가지 클래스를 가지고 있다. 이 예제에서는 SQLite를 사용할 것이지만 기존의 클라이언트-서버 데이터베이스와 함께 작동하도록 쉽게 조정할 수 있다.


심플 크롤러

나는 일단 당신이 당신의 하드 드라이브에 많은 HTML 문서 모음을 가지고 있지 않다고 가정할 것이다. 그래서 나는 당신에게 간단한 크롤러를 만드는 방법을 보여줄 것이다. 인덱싱할 작은 페이지 세트로 시딩되며, 그 페이지의 링크에 따라 다른 페이지도 찾을 수 있다. 이 과정을 기어다니기 또는 사색이라고 한다.


이렇게 하려면, 당신의 코드는 페이지를 다운로드하고, 그것을 인덱서(다음 섹션에서 작성할 것)에 전달하고, 다음에 기어야 할 페이지에 대한 모든 링크를 찾기 위해 페이지를 구문 분석해야 할 것이다. 다행히도, 이 과정을 도울 수 있는 몇 개의 도서관이 있다.


원하는 페이지마다 자유롭게 크롤러를 실행할 수 있지만, 이 장의 크롤러와 결과를 비교하려면 이 사이트를 사용하자.


urllib2 사용

urllib2는 페이지를 다운로드하기 쉽게 해주는 Python과 함께 묶인 라이브러리다. URL을 제공하기만 하면 된다. 이 섹션에서 이 페이지를 사용하여 인덱싱할 페이지를 다운로드한다. 실제 작업을 보려면 Python 변환기를 시작하고 다음을 시도해 보자.


>> import urllib2

>> c=urllib2.urlopen('http://kiwitobes.com/wiki/Programming_language.html')

>> contents=c.read( )

>> print contents[0:50]

'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans'


페이지의 HTML 코드를 문자열에 저장하려면 연결을 만들고 내용을 읽기만 하면 된다.

  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기