///
Search
🏀

9주차 (중요)시퀀스 다이어그램(2/3)

Tokenizer 클래스

먼저 Tokenization이 무엇인가에 대해 알아야 할 것 같습니다.
간단하게 말하면 Tokenization이란 Text를 여러개의 Token으로 나누는 것을 말합니다.
보통 공백, 구두점, 특수문자 등으로 이를 나누는데요. 그 방법에 따라 다양한 Tokenizer가 있습니다.
메인 아이디어는 (타겟 스트링 구조의 문자열 텍스트)를 기반으로 구분 문자 delimiter를 만들고 토큰을 만든다는 것
target과 tokenizer 객체를 인스턴스화 하고 반복문을 사용해서 토큰을 추출한다.
사용자는 tokenizer 객체에서 nextToken 함수를 호출한다.
함수 내부에서는 target 객체의 find_first_not_of 와 find_first_of 함수를 호출한다.

시퀀스 다이어그램

소스코드

/tokenizer.h

// // tokenizer.h // // // Created by Glory on 2021/04/28. // // Tokenizer 클래스의 인터페이스 파일 #ifndef TOKENIZER_H #define TOKENIZER_H #include <iostream> #include <string> using namespace std; class Tokenizer { private: string target; string delim; int begin; int end; public: Tokenizer(const string& target, const string& delim); ~Tokenizer(); bool moreToken() const; string nextToken(); }; #endif
C++
복사
Tokenizer 클래스의 인터페이스 파일입니다.
데이터 맴버로 문자열 자료형의 target과 delim이 있다.
이 클래스는 생성자와 소멸자 이외에 2개의 맴버 함수가 있다.
문자열에 토큰이 있는지 확인하는 맴버함수, 문자열에서 토큰을 추출하는 맴버 함수

/tokenizer.cpp

// // tokenizer.cpp // // // Created by Glory on 2021/04/28. // //Tokenizer 클래스의 구현 파일 (생성자와 소멸자를 포함해서 모두 4개의 맴버 함수를 정의) #include "tokenizer.h" // 생성자 Tokenizer::Tokenizer(const string& tar, const string& del) : target(tar), delim(del) { begin = target.find_first_not_of(delim, 0); end = target.find_first_of(delim, begin); } // 소멸자 Tokenizer::~Tokenizer() { } // 추가 토큰이 있는지 확인 bool Tokenizer::moreToken() const { return (begin != -1); } // 다음 토큰 리턴 string Tokenizer::nextToken() { string token = target.substr(begin, end - begin); begin = target.find_first_not_of(delim, end); end = target.find_first_of(delim, begin); return token; }
C++
복사

/app.cpp

// // app.cpp // // // Created by Glory on 2021/04/28. // //Tokenizer 클래스를 테스트하는 애플리케이션 파일 (tokenizer 클래스를 인스턴스화 하여 사용하는 main #include "tokenizer.h" int main() { // 토큰화 할 문자열 string target("This is the string to be tokenized. \n"); // 구분 문자로 사용할 문자열 string delimit(" \n"); // 띄어쓰기와 줄바꿈을 구분 문자로 사용 // Tokenizer 객체 인스턴스화 Tokenizer tokenizer(target, delimit); // target 문자열을 기반으로 토큰 찾아 출력 while(tokenizer.moreToken()) { cout << tokenizer.nextToken() << endl; } return 0; }
C++
복사