KR102271489B1 - 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법 - Google Patents

정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법 Download PDF

Info

Publication number
KR102271489B1
KR102271489B1 KR1020200168282A KR20200168282A KR102271489B1 KR 102271489 B1 KR102271489 B1 KR 102271489B1 KR 1020200168282 A KR1020200168282 A KR 1020200168282A KR 20200168282 A KR20200168282 A KR 20200168282A KR 102271489 B1 KR102271489 B1 KR 102271489B1
Authority
KR
South Korea
Prior art keywords
state
transition
character
tri
alternative
Prior art date
Application number
KR1020200168282A
Other languages
English (en)
Inventor
하병현
김태완
최일훈
Original Assignee
(주)소만사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)소만사 filed Critical (주)소만사
Priority to KR1020200168282A priority Critical patent/KR102271489B1/ko
Priority to US17/134,624 priority patent/US11409806B2/en
Application granted granted Critical
Publication of KR102271489B1 publication Critical patent/KR102271489B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Document Processing Apparatus (AREA)
  • Machine Translation (AREA)

Abstract

본 발명에 따른 아호코라식 오토마타 구축 장치는, 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환부; 상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성부; 및 상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성부를 포함하는 것을 특징으로 한다.

Description

정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법{Apparatus and method of constructing Aho-Corasick automata for detecting regular expression pattern}
본 발명은, 탐지 대상 문서에서, 정규표현식으로 주어지는 문자열 패턴을 탐지하기 위한 아호코라식 오토마타를 구축하는 장치 및 방법에 관한 것이다.
정규표현식(regular expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는 표준적인 방법으로, 문자열의 검색과 치환에 널리 사용되고 있다. 정규표현식은 기본적으로 결합(concatenation), 선택대안(alternation), 클레이니 스타(Kleene Star) 등의 다양한 연산자를 이용하여, 탐지할 문자열 집합을 정의한다. 이를 기반으로 자료 유형 판단, 유효성 검증, 정보 추출, 데이터 변환, 어휘 및 구문 분석 등을 수행하며 텍스트 처리, 프로그래밍 언어 처리, 네트워크 패킷 분석 및 침입 탐지, DNA 염기서열 분석 등의 다양한 분야에 활용된다.
대상 문서에서 특정 문자열 패턴을 탐지하는 가장 기본적인 방식은 하나의 문자열을 검색하는 것이다. 이를 효율적으로 처리하기 위해 Rabin-Karp 알고리즘, Knuth-Morris-Pratt 알고리즘, Boyer-Moore 알고리즘 등이 개발되었다. 하지만 이와 같은 방식으로 정규표현식으로 주어지는 문자열 패턴을 탐지하기 위해서는 대상 문서를 정규표현식이 나타내는 복수의 문자열마다 반복해서 읽어야 하므로 효율적이지 못하다.
하나의 문자열이 아니라 문자열의 집합을 탐지하는 방식은 크게 두 가지로 나눌 수 있다. 먼저, 찾으려는 모든 문자열 각각을 입력받아 탐지하는 방식이다. 아호코라식(Aho-Corasick) 알고리즘, Commentz-Walter 알고리즘, Wu-Manber 알고리즘 등이 여기에 해당한다. 다음으로, 정규표현식 패턴을 입력받아 그것과 일치하는 문자열을 탐지하는 방식이다. 이 방식은 기본적으로 정규표현식을 비결정적 유한 오토마타(NFA; Non-deterministic Finite Automata) 또는 결정정 유한 오토마타(DFA; Deterministic Finite Automata)로 변환하여 문자열을 탐지한다.
아호코라식 알고리즘은 탐지할 복수의 문자열을 입력받아 오토마타를 구축하고 그것을 사용하여 대상 문서에서 주어진 문자열을 신속하게 찾는 알고리즘이다. 아호코라식 알고리즘은 대상 문서에서 입력 문자를 한번만 읽으면서 중첩된 문자열을 포함해 모든 문자열을 탐지할 수 있다.
기본적으로 문자열 탐지를 위한 아호코라식 오토마타의 구축은 주어진 문자열 집합으로부터 i) 트라이(trie)를 만들고, ii) 실패링크(failure link)를 연결하는 두 단계로 이루어진다. 하지만 개별 문자열들로 이루어지는 문자열 집합이 아니라 정규표현식으로 주어지는 문자열 집합을 입력받아 보다 더 효율적으로 처리하기 위해서는 다음 사항들을 고려해야 한다.
첫째, 정규표현식을 아호코라식 알고리즘에 입력할 수 있도록 변환해야 한다. 가장 단순한 방법은 정규표현식으로부터 모든 가능한 문자열의 집합을 만들어 사용하는 것이다. 하지만 이 방식은 만들어진 문자열의 개수가 매우 많은 경우 처리시간이 길어지는 것을 피할 수 없다. 따라서 개별 문자열 하나하나가 아니라 문자열 집합을 표현할 수 있는 특수한 형식의 사용하여 빠른 시간에 처리할 수 있는 방법이 필요하다.
둘째, 아호코라식 알고리즘에서 사용하는 트라이는 기본적으로 하나의 매칭 가능한 입력 문자 당 하나의 트랜지션(transition)을 사용한다. 이 경우 트라이 생성과 실패 링크 연결의 처리는 복잡하지 않지만, 탐지할 문자열 집합이 큰 경우 매우 큰 저장공간이 필요하다. 따라서 사용되는 트랜지션의 개수를 줄일 수 있는 방법이 필요하다.
셋째, 일반적인 아호코라식 알고리즘에서는 트리(tree) 형태의 트라이를 사용한다. 그런데 알고리즘의 특성상 동일한 정보를 표현하는 부분트리(sub-tree)가 많이 생성되어 저장공간의 낭비가 심하다. 따라서 동일한 부분트리를 중복없이 표현할 수 있는 형태의 트라이를 사용하는 것이 요구된다.
이에 본 발명이 이루고자 하는 기술적 과제는 정규표현식으로 주어진 패턴을 입력받아 보다 빠른 시간에 처리할 수 있고 트랜지션의 개수를 줄여 저장공간을 절약할 수 있는 아호코라식 오토마타 구축 장치 및 방법을 제공하는 데 있다.
상기 기술적 과제를 해결하기 위한 본 발명에 따른 아호코라식 오토마타 구축 장치는, 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환부; 상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성부; 및 상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성부를 포함하는 것을 특징으로 한다.
상기 기술적 과제를 해결하기 위한 본 발명에 따른 아호코라식 오토마타 구축 방법은, 컴퓨터에서 실행되는 프로그램에 의하여 수행되는 아호코라식 오토마타 구축 방법으로서, 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환 단계; 상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성 단계; 및 상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성 단계를 포함하는 것을 특징으로 한다.
본 발명은 정규표현식으로 주어진 패턴을 입력받아 보다 빠른 시간에 처리할 수 있고 트랜지션의 개수를 줄여 저장공간을 절약할 수 있는 아호코라식 오토마타 구축 장치 및 방법을 제공한다. 또한, 정규표현식 패턴의 탐지 시 중첩된 문자열을 처리하기 위해 탐색 범위를 재조정하는 등의 복잡함을 피할 수 있다.
그리고 정규표현식을 결합표준형으로 변환하여 트라이 생성의 입력으로 사용하므로 기존의 아호코라식 알고리즘과 같이 문자열 각각을 입력으로 넣어야 하는 번거로움을 줄일 수 있다. 또한 결합표준형의 각 문자 선택대안을 사용하여 트랜지션을 처리하므로 트라이 생성과 실패링크 생성을 빠른 시간에 완료할 수 있다.
이처럼 본 발명에 의하면 복잡한 정규표현식으로부터 효율적으로 문자열을 탐지할 수 있는 아호코라식 오토마타를 구축할 수 있다.
도 1은 본 발명의 일 실시예에 따른 아호코라식 오토마타 구축 장치의 블록도를 나타낸다.
도 2 및 3은 각각 일반적인 아호코라식 알고리즘으로 생성한 트라이 및 그로부터 실패링크를 연결한 최종 결과인 아호코라식 오토마타를 나타낸다.
도 4는 본 발명의 실시예에 따라 결합표준형들로부터 생성된 트라이를 나타낸다.
도 5는 본 발명의 실시예에 따라 도 4의 트라이에서 실패링크를 생성하여 얻어진 아호코라식 오토마타를 나타낸다.
도 6은 정규표현식의 파스 트리의 예를 나타낸다.
도 7 및 8은 각각 정규표현식을 결합표준형으로 변환하기 위한 HandleConcat 함수 및 HandleAltern 함수의 플로우차트를 나타낸다.
도 9는 HandleConcat 함수 및 HandleAltern 함수의 수도코드를 나타낸다.
도 10a 및 10b는 일반적인 아호코라식 알고리즘에 의해 트라이가 구축되는 과정의 예를 나타낸다.
도 11a 내지 11c는 본 발명의 실시예에 따라 결합표준형으로부터 트라이가 구축되는 과정의 예를 나타낸다.
도 12 및 13은 각각 결합표준형들의 집합으로부터 트라이를 생성하기 위한 BuildTrie 함수 및 Duplicate 함수의 플로우차트를 나타낸다.
도 14 및 15는 각각 BuildTrie 함수 및 Duplicate 함수의 수도코드를 나타낸다.
도 16a 및 16b는 일반적인 아호코라식 알고리즘에 의해 실패링크가 생성되는 과정의 예를 나타낸다.
도 17a 및 17b는 본 발명의 실시예에 따라 실패링크가 생성되는 과정의 예를 나타낸다.
도 18 및 19는 각각 트라이로부터 실패링크를 생성하기 위한 LinkFailure 함수 및 RefineTrans 함수의 플로우차트를 나타낸다.
도 20 및 21은 각각 LinkFailure 함수 및 RefineTrans 함수의 수도코드를 나타낸다.
도 22는 본 발명의 실시예에 따라 결합표준형들로부터 생성되는 트라이의 예를 나타낸다.
도 23은 도 22의 트라이로부터 실패링크를 생성하여 구축된 아호코라식 오토마타를 나타낸다.
이하에서는 도면을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다. 이하 설명 및 첨부된 도면들에서 실질적으로 동일한 구성요소들은 각각 동일한 부호들로 나타냄으로써 중복 설명을 생략하기로 한다. 또한 본 발명을 설명함에 있어 관련된 공지기능 혹은 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그에 대한 상세한 설명은 생략하기로 한다.
본 명세서에서 '문자'는 언어에 해당하는 전형적인 문자뿐만 아니라, 네트워크 패킷의 내용과 같이 비트로 이루어진 이진 데이터, 4 가지 기호로 표현되는 DNA 염기서열 등 일련의 심볼을 모두 포함한다.
도 1은 본 발명의 일 실시예에 따른 아호코라식 오토마타 구축 장치의 블록도를 나타낸다. 본 실시예에 따른 아호코라식 오토마타 구축 장치는 결합표준형 변환부(100), 트라이 생성부(200), 실패링크 생성부(300)를 포함한다.
결합표준형 변환부(100)는 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation) 등을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받는다. 결합표준형 변환부(100)는 입력받은 정규표현식을 이른바 결합표준형(concatenative normal form)들의 집합으로 변환한다. 여기서 결합표준형이란, 정규표현식의 특수한 형태로, 문자 선택대안(alternation)을 결합(concatenation)으로 연결한 형태로 정의된다.
예를 들어, 다음과 같은 정규표현식이 주어진다고 하자. 본 명세서에서, 정규표현식을 '/ /' 기호로 싸서 나타내기로 한다.
/([abc]|b[abc]){1,2}/
위 정규표현식을 결합표준형으로 변환하면, 다음과 같은 6개의 결합표준형이 나온다.
/[abc]/
/[b][abc]/
/[abc][abc]/
/[abc][b][abc]/
/[b][abc][abc]/
/[b][abc][b][abc]/
결합표준형을 구성하는 각각의 문자 선택대안은 그 결합표준형이 나타내는 문자열의 개별 자리에 올 수 있는 문자의 집합을 의미한다. 예를 들어 위에서 제시된 결합표준형들 중 /[b][abc]/는 문자열 집합 {ba, bb, bc}를 나타낸다. 즉, 각 문자열의 첫번째 자리는 b만 가능하며 두번째 자리는 a 또는 b 또는 c가 가능하다. 참고로, 주어진 정규표현식으로부터 변환된 결합표준형들을 선택대안으로 연결하면 그 정규표현식과 동일한 문자열 집합을 나타낸다. 단, 클레이니 스타를 가진 정규표현식은 결합표준형의 유한 집합으로 변환할 수 없다. 따라서 클레이니 스타를 한정된 반복 개수를 가진 수량자(quantification)로 바꾼 후 결합표준형을 변환해야 한다.
트라이 생성부(200)는 결합표준형 변환부(100)에서 나온 결합표준형들의 집합으로부터 트라이(trie)를 생성한다. 이때 트라이 생성부(200)는 결합표준형들의 집합에 포함되는 각 결합표준형을 차례로 처리하면서 트라이의 상태(state)(즉, 상태노드) 및 트랜지션(transition)을 갱신한다. 여기서, 생성되는 트라이의 각 트랜지션에는 개별 문자가 아니라, 하나 이상의 문자로 이루어지는 문자집합이 대응된다.
실패링크 생성부(300)는 트라이 생성부(200)에서 나온 트라이의 각 상태에 대하여 실패링크(failure link)를 생성한다. 이때 실패링크 생성부(300)는 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성한다. 실패링크 생성부(300)로부터 본 발명에 따른 아호코라식 오토마타가 출력된다.
트라이 생성부(200)와 실패링크 생성부(300)는 개별 문자가 아니라 문자집합을 이용하여 트랜지션을 생성하고 실패링크를 생성한다. 따라서 본 발명에 따른 아호코라식 오토마타는 하나의 트랜지션이 하나의 문자를 처리하는 것이 아니라, 문자집합을 처리한다. 문자집합을 구성하는 문자는 결합표준형의 선택대안을 구성하는 문자이다.
예를 들어, 다음과 같은 정규표현식이 주어진다고 하자.
/[ab][ab]|d[ac]/
위 정규표현식은 다음의 문자열 집합을 나타낸다.
{aa, ab, ba, bb, da, dc}
본 발명의 이해를 돕기 위해, 위 문자열 집합을 입력으로 하여 일반적인 아호코라식 알고리즘으로 생성한 트라이 및 그로부터 실패링크를 연결한 최종 결과를 도 2 및 도 3에 도시하였다.
도 2 및 도 3에서 원은 상태(state)를 나타내며 실선 화살표는 트랜지션(transition)을 나타낸다. 상태에 표시된 숫자는 상태의 고유번호(identifier)를 나타내며 실선 화살표 위의 문자는 해당 트랜지션이 처리하는 문자를 나타낸다. 예를 들어 상태 1에서 검사 대상 문서의 다음 입력 문자가 a라면 상태 2로 진행한다. 점선 화살표는 실패링크로서, 실패링크의 대상 상태를 가리킨다. 예를 들어 상태 2에서 다음 입력 문자를 처리하는 트랜지션이 없는 경우 상태 1로 돌아가 그 입력 문자를 처리할 수 있는지 확인한다. 점선 화살표가 표시되어 있지 않은 상태의 실패링크의 대상 상태는 고유번호가 0인 루트 상태이다. 검출된 문자열이 있는 상태는 회색으로 표시되어 있으며 검출된 문자열의 길이 등 부가정보(output)를 추가로 가질 수 있다.
위에서 주어진 정규표현식을 본 발명의 실시예에 따라 결합표준형들로 변환하면 다음과 같다.
/[ab][ab]/
/[d][ac]/
도 4는 위 결합표준형들로부터 생성된 트라이를 나타내고, 도 5는 도 4의 트라이에서 실패링크를 생성하여 얻어진 아호코라식 오토마타를 나타낸다. 도 5를 참조하면, 상태 0으로부터 상태 1로 향하는 트랜지션은 선택대안(혹은 문자집합) [ab]를 처리하고, 상태 1로부터 상태 2로 향하는 트랜지션은 선택대안 [ab]를 처리한다. 예를 들어 상태 0에서 검사 대상 문서의 다음 입력 문자가 a 또는 b라면 상태 1로 진행하고, 상태 1에서 검사 대상 문서의 다음 입력 문자가 a 또는 b라면 상태 2로 진행하여, 문자열이 검출된다. 상태 2에서 다음 입력 문자가 들어오면, 실패링크를 따라 상태 1로 돌아가 그 입력 문자를 처리할 수 있는지(즉, 그 입력 문자가 a 또는 b인지) 확인한다.
일반적인 아호코라식 알고리즘에 따른 도 3의 오토마타는 10개의 상태와 9개의 트랜지션을 가진다. 본 발명의 실시예에 따른 도 5의 오토마타는 6개의 상태와 5개의 트랜지션을 가지므로 그 크기가 현저히 줄어든 것을 알 수 있다.
결합표준형 변환부(100)가 정규표현식을 결합표준형들의 집합으로 변환하는 과정을 보다 상세히 설명하면 다음과 같다.
정규표현식을 결합표준형으로 변환하기 위해 먼저 구문 분석(syntax analysis 또는 parsing) 절차를 통해 파스 트리(parse tree)를 만든다. 파스 트리는 결합, 선택대안, 문자 노드로 구성되며, 루트(root)는 결합 노드로 한다. 각 결합 노드는 선택대안 노드를 자식으로 가지며, 선택대안 노드는 자식 노드들로 모두 결합 노드를 가지거나 모두 문자 노드를 가진다. 예를 들어 정규표현식 /[ab][ab]|d[ac]/의 파스 트리는 도 6과 같다. 여기서 C는 결합 노드를 A는 선택대안 노드를 나타낸다. 구문 분석 과정은 공지 기술을 이용하여 수행할 수 있으므로 구체적인 설명은 생략한다.
주어진 정규표현식 R을 결합표준형들로 변환하는 구체적인 방법은 다음과 같다. 먼저 구문 분석 함수인 Parse를 사용하여 R의 파스 트리를 구축한 후 파스 트리의 루트 노드 rnode로 HandleConcat을 호출한다. 여기서 Report는 결합표준형을 기록하는 함수이다. 이를 수도코드로 표현하면 다음과 같다.
let rnode := Parse(R)
HandleConcat(rnode, 0, [], Report)
도 7 및 8은 각각 정규표현식을 결합표준형으로 변환하기 위한 HandleConcat 함수 및 HandleAltern 함수의 플로우차트를 나타내고, 도 9는 HandleConcat 함수 및 HandleAltern 함수의 수도코드를 나타낸다.
HandleConcat은 결합 노드를 처리하며 HandleAltern은 선택대안 노드를 처리한다. cnf는 생성중인 결합표준형을 의미하며 SymAlt는 결합표준형의 각 자리에 오는 심볼 선택대안을 나타낸다. 수량자는 결합과 선택대안으로 변환하여 처리하거나 스택(stack)을 사용하여 쉽게 구현할 수 있으므로 구체적인 처리 방법은 생략하기로 한다.
트라이 생성부(200)가 결합표준형들의 집합으로부터 트라이(trie)를 생성하는 과정을 보다 상세히 설명하면 다음과 같다.
본 발명의 이해를 돕기 위해, 일반적인 아호코라식 알고리즘에 의해 트라이가 생성되는 과정의 예를 도 10a 및 10b에 도시하였다. 일반적인 아호코라식 알고리즘에서 트라이는 입력 문자열의 각 문자에 대하여 트랜지션과 상태 노드를 추가하여 구축된다. 예를 들어 도 10a와 같은 트라이가 구축된 상태에서, 입력 문자열 bc를 처리하면 도 10b와 같은 트라이가 된다. 입력 문자열에 대해 트라이의 각각의 상태에 많아야 하나의 트랜지션만 추가된다.
본 발명의 실시예에 따른 트라이 생성부(200)는 결합표준형들을 입력으로 하여 트라이를 생성하는데, 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이에 결합표준형에 포함된 선택대안을 적용하여 트라이의 상태 및 트랜지션을 갱신하는 과정이다.
결합표준형을 입력으로 받아 해당 선택대안으로 트라이를 갱신하기 위해서는, 트랜지션의 추가 뿐만 아니라 기존 부분트리의 복제도 필요하다. 예를 들어 도 11a와 같은 트라이가 구축된 상태에서, 결합표준형 /[bc][acd]/가 입력되면, 먼저 첫 번째 자리의 선택대안 /[bc]/를 처리하여 도 11b와 같은 트라이가 된다. 즉, 상태 1을 루트로 하는 부분트리를 복제하여 상태 1′를 루트로 하는 부분트리를 만들고, 상태 0으로부터 상태 1로 향하는 트랜지션과 상태 0으로부터 상태 1′로 향하는 트랜지션에 대응하는 문자집합을 조정한다. 이것은, /[bc]/의 다음 자리에 오는 선택대안 /[acd]/에 의해 상태 1의 부분트리는 변경되지 않지만 상태 1′의 부분트리는 변경될 수 있기 때문이다. 그 다음, 두 번째 자리의 선택대안 /[acd]/를 처리하면 도 11c와 같이 상태 3′의 부분트리가 상태 3″의 부분트리로 복제되고 상태 4가 추가된다.
트라이 생성부(200)가 결합표준형들의 집합으로부터 트라이(trie)를 생성하는 과정을 일반화하여 설명하면 다음과 같다.
트라이 생성부(200)는 루트 상태 하나를 가지는 트라이로부터 시작하여 결합표준형을 차례로 입력받아 처리해 나가면서 최종 트라이를 생성한다. 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이에 그 결합표준형을 구성하는 선택대안들을 적용하여 트라이의 상태 및 트랜지션을 갱신해 나가는 과정이다.
기 생성된 트라이의 i 번째 깊이에 있는 상태 s 에 결합표준형의 i 번째 선택대안(그에 대응하는 문자집합을 Li 라고 하자)을 적용하는 과정(이하 '과정 A'라 한다)은 상태 s 로부터 다음 상태로 향하는 각각의 트랜지션에 대하여 다음의 (a1) 내지 (a4)를 수행하는 과정을 포함한다.
(a1) 해당 트랜지션(j번째 트랜지션)을 t, 그에 대응하는 문자집합을 Cj, 그 대상 상태를 d 라고 하자.
(a2) Li 와 Cj 의 교집합이 없는 경우, 해당 트랜지션 t에 대해 아무런 처리도 하지 않는다.
(a3) Li 와 Cj 의 교집합이 있고, Li 가 Cj 에 속하는 모든 문자를 포함하는 경우, i 번째 선택대안 다음에 오는 선택대안이 있으면 상태 d에 그 선택대안을 적용하는 과정 A를 재귀적으로 수행하고, Li 에서 Cj 에 속하는 문자를 제거한다.
(a4) Li 와 Cj 의 교집합이 있고, Li 에는 없고 Cj 에만 속하는 문자가 존재하는 경우, 트랜지션 t 에 대응하는 문자집합(즉, t가 처리하는 선택대안)에서 Li 에 속한 문자들을 제외하고, 상태 d를 루트 상태로 하는 부분트리를 복제하고, Li 와 Cj의 교집합에 대응하여 상기 복제된 부분트리로 향하는 새로운 트랜지션을 상태 s에 추가하고, i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 복제된 부분트리의 루트 상태에 그 선택대안을 적용하는 과정 A를 재귀적으로 수행하고, Li 에서 Cj 에 속한 문자를 제거한다.
상태 s 의 모든 트랜지션에 대해 (a1) 내지 (a4)를 수행한 후 Li 에 문자가 남아 있으면, 상태 s 로부터 새로운 상태로 향하고 Li 에 대응하는 트랜지션을 추가하고, i 번째 선택대안 다음에 오는 선택대안이 있으면 새로운 상태에 그 선택대안을 적용하는 과정 A를 수행한다.
위에서 설명한 트라이 생성 과정을 도 11a 내지 11c를 참조로 예를 들어 설명하면 다음과 같다.
도 11a와 같은 트라이가 구축된 상태에서, 결합표준형 /[bc][acd]/가 입력되면, 상태 0에 선택대안 /[bc]/(즉, Li 는 [bc])를 적용하는 과정 A가 시작된다.
(a1) 트랜잭션 t 는 상태 0에서 상태 1로 향하는 트랜잭션이고, 그에 대응하는 문자집합 Cj는 [abc]이고, 그 대상 상태는 상태 1이다.
(a4) [bc] 와 [abc] 의 교집합이 있고, [bc] 에는 없고 [abc] 에만 속하는 문자 'a'가 존재하므로, t 가 처리하는 선택대안 [abc]에서 [bc]에 속한 문자 b와 c를 제외하고(따라서, t 가 처리하는 선택대안은 a 만 남게 됨), 상태 1을 루트 상태로 하는 부분트리를 복제하고, [bc] 와 [abc] 의 교집합인 [bc]에 대응하여 상기 복제된 부분트리로 향하는(즉, 상태 1′로 향하는) 새로운 트랜지션이 상태 0에 추가된다(도 11b 참조). [bc] 다음에 오는 선택대안 [acd]가 있으므로, 복제된 부분트리의 루트 상태 1′에 선택대안 [acd]를 적용하는 과정 A를 재귀적으로 수행한다.
상태 1′에 선택대안 [acd]를 적용하는 과정 A가 수행된 결과, 상태 1′에서 상태 3′로 향하는 트랜지션이 처리하는 선택대안 [bc]에서 c가 제외되고, 상태 3′의 부분트리가 상태 3″의 부분트리로 복제되고, 선택대안 c에 대응하여 상태 1′로부터 상태 3″로 향하는 새로운 트랜지션이 추가되고, 상태 1′로부터 새로운 상태 4로 향하고 선택대안 d에 대응하는 트랜지션이 추가된다(도 11c 참조).
결합표준형들의 집합으로부터 트라이를 생성하는 과정을 다른 방식으로 설명하면 다음과 같다.
트라이의 각 상태 노드는 트랜지션 집합 T, 매칭 문자열 정보 집합 O, 실패링크 대상 노드 f로 구성된 트리플 <T, O, f>로 표현되며, 각 트랜지션은 문자집합 C와 대상 상태 d로 구성된 튜플 <C, d>로 표현된다. 다음과 같이 각각의 결합표준형을 가지고 BuildTrie를 호출해 트라이 구축을 시작한다. 여기서 root는 트라이의 시작 노드이다.
let root := <[], [], nil>
for each cnf in generated concatenative normal forms:
root := BuildTrie(root, cnf, 0)
도 12 및 13은 각각 결합표준형들의 집합으로부터 트라이를 생성하기 위한 BuildTrie 함수 및 Duplicate 함수의 플로우차트를 나타내고, 도 14 및 15는 각각 BuildTrie 함수 및 Duplicate 함수의 수도코드를 나타낸다.
BuildTrie는 트라이를 생성하는 절차로 결합표준형의 각 자리에 대해 재귀적으로 호출된다. 입력된 결합표준형의 각 자리의 문자 선택대안과 기존 트랜지션이 처리하는 문자집합을 비교하여 트랜지션과 전이 대상 상태를 수정하거나 추가해 나간다. Duplicate는 부분 트리를 복제하기 위해 사용하는 함수이다. 참고로 본 절차를 진행할 때 만들어진 상태를 모두 보관하여, 새로운 상태를 만들 때, 기존 상태를 복제할 때, 상태를 갱신할 때 동일한 부분트리를 가지는 상태가 있으면 그것을 재사용하여 그래프를 구축할 수 있다.
실패링크 생성부(300)가 트라이 생성부(200)에서 나온 트라이의 각 상태에 대하여 실패링크(failure link)를 생성하는 과정을 보다 상세히 설명하면 다음과 같다.
본 발명의 이해를 돕기 위해, 일반적인 아호코라식 알고리즘에 의해 실패링크가 생성되는 과정의 예를 도 16a 및 16b에 도시하였다. 트랜지션이 문자 하나를 처리하는 일반적인 아호코라식 알고리즘에서는 실패링크 생성 시 새로운 상태가 추가되지 않는다. 예를 들어 도 16a와 같이 깊이 2의 상태까지, 즉 루트 상태에서 2개의 트랜지션을 통해 도달할 수 있는 상태까지 실패링크가 생성되어 있다고 하자. 실패링크가 표시되지 않은 상태는 실패링크가 루트 상태로 연결되는 것을 의미한다. 예컨대 도 16b에 도시된 바와 같이, 깊이 3에 위치한 상태 3의 실패링크는 상태 4로 연결된다. 즉, 상태 3에서 검사 대상 문서의 다음 문자에 해당하는 트랜지션이 없으면 상태 4로 진행하여 그 문자를 다시 고려해야 한다. 아호코라식 알고리즘에서 특정 상태의 실패링크는 루트에서 그 상태까지의 트랜지션으로 표현되는 문자열의 가장 긴 진접미사(the longest proper suffix)에 대응하는 상태로 연결된다. 따라서, 루트에서 상태 3까지의 트랜지션으로 표현되는 문자열 aab 의 가장 긴 진 접미사는 문자열 b 이므로 상태 3의 실패링크의 대상은 상태 4가 된다.
본 발명의 실시예에 따라, 트랜지션이 문자집합을 처리하는 경우, 실패링크 생성 시 부분트리가 복제될 수 있다. 예를 들어 도 17a와 같이 깊이 2의 상태까지 실패링크가 생성되어 있다고 하자. 다음 깊이에 위치한 상태 3으로부터 실패링크를 연결하기 위해서는 도 17b에 도시된 바와 같이 상태 3의 부분트리를 상태 3′의 부분트리와 상태 3″의 부분트리로 복제하고 상태 2로부터 연결되는 트랜지션이 처리하는 문자집합을 조정해야 한다. 결과적으로 각 상태가 나타내는 결합표준형의 가장 긴 진접미사에 해당하는 상태로 실패링크가 연결되는 것을 알 수 있다. 즉, 도 17b에서, 상태 3′는 /[ab][ab][ab]/를 나타내므로 가장 긴 진접미사인 /[ab][ab]/를 나타내는 상태 2로 실패링크가 연결되고, 상태 3″는 /[ab][ab][d]/를 나타내므로 가장 긴 진접미사인 /[d]/를 나타내는 상태 4로 실패링크가 연결된다. /[ab][ab][c]/를 나타내는 상태 3의 진접미사는 트라이에 존재하지 않으므로 실패링크는 루트 상태인 상태 0으로 연결된다(다만, 여기서 표시되지는 않음).
실패링크 생성부(300)가 실패링크를 생성하는 과정을 일반화하여 설명하면 다음과 같다.
깊이 1에 있는 모든 상태의 실패링크 대상은 루트 상태로 한다. 특정 깊이까지 실패링크의 생성을 모두 마치면 그 다음 깊이의 실패링크를 생성할 수 있다. 어떤 상태 s 에서 트랜지션 t 를 통해 상태 r 로 이른다고 하자. 상태 r 의 실패링크 연결을 위해, 상태 s 의 실패링크 대상을 상태 p 라 하고 변수(variable) C를 트랜지션 t 에 대응하는 문자집합으로 초기화한 후 다음의 (f1) 내지 (f2)(이하 '과정 F'라 한다)를 수행한다.
(f1) 상태 p 로부터 다음 상태로 향하는 각각의 트랜지션 u에 대하여 다음의 (f11) 내지 (f14)를 수행한다.
(f11) 트랜지션 u 에 대응하는 문자집합을 B, 트랜지션 u가 향하는 상태를 q 라 하자.
(f12) B와 C의 교집합이 없는 경우, 해당 트랜지션 u에 대해 아무런 처리도 하지 않는다.
(f13) C와 B가 동일한 경우 또는 C에 속한 모든 문자가 B에 속하는 경우, 상태 r의 실패 링크를 상태 q로 연결하고, C를 비운다.
(f14) B와 C에 동시에 속하는 문자와 C에만 속하는 문자가 존재하는 경우, 트랜지션 t 에 대응하는 문자집합(즉, t 가 처리하는 선택대안)을 C에만 속한 문자들로 수정하고, 상태 r의 부분트리를 복제한 후, B와 C의 교집합에 대응하여 상기 복제된 부분트리로 향하는 새로운 트랜지션을 상태 s 에 추가하고, 상기 복제된 부분트리의 루트 상태의 실패링크를 상태 q로 연결하고, C에서 B에 속한 문자를 제거한다.
(f2) 만일 C에 문자가 남아 있지 않거나 상태 p 가 루트 상태이면 종료한다. 그렇지 않으면(즉, C에 문자가 남아 있고 상태 p가 루트 상태가 아니면), 상태 p 를, 상태 p의 실패링크의 대상 상태로 변경하고, 과정 B를 재귀적으로 수행한다.
위에서 설명한 실패링크 생성 과정을 도 17a 및 17b를 참조로 예를 들어 설명하면 다음과 같다.
도 17a와 같이 깊이 2까지 실패링크의 생성을 모두 마치고 깊이 3의 실패링크를 생성하는 과정을 설명한다.
실패링크를 생성하고자 하는 상태 r 은 상태 3이다. 그러면, 상태 s 는 상태 2이고, 트랜지션 t는 상태 2에서 상태 3으로 향하는 트랜지션([abcd]에 대응)이고, 상태 p는 상태 1이다. 변수 C는 [abcd]로 초기화된다.
(f1) 상태 1로부터 다음 상태로 향하는 트랜지션 u는 상태 1로부터 상태 2로 향하는 트랜지션 하나이다.
(f11) 문자집합 B 는 [ab], 상태 q는 상태 2가 된다.
(f14) [ab]와 [abcd]에 동시에 속하는 문자와 [abcd]에만 속하는 문자가 존재하므로, 트랜지션 t 가 처리하는 선택대안 [abcd]를 [cd]로 수정하고, 상태 3의 부분트리를 상태 3′의 부분트리로 복제한 후, [ab]에 대응하여 상태 3′의 부분트리로 향하는 새로운 트랜지션을 상태 2에 추가하고, 상태 3′의 부분트리의 루트 상태 3′의 실패링크를 상태 2로 연결하고, [abcd]에서 [ab]를 제거하여 C는 [cd]가 된다.
(f2) C에 문자(cd)가 남아 있으므로, 상태 p를 상태 1의 실패링크의 대상상태인 상태 0으로 변경하고 과정 B를 다시 수행한다. 그 결과, 도 17b에 도시된 바와 같이, 트랜지션 t가 처리하는 선택대안이 [c]로 수정되고, 상태 3의 부분트리가 상태 3″의 부분트리로 복제되어 상태 2로부터 상태 3″로 향하는 트랜지션이 추가되고, 상태 3″의 실패링크가 상태 4로 연결된다(도 17b 참조).
결합표준형을 가지고 만든 트라이로부터 실패링크를 생성하는 과정을 다른 방식으로 설명하면 다음과 같다. 실패링크의 연결을 위해 트라이의 루트 노드를 가지고 LinkFailure를 호출하며 깊이 1에서부터 위치한 각각의 상태를 순서대로 처리한다. 이 단계에서도 역시 기존 상태를 기억했다가 동일한 부분 트리를 공유해서 사용할 수 있다.
도 18 및 19는 각각 트라이로부터 실패링크를 생성하기 위한 LinkFailure 함수 및 RefineTrans 함수의 플로우차트를 나타내고, 도 20 및 21은 각각 LinkFailure 함수 및 RefineTrans 함수의 수도코드를 나타낸다.
본 발명의 실시예에 따라 생성된 아호코라식 오토마타는, 하나의 문자만 처리하는 트랜지션을 가지는 기존의 아호코라식 오토마타와 비교할 때 오토마타 구축에 소요되는 시간 및 저장공간을 획기적으로 단축하면서도, 기존의 아호코라식 오토마타와 동일한 문자열 탐지 결과를 가져올 수 있다.
위에서는 비교적 단순한 정규표현식을 예로 들어 설명하였는 바, 비교적 복잡한 정규표현식으로부터 본 발명의 실시예에 따라 아호코라식 오토마타가 구축되는 과정의 예를 설명하면 다음과 같다.
예를 들어 다음과 같은 정규표현식이 주어진다고 하자.
/[a-d]jk|[a-d]?j[ae-h]j|e[f-k]/
위 정규표현식으로부터 변환된 결합표준형들은 다음과 같다.
/[a-d][j][k]/
/[j][ae-h][j]/
/[a-d][j][ae-h][j]/
/[e][f-k]/
도 22는 본 발명의 실시예에 따라 위 결합표준형들로부터 생성되는 트라이를 나타내고, 도 23은 도 22의 트라이로부터 실패링크를 생성하여 구축된 아호코라식 오토마타를 나타낸다.
도 23에 도시된 바와 같이, 복잡한 정규표현식임에도 불구하고, 상태 및 트랜지션의 개수가 각각 20개 이하로서 아호코라식 오토마타가 빠른 시간에 구축될 수 있고 저장공간이 절약됨을 알 수 있다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
본 발명의 실시예들은 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 집적 회로 구성들을 채용할 수 있다. 본 발명에의 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 실시예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 실시예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. "매커니즘", "요소", "수단", "구성"과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
실시예에서 설명하는 특정 실행들은 일 실시예들로서, 어떠한 방법으로도 실시 예의 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다. 또한, "필수적인", "중요하게" 등과 같이 구체적인 언급이 없다면 본 발명의 적용을 위하여 반드시 필요한 구성 요소가 아닐 수 있다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (18)

  1. 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환부;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성부; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성부를 포함하되,
    상기 실패링크 생성부는,
    상기 트랜지션에 의한 문자집합의 처리에 따라 상기 트라이의 트리 구조 변경이 수반되는 실패링크를 생성하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  2. 제1항에 있어서,
    상기 트라이 생성부가 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이에 상기 결합표준형을 구성하는 문자 선택대안을 적용하여 트라이의 상태 및 트랜지션을 갱신해 나가는 과정인 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  3. 제2항에 있어서,
    상기 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이의 i 번째 깊이에 있는 상태 s 에 상기 결합표준형의 i 번째 선택대안(그에 대응하는 문자집합을 Li 라고 하자)을 적용하는 과정(이하 '과정 A'라 한다)을 포함하고,
    상기 과정 A에서, 상기 상태 s 로부터의 j 번째 트랜지션을 t, 상기 트랜지션 t에 대응하는 문자집합을 Cj, 상기 트랜지션 t의 대상 상태를 d라 할 때, 상기 Li 와 상기 Cj 의 교집합이 있고 상기 Li 가 상기 Cj 에 속하는 모든 문자를 포함하는 경우, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 상태 d 에 그 선택대안을 적용하는 과정 A를 재귀적으로 수행하고, 상기 Li 에서 상기 Cj 에 속하는 문자를 제거하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  4. 제3항에 있어서,
    상기 Li 에서 상기 Cj 에 속하는 문자를 제거한 결과 상기 Li 에 문자가 남아 있으면, 상기 상태 s 로부터 새로운 상태로 향하고 상기 Li 에 대응하는 트랜지션을 추가하고, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 새로운 상태에 그 선택대안을 적용하는 과정 A를 더 수행하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  5. 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환부;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성부; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성부를 포함하고,
    상기 트라이 생성부가 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이의 i 번째 깊이에 있는 상태 s 에 상기 결합표준형의 i 번째 선택대안(그에 대응하는 문자집합을 Li 라고 하자)을 적용하는 과정(이하 '과정 A'라 한다)을 포함하고,
    상기 과정 A에서, 상기 상태 s 로부터의 j 번째 트랜지션을 t, 상기 트랜지션 t에 대응하는 문자집합을 Cj, 상기 트랜지션 t의 대상 상태를 d라 할 때, 상기 Li 와 상기 Cj 의 교집합이 있고, 상기 Li 에는 없고 상기 Cj 에만 속하는 문자가 존재하는 경우, 상기 트랜지션 t 에 대응하는 문자집합에서 상기 Li 에 속한 문자들을 제외하고, 상기 상태 d를 루트 상태로 하는 부분트리를 복제하고, 상기 Li 와 상기 Cj의 교집합에 대응하여 상기 복제된 부분트리로 향하는 새로운 트랜지션을 상기 상태 s에 추가하고, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 복제된 부분트리의 루트 상태에 그 선택대안을 적용하는 과정 A를 재귀적으로 수행하고, 상기 Li 에서 상기 Cj 에 속한 문자를 제거하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  6. 제5항에 있어서,
    상기 Li 에서 상기 Cj 에 속하는 문자를 제거한 결과 상기 Li 에 문자가 남아 있으면, 상기 상태 s 로부터 새로운 상태로 향하고 상기 Li 에 대응하는 트랜지션을 추가하고, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 새로운 상태에 그 선택대안을 적용하는 과정 A를 더 수행하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  7. 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환부;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성부; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성부를 포함하고,
    어떤 상태 s 에서 트랜지션 t 를 통해 상태 r 로 이를 때, 상기 실패링크 생성부가 상기 상태 r 로부터 실패링크를 연결하는 과정은,
    상기 상태 s의 실패링크 대상을 상태 p라 하고 변수 C를 상기 트랜지션 t 에 대응하는 문자집합으로 초기화 한 후, 상기 상태 p 로부터 다음 상태로 향하는 각각의 트랜지션 u 에 대하여, 상기 트랜지션 u 에 대응하는 문자집합을 B, 상기 트랜지션 u가 향하는 상태를 q 라 하고, 상기 C와 상기 B가 동일한 경우 또는 상기 C에 속한 모든 문자가 상기 B에 속하는 경우, 상기 상태 r의 실패링크를 상기 상태 q로 연결하는 과정을 포함하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  8. 탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환부;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성부; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성부를 포함하고,
    어떤 상태 s 에서 트랜지션 t 를 통해 상태 r 로 이를 때, 상기 실패링크 생성부가 상기 상태 r 로부터 실패링크를 연결하는 과정은,
    상기 상태 s의 실패링크 대상을 상태 p라 하고 변수 C를 상기 트랜지션 t 에 대응하는 문자집합으로 초기화하는 과정; 및
    상기 상태 p 로부터 다음 상태로 향하는 각각의 트랜지션 u 에 대하여, 상기 트랜지션 u 에 대응하는 문자집합을 B, 상기 트랜지션 u가 향하는 상태를 q 라 하고, 상기 B와 상기 C에 동시에 속하는 문자와 상기 C에만 속하는 문자가 존재하는 경우, 상기 트랜지션 t 에 대응하는 문자집합을 상기 C에만 속한 문자들로 수정하고, 상기 상태 r의 부분트리를 복제한 후, 상기 B와 상기 C의 교집합에 대응하여 상기 복제된 부분트리로 향하는 새로운 트랜지션을 상기 상태 s 에 추가하고, 상기 복제된 부분트리의 루트 상태의 실패링크를 상기 상태 q로 연결하고, 상기 C에서 상기 B에 속한 문자를 제거하는 과정(이하, '과정 F'라 함) 을 포함하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  9. 제8항에 있어서,
    상기 과정 F에서, 상기 C에서 상기 B에 속한 문자를 제거한 결과 상기 C에 문자가 남아 있고 상기 상태 p가 루트 상태가 아니면, 상기 상태 p를, 상기 상태 p의 대상 상태로 변경하고 상기 과정 F를 재귀적으로 수행하는 것을 특징으로 하는 아호코라식 오토마타 구축 장치.
  10. 컴퓨터에서 실행되는 프로그램에 의하여 수행되는 아호코라식 오토마타 구축 방법으로서,
    탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환 단계;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성 단계; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성 단계를 포함하되,
    상기 실패링크는,
    상기 트랜지션에 의한 문자집합의 처리에 따라 상기 트라이의 트리 구조 변경이 수반되는 실패링크를 포함하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  11. 제10항에 있어서,
    상기 트라이 생성 단계에서 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이에 상기 결합표준형을 구성하는 문자 선택대안을 적용하여 트라이의 상태 및 트랜지션을 갱신해 나가는 과정인 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  12. 제11항에 있어서,
    상기 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이의 i 번째 깊이에 있는 상태 s 에 상기 결합표준형의 i 번째 선택대안(그에 대응하는 문자집합을 Li 라고 하자)을 적용하는 과정(이하 '과정 A'라 한다)을 포함하고,
    상기 과정 A에서, 상기 상태 s 로부터의 j 번째 트랜지션을 t, 상기 트랜지션 t에 대응하는 문자집합을 Cj, 상기 트랜지션 t의 대상 상태를 d라 할 때, 상기 Li 와 상기 Cj 의 교집합이 있고 상기 Li 가 상기 Cj 에 속하는 모든 문자를 포함하는 경우, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 상태 d 에 그 선택대안을 적용하는 과정 A를 재귀적으로 수행하고, 상기 Li 에서 상기 Cj 에 속하는 문자를 제거하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  13. 제12항에 있어서,
    상기 Li 에서 상기 Cj 에 속하는 문자를 제거한 결과 상기 Li 에 문자가 남아 있으면, 상기 상태 s 로부터 새로운 상태로 향하고 상기 Li 에 대응하는 트랜지션을 추가하고, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 새로운 상태에 그 선택대안을 적용하는 과정 A를 더 수행하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  14. 컴퓨터에서 실행되는 프로그램에 의하여 수행되는 아호코라식 오토마타 구축 방법으로서,
    탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환 단계;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성 단계; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성 단계를 포함하고,
    상기 트라이 생성 단계에서 하나의 결합표준형을 처리하는 과정은, 기 생성된 트라이의 i 번째 깊이에 있는 상태 s 에 상기 결합표준형의 i 번째 선택대안(그에 대응하는 문자집합을 Li 라고 하자)을 적용하는 과정(이하 '과정 A'라 한다)을 포함하고,
    상기 과정 A에서, 상기 상태 s 로부터의 j 번째 트랜지션을 t, 상기 트랜지션 t에 대응하는 문자집합을 Cj, 상기 트랜지션 t의 대상 상태를 d라 할 때, 상기 Li 와 상기 Cj 의 교집합이 있고, 상기 Li 에는 없고 상기 Cj 에만 속하는 문자가 존재하는 경우, 상기 트랜지션 t 에 대응하는 문자집합에서 상기 Li 에 속한 문자들을 제외하고, 상기 상태 d를 루트 상태로 하는 부분트리를 복제하고, 상기 Li 와 상기 Cj의 교집합에 대응하여 상기 복제된 부분트리로 향하는 새로운 트랜지션을 상기 상태 s에 추가하고, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 복제된 부분트리의 루트 상태에 그 선택대안을 적용하는 과정 A를 재귀적으로 수행하고, 상기 Li 에서 상기 Cj 에 속한 문자를 제거하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  15. 제14항에 있어서,
    상기 Li 에서 상기 Cj 에 속하는 문자를 제거한 결과 상기 Li 에 문자가 남아 있으면, 상기 상태 s 로부터 새로운 상태로 향하고 상기 Li 에 대응하는 트랜지션을 추가하고, 상기 i 번째 선택대안 다음에 오는 선택대안이 있으면 상기 새로운 상태에 그 선택대안을 적용하는 과정 A를 더 수행하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  16. 컴퓨터에서 실행되는 프로그램에 의하여 수행되는 아호코라식 오토마타 구축 방법으로서,
    탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환 단계;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성 단계; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성 단계를 포함하고,
    어떤 상태 s 에서 트랜지션 t 를 통해 상태 r 로 이를 때, 상기 실패링크 생성 단계에서 상기 상태 r 로부터 실패링크를 연결하는 과정은,
    상기 상태 s의 실패링크 대상을 상태 p라 하고 변수 C를 상기 트랜지션 t 에 대응하는 문자집합으로 초기화 한 후, 상기 상태 p 로부터 다음 상태로 향하는 각각의 트랜지션 u 에 대하여, 상기 트랜지션 u 에 대응하는 문자집합을 B, 상기 트랜지션 u가 향하는 상태를 q 라 하고, 상기 C와 상기 B가 동일한 경우 또는 상기 C에 속한 모든 문자가 상기 B에 속하는 경우, 상기 상태 r의 실패링크를 상기 상태 q로 연결하는 과정을 포함하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  17. 컴퓨터에서 실행되는 프로그램에 의하여 수행되는 아호코라식 오토마타 구축 방법으로서,
    탐지할 문자열 집합을 결합(concatenation) 및 선택대안(alternation)을 포함하는 연산자를 이용하여 표현한 정규표현식을 입력받아, 상기 정규표현식을 결합표준형들-여기서 각 결합표준형은 문자 선택대안을 결합으로 연결한 형태로 정의됨-로 변환하는 결합표준형 변환 단계;
    상기 결합표준형들로부터 트라이(trie)를 생성하되, 각 결합표준형을 차례로 처리하면서 트라이의 상태(state) 및 트랜지션(transition)-여기서, 각 트랜지션에는 문자집합이 대응됨-을 갱신하여 트라이를 생성하는 트라이 생성 단계; 및
    상기 트라이의 각 상태(state)에 대하여 실패링크를 생성하되, 상기 트라이의 각 트랜지션에 대응되는 문자집합을 이용하여 실패링크를 생성하는 실패링크 생성 단계를 포함하고,
    어떤 상태 s 에서 트랜지션 t 를 통해 상태 r 로 이를 때, 상기 실패링크 생성 단계에서 상기 상태 r 로부터 실패링크를 연결하는 과정은,
    상기 상태 s의 실패링크 대상을 상태 p라 하고 변수 C를 상기 트랜지션 t 에 대응하는 문자집합으로 초기화하는 과정; 및
    상기 상태 p 로부터 다음 상태로 향하는 각각의 트랜지션 u 에 대하여, 상기 트랜지션 u 에 대응하는 문자집합을 B, 상기 트랜지션 u가 향하는 상태를 q 라 하고, 상기 B와 상기 C에 동시에 속하는 문자와 상기 C에만 속하는 문자가 존재하는 경우, 상기 트랜지션 t 에 대응하는 문자집합을 상기 C에만 속한 문자들로 수정하고, 상기 상태 r의 부분트리를 복제한 후, 상기 B와 상기 C의 교집합에 대응하여 상기 복제된 부분트리로 향하는 새로운 트랜지션을 상기 상태 s 에 추가하고, 상기 복제된 부분트리의 루트 상태의 실패링크를 상기 상태 q로 연결하고, 상기 C에서 상기 B에 속한 문자를 제거하는 과정(이하, '과정 F'라 함)을 포함하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
  18. 제17항에 있어서,
    상기 과정 F에서, 상기 C에서 상기 B에 속한 문자를 제거한 결과 상기 C에 문자가 남아 있고 상기 상태 p가 루트 상태가 아니면, 상기 상태 p를, 상기 상태 p의 대상 상태로 변경하고 상기 과정 F를 재귀적으로 수행하는 것을 특징으로 하는 아호코라식 오토마타 구축 방법.
