SlideShare a Scribd company logo
1 of 35
Download to read offline
May 15, 2015
Ian Y. Choi
2
• iPython notebook file
• h"ps://goo.gl/WU8hS0	
  
• Data files (including iPython notebook
file)
• h"ps://goo.gl/HvE7lb	
  
3
목차
•  Section 1: 검색엔진이란?
•  Section 2: 단순 크롤러
•  Section 3: 색인하기
•  Section 4: 검색하기
•  Section 5: 내용 기반 랭킹
•  Section 6: 유입 링크 사용하기
•  Section 7: 클릭 학습
•  (Section 8: 함께 풀어보기)
4
0. Before Diving into… - (1)
•  정보 검색 (Information retrieval)
•  정보 자원의 집합으로부터 필요로 하는 정보에 적합한 정보 자원을 얻는 행동
(from Wikipedia)
•  검색엔진
•  사람들이 입력한 단어 몇 개로 많은 문서들을 찾고 그 단어들에 가장 연관도가 높은 순으로
결과를 정렬 (from 스터디 교재)
•  인터넷의 발전과 함께 웹 (WWW, World-Wide Web)의 정보를 효율적으로 검색하기 위한
다양한 검색엔진들이 등장 & 발전
6
검색엔진
•  검색엔진 (Search Engine) 만들기
문서 수집 방법 색인 랭킹 신경망
•  크롤링 (crawling)
•  고정 문서 컬렉션
(예: 기업 인트라넷)
•  데이터베이스 이용
: 단어 위치 / 문서 저
장
•  문서 위치 참조
(reference)만 저장
: 파일 시스템 경로,
URL
•  Magic
: 결과 정렬 방식!
•  페이지랭크
(PageRank) 알고리
즘
•  클릭한 링크를 기반
으로 검색어와 결과
간의 연관 정도 학습
•  과거에 많이 클릭했
던 것이 더 상위에 위
치하도록 순서 변경
7
Python 모듈: searchengine
•  85-86p: 크롤링 기능에 대해 Python 클래스 구조를 작성
크롤러 (Crawler)
[내부 작업]
__init__()
__del__()
dbcommit()
getentryid()
addtoindex()
gettextonly()
separatewords() isindexed()
addlinkref()
crawl()
createindextables()
항목 번호를 얻고 등재되지 않았다면 추가
개별 페이지를 색인함
HTML 페이지에서 텍스트 추출함
공백문자가 아닌 문자들로
단어 분리
이미 색인한 주소인지 확인
두 페이지간 링크 추가
페이지 목록에서 depth까지
색인
데이터베이스 테이블 생성
(sqlite)
색인 데
이터
9
단순 크롤러
•  크롤링 (Crawling) / 스파이더링 (Spidering)
•  색인할 작은 페이지 집합에서 시작하여 페이지 내 링크를 따라 다른 페이지들을 반복해서 찾
는 과정
•  Beautiful Soap
•  웹 페이지를 파싱하고 구조적 표현을 생성하는 라이브러리
•  “pip install beautifulsoup4” è 사용시 “from BeautifulSoup” à “from bs4”
•  참고: Canopy에는 이미 포함되어 있을수도?
10
참고: 크롤링
•  영화 정보 일부 가져와 사용하기
http://developer.naver.com/wiki/pages/SrchMovie
- Naver 검색 API: 하루 최대 25,000개 요청 제한
12
Sqlite란
•  Sqlite
•  파일을 데이터베이스로 사용 가능하게 함
•  Pysqlite
•  Python에서 sqlite를 사용 가능하게 하는 라이브러리
•  Canopy에 포함되어 있지 않아 추가 설치 필요
13
Sqlite 관련 클래스 내 코드
•  클래스 searchengine
•  클래스 사용 시작시에 지정한
DB 파일과 연결
•  클래스 사용 종료시 DB 파일 사용 종료
•  dbcommit 함수 실행하면
DB 파일에 커밋 (기록)
def	
  __init__(self,dbname):	
  
	
  	
  self.con=sqlite.connect(dbname)	
  
