Tokenization

이승준·2024년 8월 9일
  • 주어진 텍스트를 토큰이라는 단위로 나누는 작업
  • 토큰은 보통 단어 또는 subword 단위로 나누게 된다

Word Tokenization

영어

  • 영문서에서 tokenization 을 수행할 때는 nltk, Spacy 주로 사용

  • nltk 는 포괄성이 좋아 교육에 유리

  • Spacy 는 처리 속도가 빨라 실무에 적합

    "Don't be fooled by Mr. Jone's pastry shop."

  • 위 문장에 여러가지 tokenizer 를 적용해보자

# basic tokenizer
from nltk.tokenize import word_tokenize
word_tokenize(sentence)
# >>> Don't를 Do와 n't로 분리하였으며, Jone's는 Jone과 's로 분리
# WordPunctTokenizer
from nltk.tokenize import WordPunctTokenizer

tokenizer = WordPunctTokenizer()
tokenizer.tokenize(sentence)
# >>> Don't를 Don과 '와 t로 분리하였으며, Jone's를 Jone과 '와 s로 분리
# TreebankWordTokenizer
from nltk.tokenize import TreebankWordTokenizer

tokenizer = TreebankWordTokenizer()
tokenizer.tokenize(sentence)
# >>> 하이픈으로 구성된 단어는 하나로 유지
# >>> doesn't와 같이 '로 접어가 함께하는 단어는 분리

한국어

  • konlpy 를 자주 사용한다.
  • nouns : 명사만 추출
  • morphs : 형태소까지 추출
  • pos : 형태소 추출 및 품사 부착
# Open Korean Tag
from konlpy.tag import Okt

okt = Okt()
sentence = "올해 여름 휴가는 어디에도 못가서 슬퍼요"

print(okt.nouns(sentence))
print(okt.morphs(sentence))
print(okt.pos(sentence))

['올해', '여름', '휴가', '어디']

['올해', '여름', '휴가', '는', '어디', '에도', '못', '가서', '슬퍼요']

[('올해', 'Noun'), ('여름', 'Noun'), ('휴가', 'Noun'), ('는', 'Josa'), ('어디', 'Noun'), ('에도', 'Josa'), ('못', 'VerbPrefix'), ('가서', 'Verb'), ('슬퍼요', 'Adjective')]

## okt의 정규화, 어간 추출
## 정규화 : 오늘 강남역에서 약속이 취소됐닼ㅋㅋㅋ -> 취소됐다ㅋㅋㅋ
print(okt.morphs("오늘 강남역에서 약속이 취소됐닼ㅋㅋㅋ", norm=True))

## 어간 추출 : 올해 여름 휴가는 어디에도 못가서 슬퍼요 -> 못 가다, 슬프다
print(okt.morphs(sentence, stem=True))

print(okt.morphs("오늘 강남역에서 약속이 취소됐닼ㅋㅋㅋ", norm=True, stem=True))

['오늘', '강남역', '에서', '약속', '이', '취소', '됐다', 'ㅋㅋㅋ']

['올해', '여름', '휴가', '는', '어디', '에도', '못', '가다', '슬프다']

['오늘', '강남역', '에서', '약속', '이', '취소', '돼다', 'ㅋㅋㅋ']

  • 한국어 형태소 분석기는 이외에도 여러 가지가 있다.
    => Hannanum, Kkma, Komoran, Mecab 등
  • 사용하고자 하는 필요 용도에 적합한 형태소 분석기 선택해 사용
profile
인하대학교 컴퓨터공학과

0개의 댓글