이전 포스팅에서 코퍼스를 단어 단위로 토큰화한 후에 적용하는 전처리 방법들을 배웠습니다. 하지만 경우에 따라서 코퍼스를 문장 단위로 토큰화한 다음에 문장의 의미를 살려서 분석을 해야 하는 경우가 있습니다.
대표적으로 다음 레슨에서 배울 품사 태깅이 그렇습니다. 어떠한 단어의 품사는 그 단어 자체의 의미와 함께 문장 안에서 사용된 위치에 따라 달라질 수 있습니다. 이런 경우에는 문장 간의 구분이 된 상태에서 단어의 품사를 정해야 하기 때문에 문장 단위로 먼저 토큰화한 후에 품사를 구분해야 합니다.
이번 포스팅에서 문장 단위의 토큰화 방법을 먼저 알아보겠습니다.
문장 토큰화(Sentence Tokenization)
아래 내용은 코퍼스를 문장 단위로 토큰화하는 코드입니다.
# 필요한 패키지와 함수 불러오기
from nltk.tokenize import sent_tokenize
nltk.download('punkt')
text = "My email address is 'abcde@codeit.com'. Send it to Mr.Kim."
# 문장 토큰화
tokenized_sents = sent_tokenize(text)
코드를 한 부분씩 살펴볼게요. 먼저, 문장 토큰화에는 NLTK의 sent_tokenize() 함수를 사용합니다.
from nltk.tokenize import sent_tokenize
sent_tokenize()는 코퍼스를 파라미터로 받아 토큰화된 문장을 리스트 형태로 반환합니다.
tokenized_sents = sent_tokenize(text)
결과를 확인하면 다음과 같습니다.
print(tokenized_sents)
문장이 끝나는 지점의 마침표를 기준으로 토큰화가 잘 되었습니다. 그런데, abcde@codeit.com의 마침표와 Mr.Kim의 마침표는 문장을 나누는 지점으로 인식하지 않았네요. 앞에서 punkt 모듈을 설치하면 마침표나 약어(Mr. , Dr.)와 같은 언어적인 특성을 고려해서 문장 토큰화가 됐었죠? 덕분에 단순히 마침표가 있는 곳을 문장으로 나누는 것이 아니라 실제 문장을 잘 구분해 준 것이죠.
마침표 외에도 느낌표, 물음표 등이 문장을 나누는 기준이 될 수 있는데요. 아래 예시를 확인해 주세요.
text = "Can you forward my email to Mr.Kim? Thank you!"
tokenized_sents = sent_tokenize(text)
print(tokenized_sents)
물음표와 느낌표로 구분된 문장도 토큰화가 잘 됩니다.
'Data Analysis > Natural Language Processing(NLP)' 카테고리의 다른 글
품사 태깅(POS; Part of Speech Tagging) (0) | 2023.06.10 |
---|---|
문장 토큰화 실습 (0) | 2023.06.09 |
어간 추출 실습 (0) | 2023.06.09 |
어간 추출(Stemming) (0) | 2023.06.08 |
정규화(Normalization) (0) | 2023.06.08 |