def	
  __del__(self):	
  
	
  	
  self.con.close()	
  
def	
  dbcommit(self):	
  
	
  	
  self.con.commit()	
  
크롤러
(Crawler)
크롤러 사
용 시작
전 실행
크롤러 다
사용하면
실행
DB에 기
록
(sqlite) 함
수
함
수
함
수…
크롤링
데이터
14
스키마 설정하기
색인된 URL 목록
단어 목록
문서들 내의 단어
위치 목록
[문서 간 링크]
한 테이블에서 다
른 테이블로의 연
결을 가리키는 2
개의 URL ID 저
장
[문서 간 링크]
링크에서 사용된
단어들을 저장
15
페이지 내 단어 찾기
•  gettextonly 함수
•  Argument: soup 객체
•  What to do: Soup을 사용해서 텍스트 노드를 찾고 내용 모으기
•  separatewords 함수
•  Argument: text
•  What to do: 텍스트를 단어별로 구분한 리스트를 반환
•  참고: W è 알파벳이나 소문자를 제외한 문자 (정규 표현식)
•  Python에서는  로 써야 정규 표현식으로 인식함 à W* è W* (*은 0개 이상을 의미)
•  본인의 경우 “import re”를 해야 했음 (https://docs.python.org/2/library/re.html)
•  참고: 스테밍 (stemming) 알고리즘
•  단어를 어근 (stem)으로 변환
•  예: indexing à index
•  “index” 단어를 검색할 때, “indexing”도 나오게 하기 위함
16
참고: 스테머 (Stemmer)
Source: http://konlpy.orgSource: Michael L. Nelson, “Collective Intelligence
– Week 3: Crawling, Searching, Ranking”
17
색인에 넣기
•  addtoindex 함수
•  Argument: url, soup
•  What to do: soup 객체로부터 텍스트를, 텍스트로부터 단어를 가져와 “(url, 단어들)” 정보
를 색인에 추가
•  getentryid 함수
•  Argument: table, field, value, createNew
•  What to do: “table”에서 field가 value인 ID값을 찾아 반환, 없으면 추가
•  isindexed 함수
•  Argument: url
•  What to do: URL이 이미 색인되어 데이터베이스에 저장되어 있는지 확인
19
검색 클래스: searcher
•  크롤링된 데이터를 기반으로 “복합어 검색”을 수행하는
역할을 하는 클래스
검색 (Searcher)
[내부 작업]
__init__()
__del__()
dbcommit()
getmatchrows()
스페이스바로 구분된 단어들을 기반으로 색인 데이터에
서 검색 수행하여 결과 행 반환
(sqlite)(sqlite)
색인 데
이터
20
참고: 테이블과 테이블의 관계 à join
22
내용 기반 랭킹이란?
•  이제까지 구현한 검색결과: 단순 크롤링된 순서
•  문서 관련성 등에 ‘가중치’ (weight)를 두어 먼저 나오도록 조정이 필요
•  ‘가중치’ 점수 지표
•  단어 빈도
•  단어가 많이 나올수록 결과 먼저
•  문서 내 위치
•  문서 핵심 주제가 도입부에 있을 가능성이 높음
•  단어 거리
•  검색 단어들이 가까이 있을 경우 찾고자 하는 문서일 확률이 높음
23
검색 클래스: 가중치 관련 함수 추가/수정
•  가중치 값과 함께 결과 출력
검색 (Searcher)
[내부 작업]
__init__()
__del__()
dbcommit()
getmatchrows()
스페이스바로 구분된 단어들을 기반
으로 색인 데이터에서 검색 수행하여
결과 행 반환
(sqlite)(sqlite)
색인 데
이터
getscoredlist()
가중치를 고려해 점수를 곱하여
전체 결과 반환
geturlname()
query()
Urlid로 url 이름을 찾아 반환
1.  getmatchrows 호출해 검색
2.  getscoredlist 호출해 가중치 계산된 내용
가져옴
3.  결과를 역순으로 정렬 (점수 높을수록 결과
처음에 나오게 하기)
4.  각 결과를 geturlname 사용해 정보 출력
24
검색 클래스: 정규화 & 가중치 함수
•  정규화 함수
•  가중치를 계산하는 ‘단어 빈도’, ‘문서 내 위치’, ‘단어 거리’ 등이 모두 0~1 사이의 값이 나타
나도록 하기
•  구현: normalizescores 함수
•  가중치 함수
•  단어 빈도
•  문서 내 위치
•  단어 거리
26
PageRank 알고리즘
•  예 (damping factor: 0.85)
•  PR (A) = 0.15 + 0.85 * ( PR(B) / links(B) +
PR(C)/links(C) + PR(D)/links(D) )
= 0.15 + 0.85 * (0.5/4+0.7/5+0.2/1)
= 0.15 + 0.85 * (0.125 + 0.14 + 0.2)
= 0.54525
28
신경망 – 뇌 (Brain)
The brain is a highly complex, nonlinear, and
parallel computer (information processing system)
The brain consists of neurons (small information
Processing units)
The brain performs much faster computations
(e.g., pattern recognition, perception, motor control)
Than the fastest digital computer in existence today.
Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
29
신경망 – Neural Computation (Neural
Networks)
A neural network is a machine that is designed to
model the way in which the brain performs a particular
task of function of interest.
Neural networks employ a massive interconnections of
Simple computing cells referred to as neurons.
Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
30
신경망 – 뉴런 (Neuron)
dendrite
nucleus
axon
pre/post
synaptic
수상돌기
핵
축색
시냅스 전/후부
Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
31
신경망 ~> 인공신경망 (artificial neural
networks)
input
Hidden layer
output
Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
32
인공신경망
클릭 학습 (Learning from Clicks)
•  클릭 학습을 구현하려면?
•  색인 단어들을 통해 학습되지 않은 인
공신경망을 먼저 만들기
•  네트워크 연결 활성화 & 출력까지 연
결
•  전방전파 알고리즘
(feedforward)
•  검색 결과 + 사용자 클릭을 반영한 학
습
•  역전파 학습
(backpropagation)
•  검색 엔진에 연결
웹
(데이터베이
스)
[입력]
검색단어
[출력]
검색결과
검색
(rel.)
(rel.)
word
word
url
[입력]
검색단어
[출력]
검색결과
input
Hidden
layer
output
33
클릭학습 예시: 학습을 통한 노드 결과
34
참고: 쌍곡선함수 (Hyperbolic 함수)
Finished!

More Related Content

What's hot

Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack주표 홍
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5Mungyu Choi
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Gruter
 
201804 neo4 j_cypher_guide
201804 neo4 j_cypher_guide201804 neo4 j_cypher_guide
201804 neo4 j_cypher_guideJunyi Song
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민NAVER D2
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱정석 양
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Gruter
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육 Rjs Ryu
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialSangwon Lee
 
스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWS스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWSGruter
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.jsHeeJung Hwang
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)Sang-bae Lim
 

What's hot (20)

Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
Feature perf comp_v1
Feature perf comp_v1Feature perf comp_v1
Feature perf comp_v1
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
201804 neo4 j_cypher_guide
201804 neo4 j_cypher_guide201804 neo4 j_cypher_guide
201804 neo4 j_cypher_guide
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
[ 하코사세미나] 의외로 쉬운 D3 그래프 퍼블리싱
 
Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)Big data analysis with R and Apache Tajo (in Korean)
Big data analysis with R and Apache Tajo (in Korean)
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 Trial
 
스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWS스타트업사례로 본 로그 데이터분석 : Tajo on AWS
스타트업사례로 본 로그 데이터분석 : Tajo on AWS
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)Spark Day 2017@Seoul(Spark Bootcamp)
Spark Day 2017@Seoul(Spark Bootcamp)
 

Viewers also liked

Amazon EC2 Container Service in Action
Amazon EC2 Container Service in ActionAmazon EC2 Container Service in Action
Amazon EC2 Container Service in ActionRemotty
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS IntroductionRemotty
 
세미나
세미나세미나
세미나Dongyi Kim
 
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기Baekjoon Choi
 
Mesos on coreOS
Mesos on coreOSMesos on coreOS
Mesos on coreOS충섭 김
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영창훈 정
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스NAVER D2
 
네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐NAVER D2
 
1.openseminar
1.openseminar1.openseminar
1.openseminarNAVER D2
 
2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태NAVER D2
 

Viewers also liked (13)

Amazon EC2 Container Service in Action
Amazon EC2 Container Service in ActionAmazon EC2 Container Service in Action
Amazon EC2 Container Service in Action
 
RancherOS Introduction
RancherOS IntroductionRancherOS Introduction
RancherOS Introduction
 
Docker orchestration
Docker orchestrationDocker orchestration
Docker orchestration
 
세미나
세미나세미나
세미나
 
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
 
Mesos on coreOS
Mesos on coreOSMesos on coreOS
Mesos on coreOS
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스
 
Arcus
ArcusArcus
Arcus
 
네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐
 
1.openseminar
1.openseminar1.openseminar
1.openseminar
 
Docker toolbox
Docker toolboxDocker toolbox
Docker toolbox
 
2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태
 

Similar to 집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking

[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic
[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic
[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital ForensicDonghyun Kim
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개Jaewook Byun
 
집단지성 프로그래밍 04-검색과 랭킹-02
집단지성 프로그래밍 04-검색과 랭킹-02집단지성 프로그래밍 04-검색과 랭킹-02
집단지성 프로그래밍 04-검색과 랭킹-02Kwang Woo NAM
 
Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)
Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)
Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)hkh
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3in2acous
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho Woo
 
Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentationJae-yeol Lee
 
Django - CRUD 기능 구현
Django - CRUD 기능 구현Django - CRUD 기능 구현
Django - CRUD 기능 구현Jessica Lee
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020Jinwoong Kim
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWSKRUG - AWS한국사용자모임
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017Daesung Park
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSSukwoo Lee
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기nexusz99
 
웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동Yu Yongwoo
 
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드Yu Yongwoo
 
[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScienceNAVER D2
 

Similar to 집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking (20)

[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic
[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic
[PyCon KR 2018] 진실은 언제나 하나! : Python으로 만나보는 Digital Forensic
 
Linked Open Data
Linked Open DataLinked Open Data
Linked Open Data
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개
 
집단지성 프로그래밍 04-검색과 랭킹-02
집단지성 프로그래밍 04-검색과 랭킹-02집단지성 프로그래밍 04-검색과 랭킹-02
집단지성 프로그래밍 04-검색과 랭킹-02
 
Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)
Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)
Lab Seminar - Reading Wikipedia to Answer Open-Domain Questions (DrQA)
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
2016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/32016년 인문정보학 Sql세미나 1/3
2016년 인문정보학 Sql세미나 1/3
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
Infiniflux introduction
Infiniflux introductionInfiniflux introduction
Infiniflux introduction
 
Embedded project presentation
Embedded project presentationEmbedded project presentation
Embedded project presentation
 
Django - CRUD 기능 구현
Django - CRUD 기능 구현Django - CRUD 기능 구현
Django - CRUD 기능 구현
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017
 
Data-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTSData-Oriented Design과 유니티 DOTS
Data-Oriented Design과 유니티 DOTS
 
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
[ 2015 SOSCON ]오픈스택 swift로 시작하는 오픈소스 분석 삽질기
 
웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동웹 개발 스터디 01 - PHP, MySQL 연동
웹 개발 스터디 01 - PHP, MySQL 연동
 
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
 
[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience
 

More from Ian Choi

Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ian Choi
 
클라우드 컴퓨팅 기본 사항 (Fundamentals)
클라우드 컴퓨팅 기본 사항 (Fundamentals)클라우드 컴퓨팅 기본 사항 (Fundamentals)
클라우드 컴퓨팅 기본 사항 (Fundamentals)Ian Choi
 
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요Ian Choi
 
마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)
마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)
마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)Ian Choi
 
