KR0133406B1 - 한글정보 검색에 관한 검색문 동적변환방법(Dynamic Coversion Method of Retrieval Statement Concering Korean Language Information Retrieval) - Google Patents
한글정보 검색에 관한 검색문 동적변환방법(Dynamic Coversion Method of Retrieval Statement Concering Korean Language Information Retrieval)Info
- Publication number
- KR0133406B1 KR0133406B1 KR1019940036345A KR19940036345A KR0133406B1 KR 0133406 B1 KR0133406 B1 KR 0133406B1 KR 1019940036345 A KR1019940036345 A KR 1019940036345A KR 19940036345 A KR19940036345 A KR 19940036345A KR 0133406 B1 KR0133406 B1 KR 0133406B1
- Authority
- KR
- South Korea
- Prior art keywords
- search
- query
- statement
- token
- word
- Prior art date
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
본 발명은 한글정보검색시스템을 구현할 때 이용자가 원하는 정보를 찾기 위하여 입력하는 검색문(질의어)을 시스템 내부적으로 분석하고 실제로 데이타베이스내에 저장된 정보를 가져올 수 있도록 입력된 검색문에 대해서 DBMS 질의어인 SQL(Structured Query Language)로 동적변환해가는 방법에 관한 것이다.
검색문을 변환하고 질의의 결과를 제공하기 위해 6단계의 과정으로 나누었으며, 특히 렉시칼분석 및 연산자 우선순위에 의한 Bottom-Up 파싱방법, 중간코드생성 방법 등은 새로운 알고리즘을 고안하여 구현하였다.
정보검색시스템을 이용할때 이용자가 입력하는 검색문은 성향에 따라 다양하게 구성되며, 검색문은 정적(Static) 프로그램으로도 어느 정도까지는 경우의 수를 고려하여 미리 질의어를 구성해 놓을 수도 있으나 이용자들의 다양한 성향에 의해 작성되는 모든 경우의 검색문을 고려하여 미리 프로그램을 작성하는 것은 거의 불가능하다.
또한 특정 DBMS를 이용할때 DBMS에 의존하지 않고 적합율(Hit Rate)과 재현율을 높일수 있도록 검색시스템을 구현하기 위해서는 정적 프로그램으로 처리하기에는 많은 한계가 있다.
본 발명에 따라 이러한 문제점들이 해결되어질 수 있고 입력되어지는 검색문을 그때그때 시스템에서 분석하여 실제 DBMS의 해당 질의어로 동적변환을 하는 것이다.
정보검색시스템에서의 검색문작성은 시스템의 구성에 따라 상이하지만 여기서는 DBMS를 이용하고 논리연산자(AND, OR, NOT 등)의 조합에 의한 검색문을 작성하도록 되어있는 정보검색시스템에 한해서 적용되도록 하였다.
Description
제 1 도는 검색문의 동적변환 및 검색수행과정을 도시한 블럭도이다.
제 2 도는 유한오토메타를 이용한 상태천이도이다.
제 3 도는 파싱후 스택에 저장된 토근의 내용도이다.
제 4 도는 연산자 우선순위 관계도이다.
제 5 도는 테이블형태로 스택에 저장된 중간코드의 내용도이다.
제 6 도는 키워드, 키워드인버티드 및 접두코드 릴레이션의 내용도이다.
본 발명은 명령어 방식의 한글정보검색시스템을 구현할 때 이용자가 원하는 정보를 찾기 위하여 입력되는 검색문을 시스템 내부적으로 분석하고 실제로 데이타베이스내에 저장된 정보를 가져올 수 있도록 입력된 검색문과 대응되는 DBMS 질의어인 SQL(Structured Query Language) 문장으로 동적변환해가는 방법에 관한 것이다.
일반적으로 정보검색시스템이란 정보를 파일이나 데이타베이스를 이용하여 가공후 저장하여 놓고 이용자들이 필요에 따라 원하는 정보를 꺼내볼 수 있도록 하는 것으로, 이용방법에 따라 명령어(Command) 또는 메뉴(Menu) 방식, 그리고 이들을 혼합한 형태, 최근에 와서는 윈도우 환경하에서 그래픽 유저인터페이스를 이용한 하이퍼텍스트 방식(마우스 또는 방향키 이용), 터치 스크린 방식, 음성인식의 시스템들이 개발되었거나 연구개발중에 있다.
여기서는 명령어 방식의 한글정보검색시스템을 대상으로 하며, 이용자들이 정보를 찾기 위하여 이러한 시스템을 이용할 때 자신들의 성향에 따라 검색문을 다양하게 작성하거나 오류를 범할 수가 있게 된다.
따라서 시스템은 입력된 검색문에 대한 해석 및 분석을 정확히 하여 즉시 해당 정보를 제공하거나 다시 작성하도록 알려 주어야 한다. 해당 정보를 제공하기 위해서는 시스템은 검색문을 대응되는 데이타베이스 질의어로 변환하여 데이타베이스에 저장된 정보를 가져와야 한다.
정보를 가져오기 위해서 시스템 개발자는 정적(Static) 프로그램으로도 어느정도까지는 경우의 수를 고려하여 미리 입력되어질 수 있는 검색문을 예상하여 대응되는 데이타베이스 질의어를 구성하여 검색을 수행하도록 할 수도 있다.
그러나 정보서비스는 소수의 집단 또는 불특정 다수의 이용자들에게 정보를 제공해주기 때문에 이용자들의 직업, 학력, 시스템을 이용해 본 경험자 또는 전문가등 다양한 성향에 의해 작성되는 모든 경우의 검색문을 고려하여 미리 데이타베이스 질의어를 프로그램 내에 작성하여 놓는 것이 거의 불가능하게 되는 문제점이 있다.
따라서, 본 발명의 목적은 이러한 문제점을 해결하고 입력되어지는 검색문을 상기 입력 당시에 시스템에서 분석하여 실제적인 DBMS의 질의어로 동작변환을 함과 동시에 최적화(Optimize)하여 응답시간을 단축시켜줄 수 있도록 하는 것이다.
상기 목적을 달성하기 위하여 본 발명은 명령어 방식의 정보검색 시스템에서의 검색문작성은 시스템의 구성에 따라 상이하지만 DBMS를 이용하고 논리연산자(AND, OR, NOT 등)의 조합에 의한 검색문을 작성하도록 되어 있는 정보검색시스템에 한해서 검색문의 동적변환을 해가는 과정에 있어서 구문분석단계과, 시멘틱스 분석단계와, 중간코드 생성단계, 그리고 동적 SQL생성단계와 SQL처리단계, 및 검색결과 출력단계로 구성되어 이용자가 입력한 검색문을 질의어(Query)로 동적 변환을 한 후 검색수행결과를 출력하는 방법을 그 특징으로 한다.
이하, 첨부한 도면을 참조하여 본 발명의 일 실시예를 상세히 설명한다.
우선 본 발명에 관해 정의하면 다음과 같다.
정의 1 렉시칼 분석 (Lexical Analysis)
입력된 검색문을 각 단어(Word)별로 분리하여 각 단어에 상당하는 토큰(Token) 형태를 후위표현(Postfix Expression) 형태의 트리(Tree) 구조로 만들어 준다.
예를 들면 미국 * (이동통신 + 컴퓨터)라고 연산자가 중간에 위치한 중간표현형태를 이동통신 컴퓨터 + 미국 *과 같이 연산자 우선순위에 의해서 연산자가 후위에 오도록 후위표현형태의 트리구조로 만들어 스택(Stack)에 저장해 주는 것을 말한다.
정의 2 시멘틱스 분석 (Symantics Analysis)
구문분석 단계인 파싱(Parsing)에서 트리구조를 따라 노드(Node)에서 노드로 움직일 때 필요한 해석이나 분석을 하여 논리연산자의 유무를 판단하며, 이것에 따라 검색문을 질의어로 동적변환해 가는 과정을 논리연산자가 있는 경우와 없는 경우로 나누어 다르게 처리한다.
정의 3 중간코드 생성 (Intermediate Code Generation)
중간코드 생성은 논리연산자가 있는 경우에 한하며, 스택에 저장되어 있는 후위표현 형태의 트리구조를 가지고 실제적인 DBMS의 질의어로 변환하기 전에 중간과정으로 검색문내에 포함되어 있는 논리연산자, 주제어, 연산자우선순위에 따른 연산순서 등의 정보를 스택에 저장한다.
정의 4 질의어 생성
스택에 저장된 중간코드 정보를 가지고 실제 DBMS의 질의어로 동적변환하는 것을 말하며, 단 질의어 최적화(Optimization)는 미리 프로그램내에 정의되어 있어야 한다.
정의 5 검색수행 및 결과제공
생성된 질의어로 검색을 수행하고 그 결과에 대해 검색 세트(Set)을 구성하고 출력해 준다.
예를 들면 이동통신 329
컴퓨터 534
미국 232
S1 미국 * (이동통신 + 컴퓨터) 176
S1은 검색순서이며, 각 주제어나 검색문 뒤의 숫자는 데이타베이스에 저장된 레코드건수를 나타내고 있다.
이상과 같은 정의에 따라 본 발명에 대한 정보검색시스템의 검색문을 질의어로 동적변환을 해가는 방법에 대한 상세한 설명을 하면 다음과 같다.
제 1 도는 검색문의 동적변화 및 검색수행 과정을 도시한 블럭도로서, 본 발명과 관련하여 정보검색은 특정 주제에 관한 자료가 데이타베이스 내에 몇건이나 존재하는지 알아보는 것으로 시스템의 구성을 6단계의 과정 즉, 구문분석기, 시멘틱스분석기, 중간코드생성기, 동적 SQL 생성기, SQL 처리기, 검색결과 출력기를 거쳐 이용자가 입력한 검색문을 질의어(Query)로 동적변환을 한 후 검색을 수행(검색 SET 구성)하고 그 결과를 출력하도록 하였다.
제 1 도에서, 첫번째 단계인 구문분석기는 검색문을 구성하고 있는 주제어 또는 검색키들과 논리연산자(AND, OR), NOT 연산자, 연산우선순위를 변경할 수 있는 괄호 연산자들은 단어 형태의 토큰(Token)으로 분리한 다음 시스템에 정의된 검색문의 문법에 적법한지를 검사한 후, 연산자가 주제어들의 중간에 존재하는 중위표현(Infix Expression) 형태의 검색문을 연산자가 주제어 또는 검색키들의 뒤에 존재하는 후위표현(Postfix Expression) 형태로 변환한다.
예를 들면 전자통신 AND 미국 OR 영국이라는 검색문은 전자통신 미국 AND 영국 OR로 변환된다.
이러한 구문분석기를 크게 렉시칼분석 모듈과 파싱모듈로 나누었으며, 렉시칼분석 모듈의 기능은 입력된 검색문을 토큰이라는 기본단위로 분리하여 파싱모듈에 넘겨주는 일을 한다.
생성되는 토큰의 종류로는 주제어와 논리연산자 AND(*), OR(+), NOT(^), 괄호(()), 범위(:), 인접어(ADJ), 접두코드(년도:PY, 저저:AU), 검색 SET번호(SNO), 확장검색어(ENO)등이 있다.
제 2 도는 유한 오토메타를 이용한 상태천이도로서, 토큰을 생성하기 위해서는 토큰을 인식해야 하는데 본 발명과 관련하여 제 2 도와 같이 유한 오토메타(Finite Automata)를 이용한 상태 천이도(State Transition Diagram)를 이용하여 토큰을 인식하도록 하였다.
제 3 도는 파싱후 스택에 저장된 토큰의 내용도로서, 본 발명과 관련하여 상태천이도에 의해 인식된 토큰은 제 3 도와 같이 테이블 형태로 스택에 저장된 후 파싱모듈로 전달된다.
또한 파싱모듈의 기능은 입력된 검색문이 시스템에서 정의한 문법에 적합한지 여부를 검사하고 이를 분석하기 위하여 렉시칼모듈로부터 토큰을 전달받아 파싱(Parsing)을 수행하며 중위표현형태의 검색문을 후위표현형태로 변환한다.
파싱방법은 Bottom-up 파싱방법에 일종인 연산자 우선순위(Operator Precedence Parsing)을 이용하였다.
연산자 우선순위 파싱이란 터미널(Terminal)간에 연산순위 관계를 이용하여 감축(Reduction)을 반복하면서 파스트리(Parse Tree)를 생성하는 방식이다.
본 발명과 관련하여 제 4 도는 연산자 우선순위 관계도로서, 파싱을 수행하기 위해 형식문법(Formal Grammar)의 일종인 연산자 문법(Operator Grammar)를 이용하여 검색문을 정의하면 다음과 같다.
E → E+E:E*E:id
여기서 E는 비터미널(Non Terminal), +는 OR 연산자, *는 AND 연산자, id는 주제어를 나타낸다.
이 문법을 이용하여 연산자우선순위 관계를 정의하면 제 4 도와 같다.
연산자 우선순위에서 괄호 AND는 괄호가 AND보다 연산순위가 높고, OR 괄호는 OR가 괄호보다 연산순위가 낮다는 의미이며, 공백일 때는 검색반 오류가 된다.
여기서 $ 는 토큰이 아니라 검색문의 끝을 나타낸다.
이러한 연산자우선순위 파싱을 이용하여 검색문의 문법을 검사하고 중위표현형태의 검색문을 후위표현형태로 변환하는 알로리즘은 다음과 같다.
PROCEDURE Parser (S)
/* 입력 : 연산자 우선순위관계(제 4 도), 검색문(S) */
/* 출력 : 후위표현형태의 검색문(Store_Parsing_Token 모듈 */
/* 검색문은 A1A2A3......An$으로 이루어지고 스택에는 $만 존재 */
/* Get_Token 모듈은 검색문으로 부터 다음 토큰을 넘겨줌 */
/* Opeator_precedence는 프로그램내에 정의된 연산자 우선순위 테이블 */
Current Token Type = '$' /* 현재의 토큰의 종류에 검색문의 끝표시 */
Call Search_Token /* 토큰을 찾아오는 모듈 */
Initialize_Stack /* 토큰을 저장할 스택의 초기화 */
Top of Stack = 0
Token Type, Token Type Index = '$'
Call Push_Stack /* 스택에 토큰을 저장 */
Token Counter = 0
Call Get_Token (Current Token Type, Curren Token Type Index)
Call Search_Token
Do While (^(Token Type Index of Stack(Top of Stack) ='$'
Current Token Type Index = '$'))
End_Reduce = Top of Stack /* Set end of 감축(Reduction) */
Do I = Top of Stack To 1 By -1 Until (Token Type Index of
Stack (I)^ = Non_Terminal) /* Search Terminal on Top of Stack */
If Token Type Index of Token (I) ^ = Non_Terminal
Then
Index of Stack = I
End /* End of /Do Loop */
If Operator_Precedence (Token Type Index of Stack (Index of Stack),
Current Token Type Index) = ''
Then /* Reduce */
Do
Do Until (Operator_Precedence(Token Type Index of Stack(Top of
Stack), Terminal) = ''
Do Until (Token Type ^= Non_Terminal Token Type ^= ')'
Call Pop_Stack /* 스택으로 부터 토큰을 꺼내옴 */
If Token Type ^=Non_Terminal Token Type ^= ''
Then
Do ;
Terminal = Token Type
If Token Tyep ^= ' ('
Then
Call Store_Parsing_Token /* 후위표현형태의 검색문을 테이블에 저장하는
모듈 */
End
End /* Do Until */
Do While (Token Type Index of Stack(Top of Stack) = Non_Terminal)
Call Pop_Stack
End
End /* Do Until */
Call Valid_Reduction /* 감축의 유효여부를 검사하는 모듈 */
If ^ (Token Type Index of Stack(Top of Stack) = '$'
Current Token Type = '$'
Then
Do
Token Type, Token Type Index = Non_Terminal
Call Push_Stack
End
End /* Do */
Else
If Operator_Precedence(Token Type Index of Stack(Index of Stack),
Current Token Type) = '' or
Operator_Precedence(Token Type Index of Stack(Index of Stack),
Current Token Tyep) = '='
Then
Do /* Push Current Token into Stack */
Token Type = Current Token Type
Token Index = Current Token Index
Call Push_Stack
Call Get_Token(Current Token Type, Current Token Type Index)
Call Search_Token
End
Else
Call Syntax Error /* 검색문 에러 처리 모듈 */
End /* Do While */
본 발명과 관련하여 상기 제 1 도에서 두번재 단계인 시멘틱스 분석기(Symantics Analaysis)는 상기와 같이 구문분석기의 파싱(Parsing) 모듈에서 트리구조를 따라 노드(Node)에서 노드를 움직일 때 필요한 해석이나 분석을 하여 논리연산자의 유무를 판단한다.
이러한 논리연산자의 유무는 다음 단계인 중간코드 생성기를 거치거나 거치지 않도록 하여 검색문을 질의어로 동적변환해 가는 과정을 논리연산자가 있는 경우와 없는 경우로 나누어 다르게 처리하도록 한다.
또한, 세번째 단계인 중간코드 생성기는 논리 연산을 포함하고 있는 중위표현형태의 복합검색문이 구문분석기에 의해 후위표현형태의 검색문으로 변환되어 스택구조의 메모리에 저장된 검색문에 대해서, 완전한 동적 SQL 문의 생성을 위해 시스템내에 정의된 연산자를 중심으로 한 연산방법에 대해서 순차적으로 연산을 수행할 수 있도록 연산자 단위로 분해하여 중간 단계의 코드를 만들어 스택의 구조를 갖는 임시 메모리에 저장하는 일을 한다.
본 발명과 관련하여 제 5 도는 테이블형태로 스택에 저장된 중간코드의 내용도로서, 제 5 도를 참고하여 예를 들면 미국 AND 이동통신 OR 일본 AND 이동통신이라는 검색문이 구문 분석기에 의해서 미국 이동통신 AND 일본 이동통신 AND OR 형태의 검색문으로 변환하여 미국 AND 이동통신의 연산 방법을 T1, 일본 AND 이동통신의 연산방법을 T2에 그리고 T1 OR T2의 연산방법을 T3에 저장한다.
이러한 중간코드를 생성하는 알고리즘은 다음과 같다.
PROCEDURE Internediate_Code_Generation(E)
/* 입력 : 후위표현형태의 검색문 E */
/* 출력 : 테이블에 저장된 중간코드 */
/* Count_NextToken_Index : 다음 토큰의인덱스를 찾아옴 */
/* Search_NextToken(Token_Index) : 연산자를 찾아옴 */
Top of Stack = 0 /* 스택포인터를 초기화 */
Intermediate_Code_Index = 0
Temp_Index = 0 /* 중간코드의 임시저장장소 위치값 */
Do While (토큰 수 = 0)
Token_Index = Count_NextToden_Index
Next_Token = Search_Next_Token(Token_Index)
If Next_Token = Operand /* 다음 토큰이 연산자인지 검사 */
Then
Call Push_Stack /* 스택에 오버랜드의 형태(I : 토큰, T : Temp)와 토큰의
인덱스 또는 Temp의 위치 저장 */
Else
Do
Intermediate_Code_Index = Intermediate_Code_Index + 1
Intermediate Code Operator(Intermediate_Code_Index) = Next_Token
Call Pop_Stack /*스택에서 토큰(오퍼랜드 2)을 꺼내옴 */
/* Operand1_Type (I : 토큰, T : Temp) */
/* Operand1_Index : 토큰의 인덱스 또는 Temp위치 */
IntermediateCodeOp2Type(Intermediate_Code_Index) = Operand2_
Type
IntermediateCodeOp2Type(Intermediate_Code_Index) = Operand2_
Index
Call Pop_Stack /* 스택에서 토큰(오퍼랜드 1)을 꺼내옴 */
/* Operand1_Type (I: 토큰, T: Temp) */
/* Operand1_Index : 토큰의 인덱스 또는 Temp위치 */
IntermediateCodeOp1Type(Intermediate_Code_Index) = Operand2_
Type
IntermediateCodeOp1Type(Intermediate_Code_Index) = Operand2_
Index
Temp_Index = Temp_Index =+ 1
IntermediateCodeResType(Intermediate_Code_Index) = 'T'
IntermediateCodeResType(Intermediate_Code_Index) = Temp_Index
Call Push_Stack /* 스택에 중간코드 저장 : 'T' 및 Temp_Index */
End
End /* Do While (토큰 수) */
이와같이 중간코드생성기에 의해 중간코드가 생성되고 난후 다음 단계로 실제로 데이터베이스내의 정보를 가져오기 위해 SQL 생성기를 통해 시스템에서 이용하는 DBMS의 질의어인 SQL 문장으로 변환한다.
DBMS의 질의어인 SQL은 국제표준화기구인 ISO와 ANSI에서 채택한 DBMS 표준어로 일반적인 관계형 DBMS의 관계형 대수와 관계형 해석의 구성요소 및 특징을 결합한 질의어이다.
또한 SQL은 이러한 질의어 기능외에도 데이타베이스 구조를 정의하는 데이터 정의어(DDL : Data Definition Language) 기능, 데이타베이스 내의 데이터를 수정하는 데이터 조작어(DML : Data Control Language) 기능, 데이타베이스의 보안 및 통제를 하는 제어어(DCL : Data Control Language) 기능 등을 갖는 강력한 데이터베이스 언어이다. 본 발명과 관련하여 제 6 도는 키워드, 키워드인버티드 및 접두코드 릴레이션을 나타낸 내용도로서, SQL 생성기에 의해 주제어와 논리연산자 AND, OR, NOT, 그리고 범위검색, 절단검색, 접두코드, 검색 세트번호, 확장검색어로 구성된 검색문을 제 6 도와 같은 3개의 릴레이션이 존재한다는 가정하에 SQL의 SELECT 문장으로 동적변환 해가는 알고리즘과 방법을 보면 다음과 같다.
먼저 SELECT 문장은 관계형 대수연산인 합집합, 교집합, 차집합 등에 해당하는 집합연산인 Union, Intersect, Minus를 제공하는데 검색시스템은 질의기능이 주를 차지하기 때문에 질의기능을 제공하는 SELECT 문장을 이용하며, SELECT 문장의 기본구조는 SELECT, FROM, WHERE의 세절로 구성된다.
- SELECT 절 : 관계형대수의 추출연산에 해당하며, 질의의 결과에 나타나기를 원하는 애트리뷰트(필드)들을 열거한다.
- FROM 절 : 관계형대수의 선택술어를 이절에 표현해주며, FROM절에 열거된 릴레이션들의 애트리뷰트들의 제한조건에 관한 술어(Predicate)를 열거한다.
SELECT A1, A2,..........,An
FORM R1, R2,..........,Rn
WHERE P
여기서 A1, A2,..........,An은 애트리뷰트, R1, R2,..........,Rn은 릴레이션, P는 술어를 나타내며, DBMS는 SELECT 문장을 처리하기 위해서 FROM 절에 열거한 릴레이션들의 카티젼곱(Cartesian Product)을 구한후 이 결과를 WHERE 절에 열거한 술어로 선택연산을 수행한다. 그리고 마지막으로 위의 결과를 SELECT 절에 열거한 애트리뷰트들에 대해 해당값들을 추출한다.
PROCEDURE SQL_Generation(C)
/* 입력 : 중간코드형태의 검색문 C */
/* 출력 : SQL의 SELECT 문장 */
Do While(중간코드 ^= '$') /* $ : 중간코드의 끝 */
Count_IntermediateCode_Index /* 중간코드의 인덱스를 계산 */
If 중간코드의 인덱스 2 /* 검색문내에 연산자가 하나인 경우 */
Then
Do
Call Query_Generation /* 질의문(SQL) 생성 */
Return
End
Else /* 검색문내에 연산자가 2 이상인 경우 */
Do
Call Query_Generation /* 질의문(SQL) 생성 */
Store_Intermediate_SQL /* 중간형태의 SQL문을 Temporay에 저장 */
End
Query_Generation /* 질의어(SQL)문을 생성하는 순환 프로시쥬어 */
Switch(Operator) /* 연산자 */
Case 1 (AND) : Generate SELECT 문장 with 'INTERCT' 기능
Case 2 (OR ) : Generate SELECT 문장 with 'UNION' 기능
Case 3 (NOT) : Generate SELECT 문장 with 'NOT' 기능
Case 4 (절단) : Generate SELECT 문장 with '절단' 기능
Case 5 (범위) : Generate SELECT 문장 with '범위' 기능
Case 6 (접두코드) : Generate SELECT 문장 with '접두코드' 기능
Otherwise :
End /* End of Switch(Operator) */
End /* End of Query_Generation PROCEDURE */
CompleteOptimize_SQL_Statement /* 최종 SQL문 생성 및 최적화 */
End /* End of Do While (중간코드 = '$') */
- 주제어 검색
컴퓨터에 관련된 정보를 찾으시오 라는 질의의 검색문을 SELECT 문장으로 변환하면 다음과 같다.
Select 레코드건수
From 키워드 릴레이션
Where 키워드 = 컴퓨터
- 접두코드 검색
제목내에 컴퓨터란 주제어가 포함된 정보를 찾으시오 라는 질의의 검색문을 SELECT 문장으로 변환할 때 Count는 총 레코드수를 계산해주는 내장함수이고, T1는 제목내의 단어중에서 라는 시스템에서 정의한 접두코드라고 할때 다음과 같다.
Select Count(레코드번호)
From 접두코드 릴레이션
Where T1 = 컴퓨터
- 절단( ? ) 검색
주제어가 통신으로 시작되는 모든 정보를 찾으시오 라는 질의의 검색문을 SELECT 문장으로 변환할 때 LIKE는 절단기능을 처리해주는 질의어중의 파라메터라고 할때 다음과 같다.
Select Count(레코드번호)
From 키워드 릴레이션
Where 키워드 LIKE ?= 통신
- AND 연산
컴퓨터와 반도체에 모두 관련된 레코드를 찾으시오 라는 질의를 검색문으로 표현하면 컴퓨터 AND 반도체이 된다.
상기 제 6 도의 릴레이션들에서 컴퓨터의 키워드번호 (또는 등의어 번호)가 1이고 반도체의 키워드번호(또는 동의어번호)가 2라고 가정하면 이 검색문을 SELECT 문장으로 표현하면 다음과 같다.
(Select 레코드번호
From 키워드 인버티드 릴레이션
Where 키워드번호(또는 동의어번호) = 1)
INTERSECT
Select 레코드번호
From 키워드 인버티드 릴레이션
Where 키워드번호(또는 동의어번호) = 2)
여기에서 INTERSECT 연산은 DBMS에 따라 제공하거나 안하는 경우가 있을 수 있으며, 제공하지 않을 경우에는 JOIN 연산을 이용하여 다음과 같이 변환할 수 있다.
Select A. 레코드번호
From 키워드 인버티드 릴레이션 A, 키워드 인버티드 릴레이션 B
Where A. 키워드번호(또는 동의어번호) = 1
AND B. 키워드번호(또는 동의어번호) = 2
- OR 연산
컴퓨터 또는 반도체에 모두 관련된 레코드를 찾으시오 라는 질의를 검색문으로 표현하면 컴퓨터 OR 반도체이 된다.
제 6 도의 릴레이션들에서 컴퓨터의 키워드번호(또는 동의어번호)가 1이고 반도체의 키워드번호(또는 동의어번호)가 2라고 가정하면 이 검색문을 SELECT 문장으로 표현하면 다음과 같다.
(Select 레코드번호
From 키워드 인버티드 릴레이션
Where 키워드번호(또는 동의어번호) = 1)
UNION
Select 레코드번호
From 키워드 인버티드 릴레이션
Where 키워드번호(또는 동의어번호) = 2)
NOT(^) 연산
이동통신에 관한 자료중 미국을 제외한 각국의 모든 자료를 검색하는 경우의 질의를 검색문으로 표현하면 이동통신^미국이 된다.
이동통신에 관한 키워드번호(또는 동의어번호)가 1이고 미국이라는 키워드번호(또는 동의어번호)가 2라고 가정하고 이 검색문을 DL2 SQL문으로 표현할 때 실제로 NOT 연산을 제공하는 직접적인 SQL문은 없으므로 제공되는 기능을 조합시켜 생성하였다.
Select Distinct 레코드번호
From 키워드 인버티드 릴레이션
Where 키워드번호(또는 동의어번호) In ( 1 )
And A.레코드 번호 NOT In ( Select A. 레코드번호
From 키워드 인버티드 릴레이션 A, 키워드 인버티드 릴레이션 B
Where A. 키워드번호(또는 동의어번호) = 1
And B. 키워드번호(또는 동의어번호) = 2
And A. 레코드번호 = B. 레코드번호
- 범위(:) 연산
범위연산(:)은 1991년에서 1993년까지의 이동통신에 관한 자료를 찾고자 할 경우 의 질의를 검색문으로 표현하고자 할 때, AND와 OR 연산 조합만으로는 PY=1991 AND 이동통신 OR PY=1992 AND 이동통신 OR PY=1993 AND 이동통신 과 같이 찾고자 하는 년도(검색키)가 많아질 경우 검색문이 복잡하게 되나, 범위연산을 이용할 경우에는 이동통신 AND PY=1991:1993 처럼 간단하게 구성할 수 있게 된다.
여기에서 이동통신에 관한 키워드번호(또는 동의어번호)가 1이고, 년도 검색키의 접두코드를 PY라고 가정하면
Select Distinct 레코드번호
From 키워드 인버티드 릴레이션 A, 검색키 릴레이션 B
Where A. 키워드번호(또는 동의어번호) In ( 1 )
And B. PY Between '1991' And '1993'
And A. 레코드번호 = B. 레코드번호
- 괄호(()) 연산
미국의 이동통신이나 컴퓨터에 관한 자료를 찾고자 할 경우 의 질의를 검색문으로 표현하고자 할때, AND와 OR 조합만으로는 미국 AND 이동통신 OR 미국 AND 컴퓨터 과 같이 생성할 수도 있으나, 미국 AND (이동통신 OR 컴퓨터)와 같이 괄호 연산을 이용하여 간단하게 생성하게 된다.
여기에서 미국에 관한 키워드번호(또는 동의어번호)가 1이고, 이동통신에 관한 키워드번호가 2, 컴퓨터에 관한 키워드번호가 3이라고 가정하면
Select Distinct 레코드번호
From 키워드 인버티드 릴레이션 A, 키워드 인버티드 릴레이션 B
Where 키워드번호(또는 동의어번호) In ( 1 )
And (키워드번호(또는 동의어번호) = 2
Or 키워드번호(또는 동의어번호) = 3
And A. 레코드번호 = B. 레코드번호
이상과 같이 검색문에 해당하는 질의어가 생성되면 다음단계로 SQL 처리기는 해당 데이터베이스로 부터 정보를 가져오고 그 결과에 대해 검색 세트(SET)를 구성한다.
검색 세트는 검색이 수행되는 순서이며, 이 정보는 검색문의 일종으로 이용될 수도 있다.
최종단계로 검색결과 출력기는 검색결과를 화면에 보여준다.
예를 들어 첫번째로 입력된 검색문이 미국 AND (이동통신 OR 컴퓨터) 인 경우에 컴퓨터란 주제어만 동등어라고 가정할때 검색결과는, 아래와 같은 형태를 갖는다.
239 이동통신 -------- [1]
157 @컴퓨터 -------- [2]
37 미국 AND (이동통신 OR 컴퓨터) -------- [3]
[1]은 주제어 이동통신에 관한 레코드건수가 총 239건이라는 의미이고, [2]에서 @ 표시는 컴퓨터란 주제어는 동등어 처리가 되었다는 의미이고 컴퓨터에 관한 레코드건수가 총 157건이라는 의미이다.
그리고 [3]은 검색문 미국 AND (이동통신 OR 컴퓨터)가 첫번째의 세트로 구성(S1)되고 총 37 건의 레코드건수가 시스템내의 전문정보데이터베이스에 저장되어 있다는 의미이다.
이상 설명한 바와 같이 본 발명에 의하여 입력되어지는 검색문을 상기 입력 당시에 시스템에서 분석하여 실제 DBMS의 해당 질의어를 동적변환을 함과, 동시에 최적화시켜 응답시간을 단축시키는 효과를 볼 수 있다.
Claims (3)
- 정보검색시스템의 검색문을 동적변환하고 실행시키는 방법에 있어서,입력된 검색문을 각 단어(Word)별로 분리하여 각 단어에 상당하는 토큰(Token)을 생성하고 시스템에 정의된 검색문의 문법에 적합한지를 검사한후 변환시키는 구문분석단계와 ;상기 구문분석 단계중 파싱모듈에서 트리구조를 따라 노드(Node)에서 노드로 움직일때 필요한 해석이나 분석을 하여 논리 연산자의 유무를 판단하는 시멘틱스 분석(symantics Analysis) 단계와 ;상기 시멘틱스 분석 단계에서 논리연산자가 있는 경우에 한하여 스택 구조의 메모리에 저장되어 있는 검색문에 대해서 연산자 단위로 분해해서 중간 단계의 코드를 형성하여 스택의 구조를 갖는 임시 메모리에 저장하는 중간코드 생성단계와 ;상기 스택에 저장된 중간코드 정보를 실제 DMS의 질의어 (SQL)로 동적 변환하는 질의어 생성단계와;상기 질의어 SQL 생성단계후에 해당 데이타베이스로부터 정보를 가져와서 검색세트를 구성하는 질의의 처리 단계 ; 및 상기 생성된 질의어로 검색을 수행한후 그 결과에 대한 검색결과를 출력하는 단계로 구성됨을 특징으로 하는 한글 정보 검색에 관한 검색문 동적 변환방법.
- 제 1 항에 있어서,상기 구분 분석 단계는 입력된 검색문을 각 단어별로 분리하여, 유한오토메타를 이용하여 각 단어에 상당하는 단어형태의 토큰으로 분리하는 렉시칼 분석 단계를 포함하는 것을 특징으로 하는 한글 정보 검색에 관한 검색문 동적 변환방법.
- 제 1 항에 있어서,상기 구분 분석 단계는 상기 시스템에 정의된 검색문의 문법에 적합한지를 검사한지를 분석하기 위하여 상기 렉시칼 분석단계후에 출력된 상기 토큰을 연산자 우선순위에 의하여 Bottom-Up 파싱(Parsing)을 수행하며 연산자가 주제어들의 중간에 존재하는 중위표현(Infix Expreesion) 형태의 검색문을 연산자가 주제어 또는 검색키의 후위에 배치되는 후위표현 형태의 트리(Tree)구조로 변환시키는 파싱방법을 포함하는 것을 특징으로 하는 한글 정보검색에 관한 검색문 동적 변환 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1019940036345A KR0133406B1 (ko) | 1994-12-23 | 1994-12-23 | 한글정보 검색에 관한 검색문 동적변환방법(Dynamic Coversion Method of Retrieval Statement Concering Korean Language Information Retrieval) |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1019940036345A KR0133406B1 (ko) | 1994-12-23 | 1994-12-23 | 한글정보 검색에 관한 검색문 동적변환방법(Dynamic Coversion Method of Retrieval Statement Concering Korean Language Information Retrieval) |
Publications (2)
Publication Number | Publication Date |
---|---|
KR960025181A KR960025181A (ko) | 1996-07-20 |
KR0133406B1 true KR0133406B1 (ko) | 1998-05-15 |
Family
ID=19403190
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019940036345A KR0133406B1 (ko) | 1994-12-23 | 1994-12-23 | 한글정보 검색에 관한 검색문 동적변환방법(Dynamic Coversion Method of Retrieval Statement Concering Korean Language Information Retrieval) |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR0133406B1 (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20020030545A (ko) * | 2000-10-18 | 2002-04-25 | 남 데이비드 이 | 인공지능과 자연어처리 기술에 기반한 자연어 문장형질문에 대한 자동 해답 및 검색 제공 방법 |
KR100741283B1 (ko) * | 1999-12-14 | 2007-07-19 | 주식회사 케이티 | 정보 검색시스템에서의 정보 검색을 위한 부분검색 장치 및 그 방법과 이의 인덱스 테이블 구축 방법 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100659542B1 (ko) * | 2006-03-13 | 2006-12-19 | 주식회사 퓨전소프트 | 한글 검색 방법과 그 시스템 및 컴퓨터로 읽을 수 있는 기록매체 |
KR101989485B1 (ko) * | 2017-12-28 | 2019-06-14 | 주식회사 케이티 | Gs1 기반 사용자 정의형 이벤트 추출 시스템 및 그 방법 |
CN113268495A (zh) * | 2021-05-25 | 2021-08-17 | 深圳壹账通智能科技有限公司 | 数据搜索方法、装置、电子设备及存储介质 |
-
1994
- 1994-12-23 KR KR1019940036345A patent/KR0133406B1/ko not_active IP Right Cessation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100741283B1 (ko) * | 1999-12-14 | 2007-07-19 | 주식회사 케이티 | 정보 검색시스템에서의 정보 검색을 위한 부분검색 장치 및 그 방법과 이의 인덱스 테이블 구축 방법 |
KR20020030545A (ko) * | 2000-10-18 | 2002-04-25 | 남 데이비드 이 | 인공지능과 자연어처리 기술에 기반한 자연어 문장형질문에 대한 자동 해답 및 검색 제공 방법 |
Also Published As
Publication number | Publication date |
---|---|
KR960025181A (ko) | 1996-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2170235C (en) | Method and apparatus for the modeling and query of database structures using natural language-like constructs | |
Abiteboul et al. | Querying documents in object databases | |
Carroll | Practical unification-based parsing of natural language | |
EP0610760B1 (en) | Document detection system with improved document detection efficiency | |
US7398201B2 (en) | Method and system for enhanced data searching | |
US4829423A (en) | Menu-based natural language understanding system | |
EP0439937B1 (en) | A direct manipulation interface for boolean information retrieval | |
EP1399842B1 (en) | Creation of structured data from plain text | |
JP2000315216A (ja) | 自然言語検索方法および装置 | |
JPH11110413A (ja) | データベース検索結果を生成するための方法および装置 | |
CN114528846A (zh) | 一种用于人工智能的概念网络及其生成方法 | |
EP0118187B1 (en) | Menu-based natural language understanding system | |
KR0133406B1 (ko) | 한글정보 검색에 관한 검색문 동적변환방법(Dynamic Coversion Method of Retrieval Statement Concering Korean Language Information Retrieval) | |
Abiteboul et al. | A logical view of structured files | |
Ghodke et al. | Fangorn: A system for querying very large treebanks | |
CN115345153A (zh) | 一种基于概念网络的自然语言生成方法 | |
Chandra et al. | Natural language interfaces to databases | |
Cox et al. | Representing and accessing extracted information | |
Kellogg | On-line translation of natural language questions into artificial language queries | |
Lange | dACL: the deep constraint and action language for static and dynamic semantic definition in Melanee | |
JPH07244669A (ja) | 文書検索方式 | |
Keller | Programming for Corpus Linguistics with Python and Dataframes | |
Goodman | PyDelphin Documentation | |
Voisin | A bottom-up adaptation of Earley's parsing algorithm | |
Abiteboul et al. | Querying the file |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20111004 Year of fee payment: 15 |
|
FPAY | Annual fee payment |
Payment date: 20111031 Year of fee payment: 20 |
|
EXPY | Expiration of term |