KR1020200168282A 2020-12-04 2020-12-04 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법 KR102271489B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020200168282A KR102271489B1 (ko) 2020-12-04 2020-12-04 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법
US17/134,624 US11409806B2 (en) 2020-12-04 2020-12-28 Apparatus and method for constructing Aho-Corasick automata for detecting regular expression pattern

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200168282A KR102271489B1 (ko) 2020-12-04 2020-12-04 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법

Publications (1)

Publication Number Publication Date
KR102271489B1 true KR102271489B1 (ko) 2021-07-02

Family

ID=76896867

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200168282A KR102271489B1 (ko) 2020-12-04 2020-12-04 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법

Country Status (2)

Country Link
US (1) US11409806B2 (ko)
KR (1) KR102271489B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101382787B1 (ko) * 2013-03-21 2014-04-08 경기대학교 산학협력단 메모리 효율적인 결정적 유한 오토마타 구현을 위한 상태 감소 방법
KR20160093101A (ko) * 2011-06-24 2016-08-05 캐비엄, 인코포레이티드 정규 표현식들에 대한 컴파일러

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7634500B1 (en) * 2003-11-03 2009-12-15 Netlogic Microsystems, Inc. Multiple string searching using content addressable memory
US7539681B2 (en) * 2004-07-26 2009-05-26 Sourcefire, Inc. Methods and systems for multi-pattern searching
GB2437560A (en) * 2006-04-28 2007-10-31 Roke Manor Research Constructing Aho Corasick trees
US7630982B2 (en) * 2007-02-24 2009-12-08 Trend Micro Incorporated Fast identification of complex strings in a data stream
WO2009052039A1 (en) * 2007-10-16 2009-04-23 University Of Florida Research Foundation, Inc. Efficient intrusion detection
US8458354B2 (en) * 2010-01-27 2013-06-04 Interdisciplinary Center Herzliya Multi-pattern matching in compressed communication traffic
US20120221494A1 (en) * 2011-02-25 2012-08-30 International Business Machines Corporation Regular expression pattern matching using keyword graphs
US20150025980A1 (en) * 2013-03-15 2015-01-22 Netwourk, LLC Computer-based systems, apparatuses and methods for a social media platform for processing internet traffic through advertising revenue
EP3198475A1 (en) * 2014-09-26 2017-08-02 British Telecommunications Public Limited Company Efficient conditional state mapping in a pattern matching automaton

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160093101A (ko) * 2011-06-24 2016-08-05 캐비엄, 인코포레이티드 정규 표현식들에 대한 컴파일러
KR101382787B1 (ko) * 2013-03-21 2014-04-08 경기대학교 산학협력단 메모리 효율적인 결정적 유한 오토마타 구현을 위한 상태 감소 방법

Also Published As

Publication number Publication date
US11409806B2 (en) 2022-08-09
US20220179913A1 (en) 2022-06-09

Similar Documents

Publication Publication Date Title
JP5381710B2 (ja) ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
WO2009116646A1 (ja) マルチバイト処理向け文字列照合用有限オートマトン生成システム
JP5321589B2 (ja) 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
JP2009517782A (ja) 高性能正規表現パターンマッチングのための方法および装置
CN111159990A (zh) 一种基于模式拓展的通用特殊词识别方法及系统
US11301218B2 (en) Graph-based vectorization for software code optimization references
CN111831785A (zh) 敏感词检测方法、装置、计算机设备及存储介质
WO2021161429A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
WO2024114655A1 (zh) 一种规则表达式匹配方法、装置及计算机可读存储介质
JP2001229202A (ja) データ・シーケンスに関するパターン発見及び生成を実行する方法及び装置
CN108628907A (zh) 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法
Parberry A computer-assisted optimal depth lower bound for nine-input sorting networks
JP5514143B2 (ja) テストデータ生成装置及び方法
KR102271489B1 (ko) 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법
US11256488B1 (en) Graph-based vectorization for software code optimizations
KR102098255B1 (ko) 지식 임베딩 기반 지식 보강 시스템 및 방법
CN115562645B (zh) 一种基于程序语义的配置故障预测方法
US8661061B2 (en) Data structure, data structure generation method, information processing apparatus, information processing system, and computer-readable storage medium having stored therein information processing program
JP5514144B2 (ja) テストデータ生成装置及び方法
CN113821211B (zh) 命令解析方法、装置、存储介质和计算机设备
CN112416431B (zh) 一种基于编码序列表示的源代码片段成对比较方法
KR101769247B1 (ko) 계층적 인터벌 트리를 이용한 문자열 비교 방법 및 장치
Stepien et al. Challenges of composing XACML policies
KR20200094977A (ko) 오토마타 기반 증분적 중위 확률 계산 장치 및 방법
JP5514145B2 (ja) テストデータ生成装置及び方法

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant