나는 Elasticsearch/Lucene와 같은 도구가 기본적으로 제공하는 편집 거리 기반 퍼지 검색에 대해 여기서 많은 스레드를 읽었지만 문제는 약간 다릅니다. I는에 의해 지정 될 수있는 단어들의 사전 { '고양이', '요람', '촉매'} 및 문자 유사성 관계 f (x, y)를fuzzily 사전 단어를 검색하는 방법?
f(x, y) = 1, if characters x and y are similar
= 0, otherwise
(이 "유사성"이 가정 프로그래머)
같은 말, 즉,
f('t', 'l') = 1
f('a', 'o') = 1
f('f', 't') = 1
하지만 지금
f('a', 'z') = 0
etc.
우리가 'cofatyst'쿼리가있는 경우 algorit HM은 다음과 일치를보고해야합니다 :
('cot', 0)
('cat', 0)
('catalyst', 0)
수있는 경기의 0으로부터 시작 인덱스입니다. 나는 Aho-Corasick algorithm을 시도해 봤는데 정확한 일치를 위해 훌륭하게 작동하고 문자가 "비슷한"문자의 수가 상대적으로 적 으면 캐릭터의 비슷한 문자 수를 늘리면 성능이 기하 급수적으로 떨어집니다. 누구든지이 일을하는 더 좋은 방법을 가르쳐 줄 수 있습니까? 퍼지는 절대적 필요성이며 캐릭터 유사점을 고려해야합니다 (즉, 편집 거리에 따라 맹목적으로 의존하지 않아야 함).
주목할 점은 야생에서 사전은 실제로 커질 것입니다.
나는 그걸로 놀았지만 사전이 거대하면 어떻게 도움이 될지 모르겠다. 나는 여전히 쿼리와 하나씩 차례대로 단어를 대조해야한다. BITAP은 큰 텍스트와 그 텍스트에서 grep 할 패턴이있을 때 훌륭하게 작동하는 것 같습니다. –
7 개의 속성과 약 420 개의 행이있는 테이블에서 JSON으로 테스트했습니다. grep에 대한 더 큰 텍스트는 반드시 성능을 향상 시키지만 간단한 2 문자로도 성능은 만족 스러웠습니다. 그것은 내 테스트입니다. 희망이 정보는 도움이됩니다. –