nltk는 자연어 처리(NLP)를 위한 파이썬 패키지로 토큰화, 태깅, 구문 분석, 의미 분석, 분류 등 텍스트 처리 및 분석을 위한 다양한 알고리즘들을 제공해준다.
품사 태깅은 텍스트의 각 단어에 품사(명사, 동사, 형용사 등)를 할당하는 과정이다. 이는 단어의 의미와 문장 내에서의 기능을 이해하는 데 도움이 되며, 구문 분석, 의미 분석, 기계 번역 등 다양한 자연어 처리(NLP) 작업의 기초가 된다. 품사 태깅은 주로 사전에 정의된 품사 집합과 규칙 또는 학습된 모델을 사용하여 자동으로 수행된다.
nltk를 활용한 실습코드는 다음과 같다.
먼저 word_tokenize
함수를 사용하여 텍스트를 토큰화한 다음, pos_tag
함수를 사용하여 각 토큰(단어)에 품사 태그를 할당한다. pos_tag
함수는 각 단어에 대한 품사 정보를 포함한 튜플의 리스트를 반환한다. 예를 들어, ('Natural', 'JJ')는 'Natural'이 형용사임을 나타낸다. 품사 태그는 펜 트리뱅크 태그셋(Penn Treebank Tagset)을 기반으로 한다.
import nltk
from nltk.tokenize import word_tokenize
from nltk import pos_tag
nltk.download('punkt') # 토큰화를 위한 데이터셋 다운로드
nltk.download('averaged_perceptron_tagger') # 품사 태깅 모델 다운로드
# 예제 텍스트
text = "Natural Language Processing is one of the most exciting areas of study."
# 텍스트 토큰화
tokens = word_tokenize(text)
# 품사 태깅
tagged_tokens = pos_tag(tokens)
print("품사 태깅 결과:", tagged_tokens)
품사 태깅은 텍스트의 구조적 및 의미적 분석을 가능하게 한다. NLTK의 품사 태깅 기능을 활용하면, 복잡한 자연어 처리 애플리케이션을 구현하는 데 있어 중요한 단계를 손쉽게 수행할 수 있다.
어간 추출은 검색 엔진에서 검색 최적화, 문서 내 단어의 일관성 확보 등 다양한 NLP 작업에서 유용하게 사용된다. 어간 추출은 단어의 의미적 기반보다는 형태적 변화에 초점을 맞추며, 때로는 어간이 실제 단어가 아닌 경우도 발생할 수 있다.
nltk 패키지는 여러 어간 추출 알고리즘을 제공한다. 가장 널리 사용되는 두 가지는 **포터 스테머(Porter Stemmer)와 랭카스터 스테머(Lancaster Stemmer)**이다.
다음 실습코드는 텍스트를 단어 단위로 토큰화한 후, 각 단어의 어간을 추출한다. 포터 스테머는 특히 영어에 대해 설계되었으며, 규칙 기반으로 단어의 어미를 제거한다. 결과적으로, 각 단어는 그것의 기본 형태로 변환되어, 텍스트 내에서 단어의 다양한 변형을 일관되게 처리할 수 있게 된다.
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
# 포터 스테머 객체 생성
ps = PorterStemmer()
# 예제 텍스트
text = "The boys running in the park are fast runners."
# 텍스트 토큰화
words = word_tokenize(text)
# 어간 추출
stemmed_words = [ps.stem(word) for word in words]
print("원본 단어:", words)
print("어간 추출 후:", stemmed_words)