토큰화(Tokenization)

c.haha.e·2025년 8월 16일

STUDY

목록 보기
21/27

토큰화(Tokenization)


1. 개념

토큰화란?

글(문장, 댓글, 기사 등)을 “뜻이 있는 가장 작은 덩어리(보통 ‘단어’나 ‘형태소’라고 부름)”로 잘게 쪼개는 작업

  • 영어는 띄어쓰기 기준으로 “apple is good” → [‘apple’, ‘is’, ‘good’]
  • 한글은 조사(을/는/이/가 등), 어미(했다/하다 등) 때문에 조금 더 세밀하게 쪼개야 함

2. WHY?

  • 컴퓨터는 글자 그대로 “사람의 뜻”을 이해 못 함
  • 그래서, “글을 의미 있는 단위로 쪼개서” 숫자나 규칙으로 바꿔야 함
  • 이게 “자연어 처리의 첫 단계”, 이게 잘 돼야 “빈도 세기, 감정 분석, 요약, 번역 등”이 가능해짐!

3. 필요 라이브러리

from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
from konlpy.tag import Okt
from konlpy.tag import Kkma
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
from nltk.tokenize import WordPunctTokenizer
from nltk.tokenize import TreebankWordTokenizer
from tensorflow.keras.preprocessing.text import text_to_word_sequence

!pip install kss
import kss

1. nltk.tokenize.word_tokenize

  • 영어 문장용
  • 기능: 문장을 ‘단어’ 단위로 쪼갬
  • 특징: 영어 띄어쓰기, 구두점(마침표, 콤마 등)까지 잘 분리

2. nltk.tag.pos_tag

  • 영어 문장용
  • 기능: 각 단어의 품사(명사, 동사 등) 태깅
  • 특징: 영어 품사 태그를 붙임

3. konlpy.tag.Okt

  • 한글 전용 형태소 분석기
  • 기능: 한글 문장 → ‘형태소’ 단위로 분리 & 품사 태깅
  • 특징:
    • 띄어쓰기, 조사, 어미 등 잘 분리
    • '명사', '동사', '형용사' 등 품사정보 제공

4. konlpy.tag.Kkma

  • 한글 전용, 더 정교한 형태소 분석기
  • 기능: 한글 문장 → 더 세밀한 형태소 분리 & 품사 태깅
  • 특징:
    • 긴 복합문장도 잘게 쪼갬
    • 품사 태그 종류가 더 세분화됨
    • (Okt보다 느리지만, 더 복잡한 문장에 강함)

5. nltk.tokenize.sent_tokenize

  • 영어 ‘문장 단위’로 쪼개기
  • 기능: 여러 문장이 있는 텍스트 → 문장별 리스트
  • 특징: 마침표 등 기준으로 문장 나눔

6. nltk.tokenize.word_tokenize

  • 영어 문장(글, 텍스트)을 ‘단어’ 단위로 쪼개서 단어(및 구두점)를 ‘리스트’형태로 반환
  • 기능: 여러문장이 있는 텍스트 → 문장별 리스트
  • 특징: 단어와 구두점이 분리

7. nltk.tokenize.WordPunctTokenizer

  • 영어, 구두점 기준으로 더 세게 쪼갬
  • 기능: 단어 + 구두점 따로따로 분리
  • 특징: “won't” → [‘won’, “'”, ‘t’] 등 아주 세밀하게 쪼갬

8. nltk.tokenize.TreebankWordTokenizer

  • 영어, 미국 Treebank 코퍼스 표준 규칙 사용
  • 기능: 영어 문장 쪼개기, 어포스트로피, 하이픈 등도 신경 써서 분리

9. tensorflow.keras.preprocessing.text.text_to_word_sequence

  • 영어, Keras에서 자주 씀(딥러닝용 전처리)
  • 기능: 소문자 변환, 구두점 자동 제거 후 단어만 남김
  • 특징: 신경망에 바로 넣기 적합

10. kss (Korean Sentence Splitter)

  • 한글 문장 분리 특화
  • 설치: !pip install kss
  • 기능: 긴 한글 글을 “문장 단위”로 정확하게 쪼갬
  • 특징: 뉴스, 블로그, 카톡 등 실생활 한글 문장에 강함

언어에 따른 사용

1. 한글 문장용 라이브러리

(1) KoNLPy 패키지

  • 종류: Okt, Kkma, Mecab, Hannanum, Komoran
  • 특징:
    • 한국어 형태소(어근, 조사, 어미) 분석 가능
    • 품사 정보까지 태깅 가능
    • 긴 문장도 띄어쓰기/조사/어미 구분 잘함
  • 사용법 예시 (Okt)
    
    from konlpy.tag import Okt
    okt = Okt()
    text = "나는 오늘 집에서 공부를 했다."
    print(okt.morphs(text))   # ['나', '는', '오늘', '집', '에서', '공부', '를', '했다', '.']
    print(okt.pos(text))      # [('나', 'Noun'), ('는', 'Josa'), ...]
    

