코딩 공부/검색 6

n-Gram 개선 및 고찰

자음 모음단위로 n-Gram 저번에 구현한 n-gram https://fullfish.tistory.com/109 n-Gram n-Gram이란 문장의 유사도를 비교하는 방법중 하나로 문장을 쪼개서 비교한다 예를 들어 3-gram으로 '과자중에 제일 맛있는건 새우깡' '제일 맛있는 과자는 무엇일까' 이 두문장을 비교한다면 각 문 fullfish.tistory.com 에서는 글자를 음절 단위로 잘라서 썼었다 예를 들어 안녕하세요를 3-Gram으로 한다면 ['안녕하', '녕하세', '하세요']로 나눴는데 활용하기 나름이지만 이번에는 자음 모음단위로 나뉘어 봤다 ['ㅇㅏㄴ', 'ㅏㄴㄴ', 'ㄴㄴㅕ' ...] 해당 방법의 장점은 오타나 어미가 달라도 검색이 될 가능성이 높아지게끔 허들을 낮출 수 있다 우선은 문자..

n-Gram

n-Gram이란 문장의 유사도를 비교하는 방법중 하나로 문장을 쪼개서 비교한다 예를 들어 3-gram으로 '과자중에 제일 맛있는건 새우깡' '제일 맛있는 과자는 무엇일까' 이 두문장을 비교한다면 각 문장을 3글자씩 자른다. "과자중에 제일 맛있는건 새우깡" [ '과자중', '자중에', '중에 ', '에 제', ' 제일', '제일 ', '일 맛', ' 맛있', '맛있는', '있는건', '는건 ', '건 새', ' 새우', '새우깡' ] "제일 맛있는 과자는 무엇일까" [ '제일 ', '일 맛', ' 맛있', '맛있는', '있는 ', '는 과', ' 과자', '과자는', '자는 ', '는 무', ' 무엇', '무엇일', '엇일까' ] 그리고 각 요소를 비교해서 유사도를 측정한다 https://too-marc..

레벤슈타인 거리 시간복잡도와 공간복잡도 개선

이전 게시물 레벤슈타인 거리 (Levenshtein Distance) 레벤슈타인 거리란 문자열의 유사도를 검사하는 기본적인 알고리즘으로 편집 거리라고도 부름 a문자열에서 b문자열로 편집할때 몇번의 조작이 필요한지를 도출해낸다 예를들어 '가나다라'와 ' fullfish.tistory.com 기존 코드 //레벤슈타인 거리 코드 exports.levenshteinDistance = (str, search) => { if (search === undefined) return 0; if (str === search) return 0; let aLen = str.length; let bLen = search.length; if (aLen === 0) return bLen; if (bLen === 0) return ..

레벤슈타인 거리 (Levenshtein Distance)

레벤슈타인 거리란 문자열의 유사도를 검사하는 기본적인 알고리즘으로 편집 거리라고도 부름 a문자열에서 b문자열로 편집할때 몇번의 조작이 필요한지를 도출해낸다 예를들어 '가나다라'와 '가나다마바'의 거리는 2이다 '라' -> '마', '바'추가 코드 exports.levenshteinDistance = (str, search) => { if (search === undefined) return 0; if (str === search) return 0; let aLen = str.length; let bLen = search.length; if (aLen === 0) return bLen; if (bLen === 0) return aLen; //배열 생성 let matrix = new Array(aLen + ..

fuzzy검색의 highlight와 가중치 적용

참고 : https://taegon.kim/archives/9919 [JS] 한글도 지원하는 퍼지 문자열 검색 UI 작업을 하다보면 목록을 검색해야 할 때가 많다. 그런데 사람의 기억이라는 게 정확하지 않아서 혹은 전부 입력하기 귀찮아서 개떡같이 일부만 입력해도 찰떡같이 원하는 결과를 보여주는 UI taegon.kim Highlight 적용 검색을 한 글자를 빨간색으로 반환 가중치 적용 원래 db상 '과일먹자'가 '과자냠냠'보다 id값이 빨라서 상단에 위치했는데 유저가 좀더 찾기를 원했을만한 단어가 위로가게 가중치 적용 빨간색으로 색 바뀌는부분 코드 exports.chageRed = (data, search) => { const regex = createFuzzyMatcher(search); const ..

퍼지(fuzzy) 검색 (정규표현식이용)

fuzzy logic : 불분명한 상태, 모호한 상태를 참 혹은 거짓의 이진 논리에서 벗어난 다치성으로 표현하는 논리개념 (위키백과) 확률론과 근본적으로 다른것이 부엌과 침실사이에 서 있을때 50%확률로 부엌에 있고 50%확률로 침실에있다고 말하는것과 양자역학처럼 50%는 부엌 50%는 침실에있다라고 말하는것은 다름 fuzzy 검색 : 완전히 일치하지않아도 검색하는것 (유사성 검색 알고리즘) fuzzy 검색이란 유사해도 검색하는 방법론이므로 딱 정해진 방법이 존재하는것은 아니다 다양한 방법들이 있는데 레펜슈타인 거리(Levenshtein distance) 다메라우-레펜슈타인 거리(Damerau-Levenshtein) 우(Wu)와 만버(Manber)씨에 의한 비탭 알고리즘과 변형 철자 검사 기법 N-그램 ..