[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.09.25
📕 학습 목록
- 구문 분석
- 형태소 분석
- spaCy, KoNLPY
📗 기억할 내용
1. 구문 분석 (Syntactic Parsing)
1) 한국어 구문 분석 기본 개념
① 형태소 분석 (Morphological Analysis)
- 문장을 구성하는 단어들을 최소 의미 단위인 형태소로 분해하는 과정
- 한국어에서는 어미, 접사 등의 형태소가 중요한 역할
② 의존 구문 분석 (Dependency Parsing)
- 문장의 각 단어가 어떤 다른 단어에 의존하는지 분석하는 방법
- 주어, 목적어, 서술어 등 문장 성분의 관계를 분석하여 문장의 의미적 구조를 파악
③ 문장 성분의 역할
- 주어(SUBJ), 서술어(VERB), 목적어(OBJ)와 같은 문장 성분들이 문장에서 어떤 역할을 하는지 분석
- 이러한 성분들은 문장의 의미를 이해하는 데 필수적인 정보
2) 자연어 처리 라이브러리 활용
① spaCy와 KoNLPy를 이용한 한국어 구문 분석
- 한국어 구문 분석에서 두 라이브러리를 사용하여 형태소 분석, 의존 구문 분석을 구현
- spaCy는 다양한 자연어 처리 작업에 유용한 구조화된 도구들을 제공
- KoNLPy는 한국어 전용 형태소 분석을 지원하는 도구
② Token 객체의 속성 분석
- text: 토큰(단어) 자체의 텍스트
- dep_: 해당 토큰의 의존 관계 (예: 주어, 목적어 등)
- head: 해당 토큰이 의존하는 지배소
- lemma_: 형태소 분석을 통해 얻은 원형(어근)
- tag_: 단어의 품사 정보
- is_stop: 해당 토큰이 불용어인지 여부 확인
③ 토큰의 의존 관계와 지배소 확인 방법
- 문장 내 토큰 간의 의존 관계를 분석하고, 각 토큰이 어느 지배소에 의존하는지 확인
- 이를 통해 문장의 전체 구조를 이해하고 분석 결과를 해석할 수 있음
3) 구문 트리 시각화
① 구문 분석 결과 시각화 방법 (displacy 사용)
- spaCy의 displacy 도구를 사용하여 구문 분석 결과를 트리 형태로 시각화할 수 있음
- 각 토큰 간의 의존 관계를 그래픽적으로 표현하여 직관적으로 문장 구조를 이해할 수 있음
② 토큰의 품사(POS Tagging) 시각화
- 토큰마다 해당 품사 정보를 태깅하고, 이를 시각적으로 나타내는 방법
- 명사, 동사, 형용사 등 각 품사에 따른 구문 분석 결과를 쉽게 파악할 수 있음
4) 정오답 분석 시스템 구현
① 문제 자동 생성 프로그램
- 구문 분석을 활용하여 퀴즈 문제를 자동으로 생성하고, 사용자가 입력한 답에 대한 정오답 여부를 판별
- 정답 확인뿐 아니라, 틀린 답에 대한 해설을 제공하여 학습을 도움
② 로그 기록 시스템
- 사용자의 입력 데이터(답안), 정답 여부, 문제를 푼 시간, 출제된 문제 정보를 기록
- 로그를 분석하여 사용자의 학습 진행 상황을 추적할 수 있음
5) 구문 분석을 통한 자연어 처리 응용
① 문장의 의존 관계를 통한 의미 분석
- 구문 분석을 통해 각 문장 성분이 문장에서 어떤 의미적 역할을 수행하는지 분석
- 주어, 목적어, 서술어 간의 관계를 이해함으로써 문장의 전체 의미를 추출
② 형태소 분석 결과를 활용한 키워드 추출
- 형태소 분석을 통해 중요한 단어(키워드)를 추출하고, 이를 기반으로 텍스트의 핵심 내용을 요약할 수 있음
③ 불용어 처리 및 형태소 기반 구문 분석 응용
- 불용어(의미가 크지 않거나 자주 등장하는 단어)를 제거한 후, 형태소 분석을 통해 중요한 정보를 얻음
- 문장 구조를 바탕으로 의미 있는 정보만을 추출하여 다양한 자연어 처리 응용 분야에 활용 가능
📘 코드 실습
- 구문 분석
# 구문 분석(Syntactic Parsing): 문법적 구조에 따라 자연어를 분해하고 분석하는 과정 # 주요 라이브러리: spacy, nltk, ckonlpy (KoNLPy의 확장 버전) import spacy from spacy import displacy import nltk from ckonlpy.tag import Twitter # 1. spaCy를 이용한 한국어 구문 분석 # 한국어 처리 모델 로드 ('ko_core_news_sm'은 한국어 소형 모델) nlp = spacy.load('ko_core_news_sm') # 문장 분석 doc = nlp('이것은 한국어로 된 문장입니다') # 토큰 속성 확인: text(단어), dep_(의존관계), head(지배소), lemma_(원형), tag_(품사), is_stop(불용어 여부) for token in doc: print(token.text, token.dep_, token.head.text, token.lemma_, token.tag_, token.is_stop) # 의존 관계를 시각적으로 표시 (Jupyter 환경에서) displacy.render(doc, style='dep', jupyter=True) # 2. KoNLPy의 확장 버전인 ckonlpy를 사용하여 한국어 고유 명사 처리 및 구문 분석 # KoNLPy 기반의 Twitter 형태소 분석기 사용 tokenizer = Twitter() # 입력 텍스트 (구문 분석 대상 문장) target_text = '신카이 마코토의 작화와, 미유와 하나카나가 연기를 잘해줘서 더 대박이었다.' # 형태소 분석 결과 확인 (고유 명사로 처리되지 않은 기본 형태) print(tokenizer.pos(target_text)) # 고유 명사 등록 (예: '미유', '하나카나'는 이름이므로 명사로 처리) tokenizer.add_dictionary(['미유', '하나카나'], 'Noun') # 형태소 분석 결과 재확인 (고유 명사로 등록된 후) print(tokenizer.pos(target_text)) # 3. nltk를 사용한 구문 분석 규칙 정의 및 처리 # 구문 분석 규칙 정의: 명사구(NP), 동사구(VP), 형용사구(AP)를 정의 grammar = ''' NP: {<N.*>*<Suffix>?} # 명사구 VP: {<V.*>*} # 동사구 AP: {<A.*>*} # 형용사구 ''' # nltk의 RegexpParser를 사용하여 구문 분석기 생성 parser = nltk.RegexpParser(grammar=grammar) # 구문 분석 실행 (정의된 규칙에 따라 텍스트 구문 분석) chunks = parser.parse(tokenizer.pos(target_text)) # 구문 분석 결과 출력 print(chunks)
📙 내일 일정
- TF-IDF 학습
'TIL _Today I Learned > 2024.09' 카테고리의 다른 글
[DAY 52] 텍스트 분류 모델 구축 (LSTM) (0) | 2024.09.27 |
---|---|
[DAY 51] TF-IDF, Deep Learning 실습 (0) | 2024.09.26 |
[DAY 49] 자연어 처리(NLP) (0) | 2024.09.24 |
[DAY 48] Deep Learning 실습 (0) | 2024.09.23 |
[DAY 47] Deep Learning 실습 (0) | 2024.09.20 |