(2) KSS (문장 분리)

  • 특징:
    • 한글 긴 텍스트를 문장 단위로 분리
    • 실생활 대화/뉴스 등에서 문장 끝 추정 정확
  • 사용법 예시
    
    import kss
    text = "안녕하세요. 오늘도 공부합시다! 네, 알겠어요."
    print(list(kss.split_sentences(text)))
    # ['안녕하세요.', '오늘도 공부합시다!', '네, 알겠어요.']
    

(3)KoNLPy 형태소 분석기 사용


from konlpy.tag import Okt

text = "나는 학교에 갔다."
okt = Okt()
tokens = okt.morphs(text)
print(tokens)
# 결과: ['나', '는', '학교', '에', '갔다', '.']

2. 영어 문장용 라이브러리

(1) NLTK

  • 종류:
    • word_tokenize: 단어 토큰화
    • sent_tokenize: 문장 토큰화
    • pos_tag: 품사 태깅
  • 특징:
    • 영어 띄어쓰기 기준 분리, 구두점·약어 등도 구별
    • 영어 품사 정보 태깅 가능
  • 사용법 예시
    
    from nltk.tokenize import word_tokenize, sent_tokenize
    from nltk.tag import pos_tag
    
    text = "Hello, I'm ChatGPT! Are you learning Python?"
    print(sent_tokenize(text))     # ['Hello, I'm ChatGPT!', 'Are you learning Python?']
    print(word_tokenize(text))     # ['Hello', ',', 'I', "'m", 'ChatGPT', '!', ...]
    print(pos_tag(word_tokenize(text)))
    # [('Hello', 'NNP'), (',', ','), ...]
    

(2) Keras

  • 특징:
    • text_to_word_sequence: 구두점 자동 제거, 소문자 변환, 영어 딥러닝용
  • 사용법 예시
    
    from tensorflow.keras.preprocessing.text import text_to_word_sequence
    text = "Hello, Deep Learning! Let's tokenize this."
    print(text_to_word_sequence(text))
    # ['hello', 'deep', 'learning', 'lets', 'tokenize', 'this']
    

(3) 영어 토큰화 (띄어쓰기 기준)


sentence = "I am happy."
tokens = sentence.split()
print(tokens)
# 결과: ['I', 'am', 'happy.']

3. 한글+영어 혼합 문장용 라이브러리

(1) KoNLPy (특히 Okt, Mecab)

  • 특징:
    • 한글/영어/숫자 혼합 문장에서 한글 형태소, 영어 단어, 숫자까지 분리
  • 사용법 예시
    python
    복사편집
    from konlpy.tag import Okt
    okt = Okt()
    text = "ChatGPT는 인공지능 AI입니다. 파이썬으로 코딩해요!"
    print(okt.morphs(text))
    # ['ChatGPT', '는', '인공지능', 'AI', '입니다', '.', '파이썬', '으로', '코딩', '해요', '!']
    

(2) KSS

  • 특징:
    • 한글/영어 섞인 텍스트에서 문장 단위 분리 가능
  • 예시
    python
    복사편집
    import kss
    text = "오늘은 AI 세미나! Let's study together. 네, 좋아요."
    print(list(kss.split_sentences(text)))
    # ['오늘은 AI 세미나!', "Let's study together.", '네, 좋아요.']
    

(3) NLTK의 word_tokenize + 한글 라이브러리 병행

  • 특징:
    • 영어는 nltk로, 한글은 konlpy로 따로 분리해서 조합
  • 예시
    python
    복사편집
    from nltk.tokenize import word_tokenize
    from konlpy.tag import Okt
    
    text_ko = "파이썬과 ChatGPT를 공부해요."
    text_en = "Let's learn Python and ChatGPT."
    
    okt = Okt()
    print(okt.morphs(text_ko))        # ['파이썬', '과', 'ChatGPT', '를', '공부', '해요', '.']
    print(word_tokenize(text_en))     # ['Let', "'s", 'learn', 'Python', 'and', 'ChatGPT', '.']
    

정리

언어/혼합주요 라이브러리특징/추천 상황
한글KoNLPy (Okt, Kkma 등)형태소 분석(단어, 조사, 어미, 품사)
kss문장 단위 분리
영어nltk문장/단어 토큰화, 품사 태깅
keras딥러닝용 전처리, 구두점 제거
혼합(한+영)KoNLPy (Okt)한글/영어/숫자/특수기호 모두 단위별 분리
kss문장 단위 분리(혼합문장 포함)
(nltk+konlpy) 병행영어/한글 파트별로 따로따로 분석

토크나이저와의 차이

함수명주요 특징추천 용도
word_tokenize영어 단어 + 구두점 분리영어 일반 텍스트
WordPunctTokenizer더 세밀하게 구두점 분리영어, 구두점 강조할 때
TreebankWordTokenizer미국 Treebank 코퍼스 기준영어 자연어처리 표준용
sent_tokenize“문장 단위”로 쪼개기영어 여러 문장 나눌 때
Okt.morphs/pos한글 형태소 분석한글(조사, 어미까지 분리)
kss.split_sentences한글 “문장 단위” 분리한글 뉴스/댓글 등
profile
기록용 블로그

0개의 댓글