brunch

매거진 데이터 101

You can make anything
by writing

C.S.Lewis

by 져니박 Apr 13. 2023

똑똑하게 데이터 5탄 : 일치

적당히 통과 vs 유일한 하나 기준을 정해야

이전 4탄에서, 똑똑하게 데이터를 정의하는 것은 결국 사람에 달려있다고 매듭을 지었습니다. '전화번호 형식(패턴)에 맞게 입력한 경우만 통과'시키는 프로그래밍을 하고자 하면 인터넷에 검색하거나 ChatGPT에 그냥 그 질문 고대로 쓰면 바로 코드를 만들어주는 세상이 왔다 하더라도요. 대충~ 숫자만 들어오면 통과시킬 것인지, 지역번호부터 해서 자릿수와 하이픈까지 힘들게 검사할 것인지는 결국 사람이 정하는 것이기 때문입니다.


그런데 전화번호, 이메일 이런 특수한 데이터가 아니라 숫자나 문자열(알파벳의 연속) 데이터에서도 같은 상황이 발생합니다. 무엇이 맞는지, 원하는 숫자나 문자와 일치하는지? 이를 정의하는 것도 사람에 달려 있습니다. 그리고 그 기획 의도를 명확하게 전달하고 '일치'라는 상태를 정확하게 정의해야 하는 것입니다.

 


적당하게 맞아떨어져도 돼
자동완성 검색어는 유연하게


몇 년 전에 똑같은 문구를 들었을 때, 어떤 노래가 떠오르는지 갖고 나이 테스트를 할 수 있다는 이야기가 한창 인터넷에 떠돌았습니다. 공감도 얻었지만, '아냐 나 그렇게 나이 안 많은데!'라는 부정까지 다양한 반응을 이끌어냈었는데요. 일명 [머리부터 발끝까지... 다음은] 테스트입니다.


머리부터 발끝까지... 다음으로 생각나는 내용은?
- 다~ 사랑스러워~ (김종국 / 사랑스러워)
- 핫 이슈! (포미닛 / 핫이슈)
- 오로나민C~ (전현무 / 오로나민 C 광고)
- 머리부터 발끝까지!!! (이근 대위/ 가짜사나이)


놀라운 것은 구글 검색창을 켜고, '머리부터' 까지만 입력했는데 웃어넘겼던 '머리부터 발끝까지'가 포함된 다양한 노래들이 아래처럼 자동완성 후보로 뜨는 것입니다. 물론 글자 그대로 정확하게 검색하는 경험도 중요하지만, 구글이나 네이버의 경우 쉽고 빠른 검색 경험을 주고자 하다 보니 생기는 현상 같습니다. 검색량이 많은 포털 사이트의 경우 '다수가 찾는' 검색어가 상위에 랭크되는 것입니다. 높은 확률로 '머리부터 발끝까지'까지 입력한 사용자도 저 노래들을 검색할 수 있을 테니까요.




그런데 구글은 여기서 더 나아갑니다. 아래 사진을 보시면, '머리부터 발끝에'까지 이미 입력을 했는데, '머리부터 발끝까지' 검색어와 일치하는 자동완성 검색어 후보를 제공합니다.  


'퍼지 검색(fuzzy search)'라고 불리는 부분인데요. 입력하는 검색어, 즉 시스템에 요청하는 쿼리(Query)와 100% 일치하지 않더라도, 어느 정도 유사하다고 판단되면 결과에 보여주는 것입니다. 다음은 IBM에서 퍼지 검색에 대해 예시를 들어 설명한 글입니다.


퍼지 검색
사용자가 검색 중인 용어와 철자가 유사한 단어가 있는 문서를 찾으려면 퍼지 검색을 사용하십시오.

퍼지 검색 쿼리는 쿼리 용어와 같거나 유사한 문자 시퀀스를 검색합니다. 퍼지 검색을 수행하려면 용어 끝에 틸드 기호(~)를 사용하십시오. 예를 들어, 다음 쿼리는 analytics, analyze, analysis 등의 용어를 포함하는 문서를 찾습니다.

analytics~

