파이썬을 이용한 텍스트 토큰화

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 Python 을 사용하여 텍스트 토큰화 시스템을 구현하는 방법을 배우게 됩니다. 텍스트 토큰화는 자연어 처리의 기본적인 작업으로, 주어진 텍스트를 토큰이라고 하는 더 작은 단위로 분해하는 것입니다. 이러한 토큰은 단어, 숫자, 구두점 또는 텍스트의 다른 의미 있는 요소를 나타낼 수 있습니다. 텍스트를 토큰화하는 능력은 컴파일러의 어휘 분석, 감성 분석, 텍스트 분류 등 많은 응용 프로그램에 필수적입니다.

👀 미리보기

## text = 'total = 1 + 2 * 3'

tokens = [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다:

  • 텍스트의 토큰을 나타내는 Token 클래스를 정의하는 방법
  • 입력 텍스트를 받아 토큰 스트림을 생성하는 generate_tokens 함수를 구현하는 방법
  • 샘플 텍스트로 토큰화 프로세스를 테스트하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 텍스트 토큰화의 개념과 자연어 처리에서의 중요성을 이해합니다.
  • Python 을 사용하여 기본적인 텍스트 토큰화 시스템을 구현합니다.
  • 다양한 토큰 유형과 해당 정규 표현식을 정의하여 토큰화 프로세스를 사용자 정의합니다.
  • 다양한 입력 텍스트로 토큰화 시스템을 테스트하고 디버깅합니다.

토큰 클래스 정의

이 단계에서는 텍스트 토큰화 프로세스에서 토큰을 나타낼 Token 클래스를 정의하는 방법을 배우게 됩니다.

  1. 텍스트 편집기에서 /home/labex/project/texttokenizer.py 파일을 엽니다.

  2. 파일 시작 부분에서 collections 모듈에서 namedtuple 함수를 가져옵니다:

    from collections import namedtuple
  3. Token 클래스를 typevalue의 두 가지 속성을 가진 named tuple 로 정의합니다.

    Token = namedtuple("Token", ["type", "value"])
✨ 솔루션 확인 및 연습

generate_tokens 함수 구현

이 단계에서는 입력 텍스트를 받아 토큰 스트림을 생성하는 generate_tokens 함수를 구현합니다.

  1. texttokenizer.py 파일에서 generate_tokens 함수를 정의합니다:

    def generate_tokens(text):
        ## Define token types and corresponding regular expressions
        token_specification = {
            "NAME": r"[a-zA-Z_][a-zA-Z_0-9]*",
            "NUM": r"\d+",
            "ADD": r"\+",
            "SUB": r"-",
            "MUL": r"\*",
            "DIV": r"/",
            "EQ": r"=",
            "WS": r"\s+",
        }
    
        ## Combine regular expressions into one large regular expression
        regex = "|".join("(?P<%s>%s)" % pair for pair in token_specification.items())
    
        scanner = re.finditer(regex, text)
        for m in scanner:
            type = m.lastgroup
            value = m.group()
            yield Token(type, value)
  2. generate_tokens 함수는 먼저 토큰 유형을 해당 정규 표현식에 매핑하는 token_specification 딕셔너리를 정의합니다.

  3. 그런 다음 | 연산자를 사용하여 모든 정규 표현식을 단일 큰 정규 표현식으로 결합합니다.

  4. 이 함수는 re.finditer 함수를 사용하여 입력 텍스트에서 모든 일치 항목을 찾고, 토큰 유형과 값을 가진 각 일치 항목에 대해 Token 객체를 생성합니다.

✨ 솔루션 확인 및 연습

토큰화 테스트

이 단계에서는 샘플 텍스트를 파싱하여 generate_tokens 함수를 테스트합니다.

  1. texttokenizer.py 파일의 끝에 다음 코드를 추가합니다:

    if __name__ == "__main__":
        text = "total = 1 + 2 * 3"
        tokens = list(generate_tokens(text))
        print(tokens)
  2. texttokenizer.py 파일을 저장합니다.

  3. /home/labex/project 디렉토리에서 texttokenizer.py 스크립트를 실행합니다:

    python texttokenizer.py
  4. 출력 결과는 입력 텍스트의 토큰을 나타내는 Token 객체의 목록이어야 합니다:

    [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]

축하합니다! generate_tokens 함수를 성공적으로 구현하고 샘플 텍스트로 테스트했습니다. 다음 단계에서는 generate_tokens 함수를 사용하여 더 큰 텍스트를 토큰화하는 방법을 배우게 됩니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.