유사도 검색
신품 가격 기능
신품 가격 기능을 붙히면서, 우리가 등록한 제품의 이름과 크롤링한 신품 데이터의 이름과 매칭을 시켜 가장 비슷한 제품을 불러와야 했다.
문제점
문제점으로는, 우리가 저장한 제품의 이름과 타 사이트의 이름을 지정한 방식이 달랐다. 그래서 단순 like로는 정확성이 떨어지게 되는 상황이 발생하였다.
데이터 정제가 필요한가
이 부분을 해결하기 위해, 데이터 정제가 필요하다는 의견이 나왔다. 크롤링 한 데이터에서 빠른 배송, ‘()’ 등과 같은 필요없는 수식어가 붙어 있어서, 이 부분을 정제를 해줘야 했다. 하지만 이 데이터가 너무나 많고, 사이트 마다 지정한 방식이 있기 때문에 정제를 하는 부분이 너무나 어렵고 시간이 많이 든다는 문제점이 있었다.
해결책
그래서 생각을 한 것이, 브랜드(한글명 + 영문명)와 제품 이름(한글명 + 영문명)과 비교를 하기로 했다. 그리고 핵심 단어가 들어가면 유사도가 높다라는 것을 보여 주기로 했다.
similarity
similarity 함수는 postgresql에서 제공하는 유사도를 계산 해주는 함수이고, string 타입을 비교를 해준다. 내가 검색한 단어가 포함이 되었을 경우 점수를 더 높게 측정하는 방식이다.
select
similarity(str1, str2 )
이런 식으로 similarity 함수에 인자를 넣어주면 된다.
select
similarity('스파게티 암체어 109', '[빠른배송] 스파게티 암체어 109 / high' )
우리 제품에 스파게티 암체어 109라는 제품이 있고, 신품 제품의 데이터에는 ‘[빠른배송] 스파게티 암체어 109 / high’ 이런 식으로 저장 되어 있는 데이터가 있다. 이를 계산을 해보면, 56퍼센트 일치한다고 계산이 된다.
뒤에 번호만 바뀌게 된다면 어떻게 될까?
select
similarity('스파게티 암체어 109', '[빠른배송] 스파게티 암체어 105 / high' )
유사도는 43 퍼센트로 나온다.
이 정도의 계산이면 데이터 정제를 하지 않아도 얼추 일치하는 값이 나올 것 같다는 생각을 하였다.
그래서 이 함수를 이용하여 매칭을 시키도록 하였다.
느낀점
일반 프로젝트에서 사용하는 query문과 달리 회사에서는 다양한 sql 함수들을 경험할 수 있다는 생각이 들었다.
다양한 db 종류에 따라 각기 다양한 함수가 존재 할 것이다. 이러한 함수들을 잘 이용을 해보는 것이 나중에 큰 도움이 될 것 같다는 생각이 들었다. 하지만 이 함수의 성능이 좋은지는 파악을 하지 못했다. 그래서 함수을 쓰긴 쓰되 성능도 함께 파악을 해보는 시간을 가져야 겠다.
댓글남기기