앗! 광고가 차단되었어요!

글 내용이 방문자께 도움이 되었다면, 광고 차단 프로그램 해제를 고려해주세요 😀.

공돌이

미래를 바꾼 아홉가지 알고리즘 (1) - 검색엔진 인덱싱 일부 요약

this-gpa 2020. 6. 28. 18:28

[알고리즘의 (짧은) 정의]

알고리즘이란, 문제를 푸는 데 필요한 단계의 순서를 명확히 명시하는 구체적인 계산법입니다.

 

알고리즘은 명확하게 기술되어야 하며, 문제를 푸는 데 여러 가지 방법이 있으므로, 특정 기준으로 여러 알고리즘을 비교할 수 있습니다.

(e.g. 계산량이 많은가? 시간은 어느 정도 걸리는가? 효율성의 문제)


2장에서 다루는 내용은 검색엔진 인덱싱입니다. 부제로는 '세상에서 가장 큰 건초더미에서 바늘 찾기'라고 되어있습니다.

 

이 장에서는 검색엔진이 가지는, 방대한 양에서의 검색 방법을 다룹니다.

 

웹 쿼리를 발행하면 검색엔진에서는 매칭과 랭킹을 수행하게 됩니다.

 

매칭은 검색어에 부합하는 결과를 가져오는 과정이며,

랭킹은 최선의 결과를 적절한 순서로 선별하는 과정입니다.

 

랭킹은 검색엔진에서 매우 중요한 역할이며, 이 부분은 3장에서 자세하게 다룹니다.

 

[인덱싱과 매칭]

indexing은 찾아보기 같은 개념입니다. 특정 단어가 들어있는 페이지를 찾을 수 있습니다.

 

indexing 자료 구조의 예:

[

"단어": [단어가 사용된 문장(페이지)의 번호들, ] ,

]

 

방법:

- 각 페이지에서 나타난 단어를 추출한다.

- 단어를 key 값으로 사용한다.

- key의 value는 단어가 사용된 페이지의 번호들로 구성된 배열이다.

 

이러한 방법으로 페이지를 정리하면, 특정 단어가 포함되어있는 페이지를 찾을 수 있습니다.

다수의 단어가 들어가 있는 페이지를 찾는 것도 어렵지 않습니다.

다수의 단어 key의 value 값들을 가져와 공통으로 들어있는 번호를 찾으면 됩니다.

 

그런데 예를 들어, "단어1 단어 2"와 같이 순서를 유지하면서 검색을 요청한다면 어떻게 처리할까요?

 

앞에서 하나의 단어를 key로 사용한다고 했는 데,

만약 2, 3, 4...개의 단어로 구성되어 있는 key를 만든다면, 굉장한 컴퓨팅 파워가 필요할 것입니다.

또는 단어별로 찾은 다음, 문장을 재 참조하여 검사하는 방법도 비효율적입니다.

 

이를 위해 새로운 indexing 방법(단어 위치 트릭)이 소개됩니다.

 

(단어 위치 트릭이 적용된) indexing 자료 구조의 예:

[

"단어": [단어가 사용된 문장(페이지)의 번호 - 문장에서의 단어 위치(몇 번째 단어인가?), ],

]

 

단어 key에 대한 value 배열의 각 엔트리에 단어 위치를 부여하게 됩니다.

그러면, 단어1이 들어간 페이지를 찾고, 단어 2가 들어간 페이지를 찾은 다음

단어 위치가 인접해있는지 확인하면 됩니다.

 

[인덱싱과 랭킹]

2장에서는 위 매칭 방법을 기반으로 하는 랭킹 기법, NEAR와 IN을 소개합니다.

 

NEAR: 검색할 단어들의 위치가 가까울수록 적합한 결과가 나올 가능성이 높으므로 랭킹에 사용될 수 있습니다.

 

IN(메타 워드 트릭): 메타 워드(e.g. HTML 태그) 또한 인덱싱하여, 특정 태그 내부에 원하는 검색어가 있는지 확인합니다. 단어 위치 트릭이 적용된 indexing의 경우, 단어의 위치 정보가 있으므로, 닫는 태그와 여는 태그 사이의 위치에 있는지 확인할 수 있습니다.

 

예: 검색어 language IN title

Page 1: <title> What is the best programming language <title> <body> ... </body>

Page 2: <title> The travel to C </title> <body> The C Programming Language... </body>

 

[

...

"<title>": [ 1-1, 2-1 ],

"language":  [ 1-7, 2-11 ],

"</title>": [ 1-8, 2-6 ]

...

]

 

NEAR, IN은 사용자가 잘 이용하지는 않지만, 검색 엔진 내부에서 많이 사용합니다.

'공돌이' 카테고리의 다른 글

C++로 웹서버 만들기  (0) 2020.06.28
안녕 Tmax OS!  (0) 2020.06.28
안녕 BunsenLabs Linux!  (0) 2020.06.28
mysql UTF8 설정하기 (Ubuntu)  (0) 2020.06.28
virtualenv 사용하기  (0) 2020.06.28