선택적 매개변수를 추가하여 검색어에 대한 검색 결과의 유사성 정도를 지정할 수 있습니다. 0보다 크거나 같고 1보다 작은 값을 지정하십시오. 값 앞에 0과 소수점을 두어야 합니다(예: 0.8). 1에 가까운 값일수록 유사성이 더 높은 용어와 일치합니다. 매개변수를 지정하지 않은 경우 기본값은 0.5입니다.

analytics~0.8



그 머리와 저 머리는 달라
세상에 단 하나밖에 없는


한편 같은 검색이지만, 글자 그대로 똑같더라도 엄연히 다른 것을 구별해야 하는 경우도 있습니다. 대표적으로 다의어, 즉 여러 뜻을 가지고 있는 단어를 검색하는 경우인데요. 예를 들어, 네이버 국어사전에서 '머리'를 검색하면 수많은 머리가 나옵니다.


실제로 (크롬 브라우저의 경우) F12 개발자 도구를 켜고, 몇 개씩 나오는 '머리'중에 첫 번째 표제어에 커서를 갖다 대면, 그것은 '머리'라는 굵은 글씨 텍스트로 보입니다.

 " <strong class="highlight">머리</strong> "


그리고 두 번째, 세 번째 표제어 모두 동일하게 나오는 것을 확인할 수 있습니다. 그리고 이 모두를 볼 수 있는 현재의 페이지의 url 주소는 search? query=머리입니다. 즉,동일한 '머리'에 대한 검색결과인 것입니다.


네이버 국어사전, 첫 번째 머리의 highlight, entryid, entryname 비교해 보자


그런데 제가 그중 하나를 선택하고 클릭하면, 모든 '머리'라는 표제어(문자열)가 아니라, 제가 선택한 그 '머리'가 선택됩니다. 그리고 그 '머리'에 대한 설명과 예문이 나오는 상세 페이지로 이동하게 됩니다. 제가 선택한 그 '머리'만 해당되는 것이고 다른 '머리'는 해당되지 않는 것입니다. 만약에 첫 번째 표제어만 강조를 하고 싶어 글씨 크기를 키우고자 한다면, 역시 딱 그 '머리'만 바꿔야 합니다.


그럼 어떻게 첫 번째 머리와 다른 머리를 구분할 수 있을까요? 바로 위 이미지에서의 entryid, 또는 각각 표제어의 상세 페이지로 넘어갔을 때 바뀐 url 주소를 보고 알 수 있습니다. 아이디, 즉 다른 검색어와 구분 짓는 고유의 번호가 다릅니다. 임의의 숫자와 알파벳으로 이루어진 조합이 표제어마다 다른 상황입니다.


query=머리 검색결과에 같이 있지만, 고유한 ID가 다른, 다른 머리이다.

 

실제로 프로그래밍(자바) 언어에서 두 개의 문자열이 일치하는지 확인할 때, 단순히 보이는 철자만 일치하면 다음 단계로 넘어갈 때도 있고, 아무리 철자가 똑같아도 고유 ID값 즉 정말 유일무이한, 자기 자신이 맞는지가 확인이 되어야 통과시키는 경우도 있습니다. 후자의 경우 equals() 함수라고 합니다.


유연하게 어느 정도 오차(errors)를 감안하더라도 빠르게 검색어를 완성시켜 주고, 높은 확률로 연관된 검색결과를 보여주는 것이 맞을 때가 있습니다. 하지만 '바로 그것'을 골라내고 그것에 대한 상세 페이지로 연결을 시키거나 수정을 해야 한다는 등 '콕' 짚어야 하는 경우에는 철저하게 ID를 확인해 equals가 만족될 경우에만 해주어야 합니다. 첫 번째 '머리', 신체의 일부분을 예상하고 클릭했는데, 아무 '머리'나 허용했다가 세 번째 미국 노동 운동 지도자라는 세 번째 '머리'의 상세 페이지로 연결하면 안 되는 것이죠.  


일란성쌍둥이라 생김새에 DNA까지 유사하더라도,
주민등록번호가 다른 두 사람을 구분해야 하는 경우가 있듯이


KUMACORE/GETTY IMAGES PLUS


져니박 씀.


매거진의 이전글 똑똑하게 데이터 4탄 : 패턴
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari