제 7 장 어휘분석과 불용어목록 7.2 어휘분석 자동색인작업을 위한 어휘분석

Slides:



Advertisements
Similar presentations
National University 1 / 24 컴퓨터 개론 및 실습 강의 11 (parser)
Advertisements

Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
제 5 장 구문 정의  프로그래밍 언어의 기본 문자 집합  Alphabet 문자 (A-Z) 26 개 + 아라비아 숫자 (0 - 9) 10 개  예 ) Fortran : 기본 문자 집합 + 13 개의 특수문자 (=+ - * / ( ),. $ ‘ : 공백 ) Algol60.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Lexical Analysis 1 컴파일러 입문 제 4 장 어휘 분석. Lexical Analysis Page 2 목 차목 차목 차목 차 4.1 서론 4.2 토큰 인식 4.3 어휘분석기의 구현 4.4 렉스 (Lex)
컴퓨터와 인터넷.
YACC 응용 예 Desktop Calculator.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
제  2 장  어휘 분석.
제3장 게임기본모듈 Page 153 ~ 182.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
Hybrid INDIGO project 중간보고
Lesson 3. 입출력과 제어문.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
4장 어휘 / 구문 분석 (Term project 포함)
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
7. while 문의 흐름 제어.
[Homework #3] 오류 찾기 문제 BankAccount 문제 MyMetric 문제
어휘분석기 생성기 Lex.
제3장 스택과 큐.
Heesang kim PL/SQL 3 Heesang kim.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
임베디드 실습 # LED, 7’Segment 제어
6장. printf와 scanf 함수에 대한 고찰
프로그래밍 랩 – 7주 리스트.
11장. 1차원 배열.
어서와 C언어는 처음이지 제14장.
5. Context-free 문법 5-1. 서 론 5-2. 유도와 유도 트리 5-3. CFG표기법.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 )
☆ASCII☆ 김연주.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
프로그래밍 언어론 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
연산자 (Operator).
제 9장 트랜스레이터.
제어문 & 반복문 C스터디 2주차.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
자바 5.0 프로그래밍.
자바 5.0 프로그래밍.
Chapter 02. 자바 기본 문법.
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
알고리즘 알고리즘이란 무엇인가?.
제 15 강 문자와 코드 shcho.pe.kr.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
오라클 11g 보안.
Lecture 02 프로그램 구조 및 문법 Kwang-Man Ko
Chapter 02 C# 기본 01 기본 용어 06 증감 연산자 02 출력 07 자료형 검사
Chapter 10 데이터 검색1.
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
 6장. SQL 쿼리.
6 객체.
Presentation transcript:

제 7 장 어휘분석과 불용어목록 7.2 어휘분석 7.2.1 자동색인작업을 위한 어휘분석 어휘분석: 입력된 문자들을 단어 또는 토큰열로 변환하는 과정 토큰(token): 의미있는 문자들의 모임 자동색인의 첫 단계이자 질의 처리의 첫(기본) 단계 7.2 어휘분석 7.2.1 자동색인작업을 위한 어휘분석 고려사항: 토큰(단어)을 무엇으로 표현? 예)문자들의 모든 결합 문제가 되는 문자들 숫자: 대개 포함 안시킴 (예외) 법령, 기술 DB (B6, ...) 하이픈: state-of-the-art, F-16,... (조회율<->정확도) 구두점: COMMAND.COM, OS/2,... 대소문자: 대개 하나로 통일 (예외) 몇몇 PL

7.2.2 질의처리에 대한 어휘분석 7.2.3 어휘분석 비용 예) 토큰 시작은 숫자가 아니고, 영문자는 모두 소문자로 하고, 구두점/공백/제어문자는 모두 토큰 구별자로 취급 7.2.2 질의처리에 대한 어휘분석 앞 절과의 차이 연산자(논리, 절단, 가중치)/표식자(괄호) 추가 특수 문자(구두점, 제어문자) 처리에 비중 여기서는 토큰 구분자가 아니라 ‘오류’로 처리 토큰: (, ), &, |, ^, ..., 알파벳으로 시작하는 문자열 7.2.3 어휘분석 비용 많이 듬: 전체 IR 시스템 비용의 약 50% (모든 문자 조사)

7.2.4 어휘분석기의 구현 compiler의 어휘분석기(lexical analyzer)와 동일 구현 방법 1. 자동 생성(Unix의 ‘lex’) 어휘분석기가 복잡한 경우에 유리 2. 특정 알고리즘 사용 (수작업) 가장 나쁜 방법: 오류 가능성, 처리 효율 3. ‘유한 상태 기계(오토마타)’ 작성 (수작업) 본 교재에서 채택하고 있는 방법

유한 상태 기계-DFA(상태변이도)의 구현 (그림 7.1) 일련의 문자열 입력으로부터 ‘토큰’을 구분하는 것이 목적 자료구조: 문자(character) 분류, 토큰(token) 분류 128개 “ASCII문자”를 10가지로 분류 CharClassType: 10가지 문자 종류 정의(열거형) 배열 char_class[c]: 128가지 문자를 10가지로 분류 TokenType: 8가지 토큰(token) 종류 정의(열거형) 코드 int main( argc, argv ) 입력 화일 open -> GetToken 호출 -> 결과 출력 static TokenType GetToken( stream, term ) stream(화일)의 각 문자로부터 1개의 토큰 인식 & return 현 상태 유지, 상태 변환(transition) 결정: 변환 테이블 unget 함수 사용: 미리 읽은 문자/숫자 복원 분석기의 출력은 파서(parser)의 입력으로 사용됨

typedef enum { WHITE_CH, DIGIT_CH, LETTER_CH, LFT_PAREN_CH, RGT_PAREN_CH, AMPERSAND_CH, BAR_CH, CARET_CH, EOS_CH, OTHER_CH } CharClassType static CharClassType char_class[128] = { .... /* 9 */ DIGIT_CH, /* ; */ OTHER_CH, ... ... /* K */ LETTER_CH, /* L */ LETTER_CH, ... /* | */ BAR_CH, ... } Term_Token = 1, LEFT_PAREN_TOKEN = 2, RGT_PAREN_TOKEN = 3, AND_TOKEN = 4, OR_TOKEN = 5, NOT_TOKEN = 6, END_TOKEN = 7, NO_TOKEN = 8, } TokenType;

/** 변환 테이블 state | White Letter ( ) & | * EOS digit other 0 | 0 1 -2 -3 -4 -5 -6 -7 -8 -8 1 | -1 1 -1 -1 -1 -1 -1 -1 1 -1 **/ static ToknType GetToken( stream, term ) FILE *stream; char *term; { int next_ch, state, i; state = 0, i = 0; while ( 0 < state ) if (EOF == next_ch = getc(stream))) next_ch = ‘\0’; term[i++] = convert_case[next_ch]; switch( state ) case 0: switch( char_class[next_ch] ) case WHITE_CH : i = 0; break; case LETTER_CH : state = 1; break; case LFT_PAREN_CH : state = -2; break; case RGT_PAREN_CH : state = -3; break; case AMPESAND_CH : state = -4; break; case BAR_CH : state = -5; break; case CARET_CH : state = -6; break; case EOS_CH : state = -7; break; case DIGIT_CH : state = -8; break; case OTHER_CH : state = -8; break; default : state = -8; break; } break;

case 1 : if ( (DIGIT_CH != char_class[next_ch]) && (LETTER_CH != char_class[next_ch]) ) { ungetc ( next_ch, stream ); term[i-1] = ‘\0’; state = -1; } break; default : state = -8; break; return( (TokenType) (-state) ); int main(argc, argv) int argc; char *argv[]; TokenType token char term[128]; FILE *stream; if ( (2 != argc) || ! (stream = fopen(argv[1],”r”)) ) exit(1); do switch ( token = GetToken(stream, term) ) case TERM_TOKEN : (void)printf(“term: ... ... while ( END_TOKEN != token ); fclose ( stream );

7.3 불용어목록 불용어목록(stoplist) 색인용어로 가치가 없는(거의 사용되지 않는) 단어들 빈번히 발생하는 단어가 불용어일 확률이 높다(20~30%) 예) computer, program, machine, ...(컴퓨터 분야 내에서) 반례) time, war, home, life... 구현 (불용 단어의 추출) 1. 어휘분석 출력 후 모든 토큰에 대해 검사: 배열, 트리, ‘해시’... 2. 어휘분석의 한 부분 더 효과적, ‘어휘분석 생성기’로 불용어 목록 여과 어휘분석 생성기: 불용어목록을 검사하는 DFA를 생성 (그림 7.6, 그림 7.7)

create an initial state qi and label it with the input set L0; place q0 in a stae queue Q; while Q is not empty do: { remove state qi from Q; generate the derivative state labels from the label Li for q; for each derivative state label Lj with transition a: if no state qj labeled Lj exists, create qj and put it in Q; create an arc laeled a from qi to qj; } make all states whose label contains final states. 그림 7.6 유한 상태 기계를 생성하기 위한 알고리즘