
어휘 분석(Lexical Analysis): 단어의 구조를 식별하고 분석하여 어휘의 의미와 품사에 대한 단어 수준의 연구
구문 분석(Syntactic Analysis): 자연어 문장에서 구성 요소들의 문법적 구조를 분석
의미 분석(Semantic Analysis): 문장의 의미에 근거해서 그 문장을 해석하는 방법
!curl -s https://raw.githubusercontent.com/teddylee777/machine-learning/master/99-Misc/01-Colab/mecab-colab.sh | bashfrom konlpy.tag import Kkma, Hannanum, Komoran, Twitter, Okt, Mecab
#twitter는 okt로 바뀌어서 사실상 같음
kkma = Kkma()
hannanum = Hannanum()
komoran = Komoran()
twitter = Twitter()
okt = Okt()
mecab = Mecab()
특수문자에 대한 처리
특정 단어에 대한 토큰 분리 방법
split을 활용해 단어 토큰화sentence = "Time is gold"
tokens = [x for x in sentence.split(" ")]
tokens
nltk 패키지의 tokenize 모듈을 사용해 손쉽게 구현 가능word_tokenize() 함수를 사용해 구현 가능NLTK(Natural Language Toolkit) 패키지는 교육용으로 개발된 자연어 처리 및 문서 분석용 파이썬 패키지
NLTK 패키지의 주요 기능
말뭉치
토큰 생성
형태소 분석
품사 태깅
import nltk
nltk.download("punkt")
from nltk.tokenize import word_tokenize
tokens = word_tokenize(sentence)
tokens
한국어는 공백으로 단어를 분리해도 조사, 접속사 등이 남아 분석에 어려움이 있음
이를 해결해주는 한국어 토큰화는 조사, 접속사를 분리해주거나 제거
sentence = "추세의 방향과 주가를 분석하는 데 유용한 지표로 평가된다."
# `pos()`라는 함수 이용
print("Kkma 형태소 분석: ", kkma.pos(sentence))
print("Hannanum 형태소 분석: ", hannanum.pos(sentence))
print("Komoran 형태소 분석: ", komoran.pos(sentence))
print("Twitter 형태소 분석: ", twitter.pos(sentence))
print("Okt 형태소 분석: ", okt.pos(sentence))
print("Mecab 형태소 분석: ", mecab.pos(sentence))

# 토큰화만 실행할 때는 morphs()라는 함수를 이용
print("Kkma 형태소 분석: ", kkma.morphs(sentence))
print("Hannanum 형태소 분석: ", hannanum.morphs(sentence))
print("Komoran 형태소 분석: ", komoran.morphs(sentence))
print("Twitter 형태소 분석: ", twitter.morphs(sentence))
print("Okt 형태소 분석: ", okt.morphs(sentence))
print("Mecab 형태소 분석: ", mecab.morphs(sentence))

# 형태소만 사용하고 싶을 때는 nouns()라는 함수를 이용해 조사, 접속사 등을 제거 가능
print("Kkma 형태소 분석: ", kkma.nouns(sentence))
print("Hannanum 형태소 분석: ", hannanum.nouns(sentence))
print("Komoran 형태소 분석: ", komoran.nouns(sentence))
print("Twitter 형태소 분석: ", twitter.nouns(sentence))
print("Okt 형태소 분석: ", okt.nouns(sentence))
print("Mecab 형태소 분석: ", mecab.nouns(sentence))

# 문장 토큰화는 줄바꿈 문자('\n')를 기준으로 문장을 분리
sentences = "Your mom raised you as a prince.\nBut this is queendom, right?"
print(sentences)
tokens = [x for x in sentences.split("\n")]
tokens

# 문장 토큰화는 sent_tokenize() 함수를 사용해 구현 가능
from nltk.tokenize import sent_tokenize
tokens = sent_tokenize(sentences)
tokens

# konlpy 라이브러리의 형태소 분석기 중에서는 꼬꼬마만 문장 분리 가능
text = "미안하다. 이거 보여주려고 어그로 끌었다."
print(kkma.sentences(text))

!pip install kss
import kss
print(kss.split_sentences(text))

from nltk.tokenize import RegexpTokenizer
sentence = "Where there\'s a will. there\'s away"
#특문제거
tokenizer = RegexpTokenizer("[\w]+")
tokens = tokenizer.tokenize(sentence)
tokens
#gaps=True ?
tokenizer = RegexpTokenizer("[\s]+", gaps=True)
tokens = tokenizer.tokenize(sentence)
tokens
sentence = "변수가 잘ㄹ생성되었는지 확인!합니다ㅎㅎ."
# 자음제거
tokenizer = RegexpTokenizer("[가-힣]+")
tokens = tokenizer.tokenize(sentence)
tokens
tokenizer = RegexpTokenizer("ㄱ-ㅎ]+", gaps=True)
tokens = tokenizer.tokenize(sentence)
tokens
WhiteSpaceTokenizer: 공백을 기준으로 토큰화WordPunktTokenizer: 텍스트를 알파벳 문자, 숫자, 알파벳 이외의 문자 리스트로 토큰화MWETokenizer: MWE는 Multi-Word Expression의 약자로 'republic of korea'와 같이 여러 단어로 이뤄진 특정 그룹을 한 개체로 취급TweetTokenizer: 트위터에서 사용되는 문장의 토큰화를 위해서 만들어졌으며, 문장 속 감성의 표현과 감정을 다룸