Evolving Translation and Internationalization in OpenStack & Kubernetes commu...
Evolving Translation and Internationalization in OpenStack & Kubernetes commu...Evolving Translation and Internationalization in OpenStack & Kubernetes commu...
Evolving Translation and Internationalization in OpenStack & Kubernetes commu...Ian Choi
 
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개Ian Choi
 
오픈 소스 프로그래밍 - NoSQL with Python
오픈 소스 프로그래밍 - NoSQL with Python오픈 소스 프로그래밍 - NoSQL with Python
오픈 소스 프로그래밍 - NoSQL with PythonIan Choi
 
Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)
Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)
Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)Ian Choi
 
OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...
OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...
OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...Ian Choi
 
[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...
[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...
[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...Ian Choi
 
Microsoft loves communities - Korea DevRel Team
Microsoft loves communities - Korea DevRel TeamMicrosoft loves communities - Korea DevRel Team
Microsoft loves communities - Korea DevRel TeamIan Choi
 
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴Ian Choi
 
국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우
국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우
국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우Ian Choi
 
[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용Ian Choi
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기Ian Choi
 
[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션
[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션
[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션Ian Choi
 
[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력
[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력
[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력Ian Choi
 
OpenStack 2018 Vancouver Summit 후기
OpenStack 2018 Vancouver Summit 후기OpenStack 2018 Vancouver Summit 후기
OpenStack 2018 Vancouver Summit 후기Ian Choi
 
"docs.microsoft.com"에 기여하기
"docs.microsoft.com"에 기여하기"docs.microsoft.com"에 기여하기
"docs.microsoft.com"에 기여하기Ian Choi
 
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례Ian Choi
 

More from Ian Choi (20)

Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
 
클라우드 컴퓨팅 기본 사항 (Fundamentals)
클라우드 컴퓨팅 기본 사항 (Fundamentals)클라우드 컴퓨팅 기본 사항 (Fundamentals)
클라우드 컴퓨팅 기본 사항 (Fundamentals)
 
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요
디자인에 이어 코딩까지 AI가 프로그램 개발을 척척?: GitHub Copilot, 어디까지 알아보셨나요
 
마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)
마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)
마이크로소프트 애저 및 클라우드 트렌드 소개 (부제: Beyond IaaS)
 
Evolving Translation and Internationalization in OpenStack & Kubernetes commu...
Evolving Translation and Internationalization in OpenStack & Kubernetes commu...Evolving Translation and Internationalization in OpenStack & Kubernetes commu...
Evolving Translation and Internationalization in OpenStack & Kubernetes commu...
 
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
 
오픈 소스 프로그래밍 - NoSQL with Python
오픈 소스 프로그래밍 - NoSQL with Python오픈 소스 프로그래밍 - NoSQL with Python
오픈 소스 프로그래밍 - NoSQL with Python
 
Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)
Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)
Azure 클라우드 학생 계정 & Ubuntu VM 셋업 (Mar 2022)
 
OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...
OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...
OpenStack I18n Product Update at Shanghai: how OpenStack translation started ...
 
[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...
[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...
[OpenInfra Days Vietnam 2019] Innovation with open sources and app modernizat...
 
Microsoft loves communities - Korea DevRel Team
Microsoft loves communities - Korea DevRel TeamMicrosoft loves communities - Korea DevRel Team
Microsoft loves communities - Korea DevRel Team
 
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
 
국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우
국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우
국제화/번역과 함께 하는 오픈소스에 대한 경험 및 노하우
 
[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
 
[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션
[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션
[2018 KOSSLAB 컨트리뷰톤] 오픈스택 (OpenStack) 프로젝트 소개 + 업스트림 컨트리뷰션
 
[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력
[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력
[2018 공개SW그랜드챌린지] 오픈 인프라와 오픈 커뮤니티에서의 협력
 
OpenStack 2018 Vancouver Summit 후기
OpenStack 2018 Vancouver Summit 후기OpenStack 2018 Vancouver Summit 후기
OpenStack 2018 Vancouver Summit 후기
 
"docs.microsoft.com"에 기여하기
"docs.microsoft.com"에 기여하기"docs.microsoft.com"에 기여하기
"docs.microsoft.com"에 기여하기
 
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
 

집단 지성 (Programming collective intelligence) 스터디: Chapter 4 - Searching & Ranking

  • 2. 2 • iPython notebook file • h"ps://goo.gl/WU8hS0   • Data files (including iPython notebook file) • h"ps://goo.gl/HvE7lb  
  • 3. 3 목차 •  Section 1: 검색엔진이란? •  Section 2: 단순 크롤러 •  Section 3: 색인하기 •  Section 4: 검색하기 •  Section 5: 내용 기반 랭킹 •  Section 6: 유입 링크 사용하기 •  Section 7: 클릭 학습 •  (Section 8: 함께 풀어보기)
  • 4. 4 0. Before Diving into… - (1) •  정보 검색 (Information retrieval) •  정보 자원의 집합으로부터 필요로 하는 정보에 적합한 정보 자원을 얻는 행동 (from Wikipedia) •  검색엔진 •  사람들이 입력한 단어 몇 개로 많은 문서들을 찾고 그 단어들에 가장 연관도가 높은 순으로 결과를 정렬 (from 스터디 교재) •  인터넷의 발전과 함께 웹 (WWW, World-Wide Web)의 정보를 효율적으로 검색하기 위한 다양한 검색엔진들이 등장 & 발전
  • 5.
  • 6. 6 검색엔진 •  검색엔진 (Search Engine) 만들기 문서 수집 방법 색인 랭킹 신경망 •  크롤링 (crawling) •  고정 문서 컬렉션 (예: 기업 인트라넷) •  데이터베이스 이용 : 단어 위치 / 문서 저 장 •  문서 위치 참조 (reference)만 저장 : 파일 시스템 경로, URL •  Magic : 결과 정렬 방식! •  페이지랭크 (PageRank) 알고리 즘 •  클릭한 링크를 기반 으로 검색어와 결과 간의 연관 정도 학습 •  과거에 많이 클릭했 던 것이 더 상위에 위 치하도록 순서 변경
  • 7. 7 Python 모듈: searchengine •  85-86p: 크롤링 기능에 대해 Python 클래스 구조를 작성 크롤러 (Crawler) [내부 작업] __init__() __del__() dbcommit() getentryid() addtoindex() gettextonly() separatewords() isindexed() addlinkref() crawl() createindextables() 항목 번호를 얻고 등재되지 않았다면 추가 개별 페이지를 색인함 HTML 페이지에서 텍스트 추출함 공백문자가 아닌 문자들로 단어 분리 이미 색인한 주소인지 확인 두 페이지간 링크 추가 페이지 목록에서 depth까지 색인 데이터베이스 테이블 생성 (sqlite) 색인 데 이터
  • 8.
  • 9. 9 단순 크롤러 •  크롤링 (Crawling) / 스파이더링 (Spidering) •  색인할 작은 페이지 집합에서 시작하여 페이지 내 링크를 따라 다른 페이지들을 반복해서 찾 는 과정 •  Beautiful Soap •  웹 페이지를 파싱하고 구조적 표현을 생성하는 라이브러리 •  “pip install beautifulsoup4” è 사용시 “from BeautifulSoup” à “from bs4” •  참고: Canopy에는 이미 포함되어 있을수도?
  • 10. 10 참고: 크롤링 •  영화 정보 일부 가져와 사용하기 http://developer.naver.com/wiki/pages/SrchMovie - Naver 검색 API: 하루 최대 25,000개 요청 제한
  • 11.
  • 12. 12 Sqlite란 •  Sqlite •  파일을 데이터베이스로 사용 가능하게 함 •  Pysqlite •  Python에서 sqlite를 사용 가능하게 하는 라이브러리 •  Canopy에 포함되어 있지 않아 추가 설치 필요
  • 13. 13 Sqlite 관련 클래스 내 코드 •  클래스 searchengine •  클래스 사용 시작시에 지정한 DB 파일과 연결 •  클래스 사용 종료시 DB 파일 사용 종료 •  dbcommit 함수 실행하면 DB 파일에 커밋 (기록) def  __init__(self,dbname):      self.con=sqlite.connect(dbname)   def  __del__(self):      self.con.close()   def  dbcommit(self):      self.con.commit()   크롤러 (Crawler) 크롤러 사 용 시작 전 실행 크롤러 다 사용하면 실행 DB에 기 록 (sqlite) 함 수 함 수 함 수… 크롤링 데이터
  • 14. 14 스키마 설정하기 색인된 URL 목록 단어 목록 문서들 내의 단어 위치 목록 [문서 간 링크] 한 테이블에서 다 른 테이블로의 연 결을 가리키는 2 개의 URL ID 저 장 [문서 간 링크] 링크에서 사용된 단어들을 저장
  • 15. 15 페이지 내 단어 찾기 •  gettextonly 함수 •  Argument: soup 객체 •  What to do: Soup을 사용해서 텍스트 노드를 찾고 내용 모으기 •  separatewords 함수 •  Argument: text •  What to do: 텍스트를 단어별로 구분한 리스트를 반환 •  참고: W è 알파벳이나 소문자를 제외한 문자 (정규 표현식) •  Python에서는 로 써야 정규 표현식으로 인식함 à W* è W* (*은 0개 이상을 의미) •  본인의 경우 “import re”를 해야 했음 (https://docs.python.org/2/library/re.html) •  참고: 스테밍 (stemming) 알고리즘 •  단어를 어근 (stem)으로 변환 •  예: indexing à index •  “index” 단어를 검색할 때, “indexing”도 나오게 하기 위함
  • 16. 16 참고: 스테머 (Stemmer) Source: http://konlpy.orgSource: Michael L. Nelson, “Collective Intelligence – Week 3: Crawling, Searching, Ranking”
  • 17. 17 색인에 넣기 •  addtoindex 함수 •  Argument: url, soup •  What to do: soup 객체로부터 텍스트를, 텍스트로부터 단어를 가져와 “(url, 단어들)” 정보 를 색인에 추가 •  getentryid 함수 •  Argument: table, field, value, createNew •  What to do: “table”에서 field가 value인 ID값을 찾아 반환, 없으면 추가 •  isindexed 함수 •  Argument: url •  What to do: URL이 이미 색인되어 데이터베이스에 저장되어 있는지 확인
  • 18.
  • 19. 19 검색 클래스: searcher •  크롤링된 데이터를 기반으로 “복합어 검색”을 수행하는 역할을 하는 클래스 검색 (Searcher) [내부 작업] __init__() __del__() dbcommit() getmatchrows() 스페이스바로 구분된 단어들을 기반으로 색인 데이터에 서 검색 수행하여 결과 행 반환 (sqlite)(sqlite) 색인 데 이터
  • 21.
  • 22. 22 내용 기반 랭킹이란? •  이제까지 구현한 검색결과: 단순 크롤링된 순서 •  문서 관련성 등에 ‘가중치’ (weight)를 두어 먼저 나오도록 조정이 필요 •  ‘가중치’ 점수 지표 •  단어 빈도 •  단어가 많이 나올수록 결과 먼저 •  문서 내 위치 •  문서 핵심 주제가 도입부에 있을 가능성이 높음 •  단어 거리 •  검색 단어들이 가까이 있을 경우 찾고자 하는 문서일 확률이 높음
  • 23. 23 검색 클래스: 가중치 관련 함수 추가/수정 •  가중치 값과 함께 결과 출력 검색 (Searcher) [내부 작업] __init__() __del__() dbcommit() getmatchrows() 스페이스바로 구분된 단어들을 기반 으로 색인 데이터에서 검색 수행하여 결과 행 반환 (sqlite)(sqlite) 색인 데 이터 getscoredlist() 가중치를 고려해 점수를 곱하여 전체 결과 반환 geturlname() query() Urlid로 url 이름을 찾아 반환 1.  getmatchrows 호출해 검색 2.  getscoredlist 호출해 가중치 계산된 내용 가져옴 3.  결과를 역순으로 정렬 (점수 높을수록 결과 처음에 나오게 하기) 4.  각 결과를 geturlname 사용해 정보 출력
  • 24. 24 검색 클래스: 정규화 & 가중치 함수 •  정규화 함수 •  가중치를 계산하는 ‘단어 빈도’, ‘문서 내 위치’, ‘단어 거리’ 등이 모두 0~1 사이의 값이 나타 나도록 하기 •  구현: normalizescores 함수 •  가중치 함수 •  단어 빈도 •  문서 내 위치 •  단어 거리
  • 25.
  • 26. 26 PageRank 알고리즘 •  예 (damping factor: 0.85) •  PR (A) = 0.15 + 0.85 * ( PR(B) / links(B) + PR(C)/links(C) + PR(D)/links(D) ) = 0.15 + 0.85 * (0.5/4+0.7/5+0.2/1) = 0.15 + 0.85 * (0.125 + 0.14 + 0.2) = 0.54525
  • 27.
  • 28. 28 신경망 – 뇌 (Brain) The brain is a highly complex, nonlinear, and parallel computer (information processing system) The brain consists of neurons (small information Processing units) The brain performs much faster computations (e.g., pattern recognition, perception, motor control) Than the fastest digital computer in existence today. Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
  • 29. 29 신경망 – Neural Computation (Neural Networks) A neural network is a machine that is designed to model the way in which the brain performs a particular task of function of interest. Neural networks employ a massive interconnections of Simple computing cells referred to as neurons. Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
  • 30. 30 신경망 – 뉴런 (Neuron) dendrite nucleus axon pre/post synaptic 수상돌기 핵 축색 시냅스 전/후부 Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
  • 31. 31 신경망 ~> 인공신경망 (artificial neural networks) input Hidden layer output Source: Seungjin Choi, “Neural Computation – Introduction to Computer Science”, 2002
  • 32. 32 인공신경망 클릭 학습 (Learning from Clicks) •  클릭 학습을 구현하려면? •  색인 단어들을 통해 학습되지 않은 인 공신경망을 먼저 만들기 •  네트워크 연결 활성화 & 출력까지 연 결 •  전방전파 알고리즘 (feedforward) •  검색 결과 + 사용자 클릭을 반영한 학 습 •  역전파 학습 (backpropagation) •  검색 엔진에 연결 웹 (데이터베이 스) [입력] 검색단어 [출력] 검색결과 검색 (rel.) (rel.) word word url [입력] 검색단어 [출력] 검색결과 input Hidden layer output
  • 33. 33 클릭학습 예시: 학습을 통한 노드 결과