brunch

You can make anything
by writing

C.S.Lewis

by 쑹이씨 Jan 10. 2016

반복되는 구간의 선별

체리피커의 탄생

웹페이지들을  들여다보고 있노라면 반복되는 구간들을 쉽게 발견할 수 있다.

다음 TOP의 일부
눈으로는 누구나 알수 있는 반복요소들

HTML을 보자

흠.. 눈으로 보는 것과 다르다는 것을 설명하려 했는데, 내가 예상한 것보다 훨씬 더 다르다.

솔직히 좀 당황스럽다.


기호화시켜서 보자

"default_img  #img"를 A로,

"fst_txt  #txt"를 B로,

"#txt"를 C로 바꿔서 생각해보자

A, B, C, C, C, C, A, B, C, C, C, C

이걸 보면 마치 매직아이처럼 초점을 어디에 두냐에 따라서 신세계를 보듯이,

여러 반복 구간을 떠올릴 수 있을 것이다.

"A....." +  "A....."와 같이 A가 두 번 반복된다라고 생각할 수도 있고,

"AB...." +  "AB...."와 같이 AB가 두 번 반복된다 볼 수도 있고,

"ABC..." + "ABC..." 도,

"ABCC.." + "ABCC.." 도,

"ABCCC." + "ABCCC." 도,

"ABCCCC" + "ABCCCC" 도 반복이다.

하지만 그중에서는 반복되는 덩어리가 가장 긴 것이, 가장 합리적인 반복 구간으로 보인다.

이 방법으로 문서 내에 존재하는 목록들을 자동으로 선별할 수 있게 된다.


왜 목록을 자동으로 선별하는가?

돈 많은 구글은 모든 링크를 수집하지만, 나와 일선의 실무자들은 그런 돈이 없기 때문에 필요한 링크만 수집해야 한다. 

목록을 이 방법으로 추려서 묶어줄 수 있으면, 내가 할 일은 어떤 목록을 쓸 건지 "선택"하는  것뿐이다.

그 뒤에는 그 안의 반복 요소끼리, 이전 포스팅에서 소개했던 문서 간 비교(DIFF)로 주요 정보들을 자동으로 추려내고, 사용하면 된다.


그래서 만들기 시작했다.

이걸 하고 싶어서 그러나 혼자 하니까 너무 외로워서 seoul.pm 식구들에게 퀴즈를 냈다.

https://gist.github.com/sng2c/6077247

그래서 여러분들이 해법을 올려주셨고, 그걸 참고하여 아래의 코드가 만들어졌다.

https://github.com/sng2c/clj-template-reverse/blob/master/src/template_reverse/core.clj#L102

간단히 요약하자면,

ABCBABCD

일 때에는

A???A???
AB??AB??
ABC?ABC?

의 3가지 반복 패턴을 찾아준다.

그럼 나는 가장 긴 단위 패턴인 ABC?를 선택하고, ABC에 해당하는 부분만 뜯어내서 사용하면 된다.

아마도 HTML에 적용할 때는 속성이나 텍스트는 제거하고 태그 이름만으로 추출하는 것이 적절할 것이다.


잠깐 그래서 이게 뭔데?

이전 포스팅에서 밝힌 생각 중에 하나는, 

템플릿에 채워진 값들은 DB에 잘 정제된 고급 데이터란 것이다.

목록은 DB에서 SELECT 한 값들을 템플릿에 챡챡챡 채워 넣는 것이다.

그래서 목록은 누군가 공들여 DB에 정리해 집어넣은 중요하고 가치 있는 데이터인 것이다.


어떤 페이지를 임의로 입력받았을 때,

목록을 선별하고,

한 목록에서 연결된 페이지들은 거의 같은 템플릿을 사용한다고 가정하면,

해당 사이트에서 고급진 정보만 자동으로 쏙쏙 빼내가는 얄미운 체리피커 같은 웹 스크래퍼를 만들 수 있지 않을까 한다.


이걸 만들게 되면 이름을 체리피커라고 지어야겠다.



작가의 이전글 웹의 재사용
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari