[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

파이썬 토크나이저 - 기초활용

inu 2020. 7. 15. 21:52
반응형

토큰화

  • 문장이 있을 때 단어/어절 등으로 해당 문장을 나누는 것을 '토큰화'라고 한다.
  • ex. 저는 배가 고픕니다. => '저','는','배','가','고프','ㅂ니다'
  • 영어에는 don't의 ' 혹은 Ph.D. 의 . 같이 나누기 애매한 것들이 있다.
  • 한국어는 그 자체만으로 정해진 순서가 없어 구분이 어렵다.

토크나이저

  • 이런 토큰화과정을 정규표현식을 통해 일일히 처리해주기란 상당히 복잡하고 어려운 일이다.
  • 따라서 토큰화를 도와주는 토크나이저 라이브러리들을 활용한다.
  • 그 종류에는 nltk, konlpy, kss 등이 있다. nltk는 영어 문장을 토크나이징하도록 도와주고, konlpy나 kss는 한국어 문장을 토크나이징하도록 도와준다.
!pip install nltk
!pip install konlpy
!pip install kss
  • 위와 같은 명령어로 패키지를 따로 설치해야한다.
  • google colab이 아닌 다른 환경에서는 오류가 뜨기 때문에 다른 처리를 존재한다고 한다. (https://lemontia.tistory.com/802)

nltk 간단한 활용

import nltk

nltk.download('punkt')
  • 초기에 위 명령어를 수행해야 nltk 토크나이저 활용이 가능하다.
  • 토크나이징에 필요한 데이터를 다운받아오는 명령어이다.
from nltk.tokenize import word_tokenize, WordPunctTokenizer, TreebankWordTokenizer, RegexpTokenizer, sent_tokenize

text = """
Have you ever fallen head.
over heels for somebody.
Not just somebody.
No no.
Rex you did it again.
Have you ever fallen head.
over heels for somebody.
That made promises.
to give you the world Um.
I really hope they held you down.
I really hope it was no lying.
Cause when heart breaks it.
feel like the world's gone.
But if the love's real.
"""

print(word_tokenize(text)) # 구두점(') 토큰화 X
print(WordPunctTokenizer().tokenize(text)) # 구두점(') 토큰화 O
print(TreebankWordTokenizer().tokenize(text)) # 표준화된 토큰화모델
print(RegexpTokenizer('\w+').tokenize(text)) # 정규표현식 활용 토크나이즈
print(sent_tokenize(text)) # 문장별 토크나이즈
==결과==
['\nHave you ever fallen head.', 'over heels for somebody.', 'Not just somebody.', 'No no.', 'Rex you did it again.', 'Have you ever fallen head.', 'over heels for somebody.', 'That made promises.', 'to give you the world Um.', 'I really hope they held you down.', 'I really hope it was no lying.', 'Cause when heart breaks it.', "feel like the world's gone.", "But if the love's real."]
  • nltk 내부에도 수많은 토크나이저들이 존재한다.
  • 결과는 전부 적기엔 너무 길기 때문에 문장별 토크나이즈인 sent_tokenize()만 적어놓았다.
  • 각 토크나이저의 특징과 활용법이 다르기 때문에, 각 토크나이저의 특징을 파악해 현 데이터에서 가장 적절한 토크나이저가 무엇일지 판단해 활용하는 것이 중요하다.

konlpy와 kss 간단한 활용

from konlpy.tag import Okt, Kkma
import kss

ktext = '안녕하세요? 저는 박인우라고 합니다.'
print(Okt().morphs(ktext))
print(Kkma().morphs(ktext))
print(kss.split_sentences(ktext))
==결과==
['안녕하세요', '?', '저', '는', '박인우', '라고', '합니다', '.']
['안녕', '하', '세요', '?', '저', '는', '박이', 'ㄴ', '우', '라고', '하', 'ㅂ니다', '.']
['안녕하세요?', '저는 박인우라고 합니다.']
  • konlpy와 kss도 활용법과 토크나이저를 각각 보유한다.
  • nltk와 마찬가지로 한국어 라이브러리도 각각 라이브러리마다 토크나이징 기준이 다르기 때문에, 적절한 선택과 활용이 중요하다.
반응형