- Aho-corasick
- 다중패턴매칭 알고리즘이다.
- 예를들어 미리 구축해 놓은 사전(혹은 복수개의 검색어 리스트)에 아래의 단어가 저장되어 있다고 하자 (이하 사전단어라 칭함.)
- no
- now
- here
- where
- nowhere
- 사용자의 입력이 'dreamisnowhere' 가 들어왔을 때 substr 으로 발견되는 모든 사전단어를 찾아내야 하는 일을 생각해보자.
- 단순하게 생각하면 string class 에서 제공하는 substr을 이용하여 찾을 수도 있다.
- 사전단어 중에서 max 길이를 알아내고 가능한 모든 경우를 사전에 있는지 찾아보는거다
- 물론 이렇게 하면 된다. 하지만 시간이 오래걸리고 매우 똑똑하지 못한 방법이다.
- 이러한 경우의 문제를 똑똑하게 풀어내기 위해 제안된 여러 다중패턴매칭 알고리즘 중 대표격인 알고리즘이다.
- 구조
- Trie 구조 + FailFunction Table
- 구조는 위와 같이 단순하다.
- 알고리즘 설명
- 아래 블로그에 알고리즘에 대해 자세히 설명되어 있다. (다시 설명하는 번거로움 보다는 잘 설명된 곳을 알려드리는 편이 나을 듯 하여...)
- 동작 시뮬레이션
- 아래 사이트에서 ahocorasick의 구조와 동작을 animation으로 표현해 놓았다.
- http://blog.ivank.net/aho-corasick-algorithm-in-as3.html
- 일반 Trie 구조에서 사용되는 노드와 엣지 이외의 다른 엣지들은 FailFunction의 엣지를 나타낸다.
- Aho-Corasick 라이브러리
- 언어 c++
- 특징
- 기본 Aho-Corasick 구현부는 다른 라이브러리와 동일함.
- Dump 기능 - Aho-corasick 을 구성한 후 구성된 자료구조를 binary db 파일로 생성이 가능하다.
- 다중검색 기능 - 위의 시뮬레이션 사이트에서 검색을 위애 옮겨다니는 노드 포인터를 복수개로 늘린 버젼을 제공한다.
- 이와 같은 기능은 다양한 인식 시스템에서의 후처리 업무를 하고 있는 필자의 경우 wfst로 구성된 복잡함 graph 내에서 사전단어를 검색하는 경우 유용하게 사용된다.
- 빌드환경
- Windows visual studio 10.0'
기타알고리즘
- Aho-corasick 라이브러리 2015.12.09
Aho-corasick 라이브러리
2015. 12. 9. 12:29