NLTK(Natural Language Toolkit)
nltk는 자연어 처리(NLP)를 위한 파이썬 패키지로 토큰화, 태깅, 구문 분석, 의미 분석, 분류 등 텍스트 처리 및 분석을 위한 다양한 알고리즘들을 제공해준다.
품사 태깅(Part-of-Speech Tagging) 실습
품사 태깅은 텍스트의 각 단어에 품사(명사, 동사, 형용사 등)를 할당하는 과정이다. 이는 단어의 의미와 문장 내에서의 기능을 이해하는 데 도움이 되며, 구문 분석, 의미 분석, 기계 번역 등 다양한 자연어 처리(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)
Python
복사
품사 태깅은 텍스트의 구조적 및 의미적 분석을 가능하게 한다. NLTK의 품사 태깅 기능을 활용하면, 복잡한 자연어 처리 애플리케이션을 구현하는 데 있어 중요한 단계를 손쉽게 수행할 수 있다.
어간 추출(Stemming) 실습
어간 추출은 검색 엔진에서 검색 최적화, 문서 내 단어의 일관성 확보 등 다양한 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)
Python
복사
어간 추출을 사용할 때는 변환된 어간이 실제 단어와 일치하지 않을 수도 있음을 유의해야 한다. 이는 어간 추출 알고리즘이 주로 형태학적 분석보다는 규칙에 기반하기 때문입니다. 어간 추출이 적합하지 않은 경우, 표제어 추출(Lemmatization)을 고려할 수 있다.
표제어 추출(Lemmatization) 실습
표제어 추출은 단어를 그것의 사전형 또는 기본 형태인 '표제어(lemma)'로 변환하는 과정이다. 이 과정에서 단어의 품사 정보를 고려하며, 변형된 단어가 실제로 존재하는 어휘로 변환된다다. 예를 들어, "running", "runs", "ran"은 모두 동사 "run"으로 변환될 수 있다. 표제어 추출은 어간 추출보다 더 정교하며, 의미론적인 정보를 바탕으로 단어의 기본 형태를 찾는다. 이 과정은 텍스트 데이터의 일관성을 유지하면서도 의미적인 분석을 가능케 한다.
nltk 패키지는 WordNetLemmatizer를 통해 표제어 추출 기능을 제공한다. WordNetLemmatizer는 WordNet 데이터베이스를 사용하여 단어의 표제어를 찾는다. 다음은 NLTK의 WordNetLemmatizer를 사용한 표제어 추출 실습 코드이다.
기본적으로 WordNetLemmatizer는 모든 단어를 명사로 간주하기에, 동사나 형용사 등 다른 품사의 단어를 올바르게 처리하려면 품사를 명시적으로 지정해주어야 한다.
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
import nltk
nltk.download('wordnet') # WordNet 데이터셋 다운로드
nltk.download('punkt') # 토큰화를 위한 데이터셋 다운로드
nltk.download('averaged_perceptron_tagger') # 품사 태깅을 위한 데이터셋 다운로드
# 표제어 추출 객체 생성
lemmatizer = WordNetLemmatizer()
# 예제 텍스트
text = "The leaves on the trees are falling."
# 텍스트 토큰화
words = word_tokenize(text)
# 표제어 추출
lemmatized_words = [lemmatizer.lemmatize(word) for word in words]
print("원본 단어:", words)
print("표제어 추출 후:", lemmatized_words)
Python
복사
지금까지는 영어로 이루어진 텍스트를 전처리해보았다. KoNLPy는 한글 형태소 분석을 가능하게 해주는 패키지이다.
먼저, Okt 클래스를 선언하여 형태소 분석을 위한 다음과 같은 함수들을 제공한다.
•
morphas(phrase) : 주어진 텍스트를 형태소 단위로 분리한다.
•
nouns(phrase) : 주어진 텍스트틀 형태소 단위로 분리해서 명사만
•
pos(pharase) : 주어진 텍스트를 형태소 단위로 분리해서 태깅 하여 보여준다
다음은 실습코드이다
예제 데이터 만들기
from konlpy.tag import Okt
k = Okt()
sentence= '''🌟빅데이터 분석 학회 BDA 8기 학회원 모집🌟
BDA (Big Data Analysis) 8기 학회원을 모집합니다!
❤️BDA학회원 혜택❤️
1. 내부, 외부 공모전 수상시 스타트업 채용 기회 제공
※학회 가입 시, 자세한 내용 공지 예정
2. 원하는 산업과 직무의 현직자 강연 및 Q&A 가능
※ 1,000명 넘는 현직 데이터 분석가 커넥션 및 1:1 멘토링은 추가 비용 발생
🔥우수학회원 전용 혜택🔥
1. Tableau 핸즈온, AWS Cloud 핸즈온 교육 기회 제공
2. (사)한국빅데이터학회 실물 수료증 발급
✅️모집대상
#전공 무관, 빅데이터에 관심있는 대학생 및 직장인
#수업을 성실히 따라갈 수 있는 의지와 열정을 가지신 분
✅️모집기간: 1월 18일~2월 12일까지 <모집 공지>오픈채팅방에 입장
※오픈채팅방에 모집폼 링크가 공유되며 12일이 지나면 오픈채팅방 입장이 제한되므로
반드시 기간 내에 입장해주시기 바랍니다!
BDA 8기 학회원 모집 공지방 1
https://open.kakao.com/o/g7PLb7Uf
BDA 8기 QnA 오픈채팅방
https://open.kakao.com/o/ghZNd7Uf
(모집 공지방에서는 채팅이 불가능하므로 질문사항이 있으시다면 이 곳에서 문의해주세요!)
✅️모집파트
※모집인원 180명 이하 시, 반 개설되지 않을 수 있음
※상세 커리큘럼 확인※
https://bit.ly/BDAcurriculum
<FAQ>
1. BDA에 관심 있으신 분은 오픈채팅방에 들어오셔서 분반설명회(OT) 들으시고 안내사항에 따라주세요. (OT : 2월 14일 진행예정)
2. 분반별 최대 신청 가능 인원은 500명입니다. (구글폼 작성시간 기준으로 선착순 500명)
3. 매 기수활동기간은 6개월입니다(휴회기간에 따라 활동기간은 변동가능)
4. 중간고사 휴회기간 : 2024/03/30 ~ 2024/04/26
기말고사 휴회기간 : 2024/05/25 ~ 2024/06/21
(변동가능성 있음)
5. 학회비 : 50000원 (투명하게 학회원들의 혜택을 위해 사용됩니다.)'''
Python
복사
실습
print(k.nouns(sentence))
print(k.pos(sentence))
Python
복사