전처리와 맞춤법 검사까지 끝났다면 이제는 텍스트 분석의 기초이자 제일 중요한 단계라고 할 수 있는 형태소 분석을 할 차례입니다.
한글 형태소 분석기는 매우 많습니다.
꼬꼬마, 한나눔, okt(구 트위터), mecab 등...
이 모든 형태소 분석기를 일일이 다운받으려면 너무나도 귀찮겠지만 ... 데이터 사이언티스트들을 위해 형태소 분석기를 한데 모아 패키지를 만들어주신 분들이 계십니다.
https://github.com/konlpy/konlpy
GitHub - konlpy/konlpy: Python package for Korean natural language processing.
Python package for Korean natural language processing. - GitHub - konlpy/konlpy: Python package for Korean natural language processing.
github.com
각 형태소 분석기의 자세한 정보와 사용법은 아래 공식 문서에서 찾아보실 수 있습니다.
https://konlpy.org/ko/latest/morph/
형태소 분석 및 품사 태깅 — KoNLPy 0.6.0 documentation
형태소 분석 및 품사 태깅 형태소 분석 이란 형태소를 비롯하여, 어근, 접두사/접미사, 품사(POS, part-of-speech) 등 다양한 언어적 속성의 구조를 파악하는 것입니다. 품사 태깅 은 형태소의 뜻과 문
konlpy.org
저는 Okt 분석기를 사용해서 한글 형태소를 분석했습니다.
분석에 필요한 모듈과 패키지를 임포트해줍니다.
import pandas as pd
from tqdm.notebook import tqdm
import re
from collections import Counter # 형태소별 빈도 구할 때 사용
from konlpy.tag import Okt
okt = Okt()
분석할 파일을 불러오고 확인합니다.
df = pd.read_csv("파일명", encoding='UTF-8')
print(df.shape, df.columns)
corpus = df['컬럼명'].to_list() # 문장(X문서X)으로 가져와서 실행.
# ↑ 추후에 다른 분석 시도할 때 문장 별 형태소가 필요할 때도 있음.
# 문장별 형태소와 이를 문서로 합친 게 있으면 편하기 때문에 문장별로 형태소 분석 실행.
print(len(corpus))
명사, 동사, 형용사 빈도를 분석하기 위해 각각의 리스트를 선언하고
조사와 형태소/품사, 형태소 리스트도 만들어줍니다.
조사는 추후 불용어 목록을 만들 때 사용됩니다.
nouns = []
verbs = []
adjs = []
josas = [] # 불용어 목록에 조사 사용하기 위함.
morphs = [] # 품사 태깅 없이 형태소만 추출. 추후 TF-IDF, N-gram등 텍스트 분석은 이 데이터로 진행함.
pos_list = [] # 감성분석할 때 필요.
for i in tqdm(range(len(corpus))):
# 답변에서 형태소/품사 추출
a = okt.pos(corpus[i], norm=True, stem=True) # 단어의 정규화와 어간 추출을 실행(True).
m = okt.morphs(corpus[i], norm=True, stem=True)
morphs.append(m) # 형태소 추가
pos_list.append(a) # 형태소/품사 추가
for x, y in a:
# 품사가 명사면 명사 리스트에 단어 추가
if y == 'Noun':
nouns.append(x)
# 품사가 동사면 동사 리스트에 단어 추가
elif y == 'Verb':
verbs.append(x)
# 품사가 형용사면 형용사 리스트에 단어 추가
if y == 'Adjective':
adjs.append(x)
# 품사가 조사면 조사 리스트에 단어 추가.
elif y == 'Josa':
josas.append(x)
# 명사, 동사, 형용사 리스트에서 10개 단어씩 출력해서 확인
print(nouns[0:10])
print(verbs[0:10])
print(adjs[0:10])
print(josas[0:10])
추출한 형태소 목록으로 형태소 빈도 데이터 프레임 생성 후 파일을 저장하면 끝! 입니다.
''' 명사, 동사, 형용사, 조사 똑같이 아래 코드 반복 '''
# 명사 리스트에서 명사 빈도 리스트 생성
print(len(Counter(nouns))) # 이 값을 밑에 most_common 안에 넣으면 됨.
noun_cnt = Counter(nouns).most_common()
명사 = []
명사빈도 = []
for a, b in noun_cnt:
명사.append(a)
명사빈도.append(b)
# 단어와 빈도를 가지고 판다스 데이터프레임(엑셀 표와 비슷) 생성
noun_df = pd.DataFrame({'명사':명사, '빈도':명사빈도})
# 명사 데이터프레임을 파일로 저장. .xlsx, .csv, .txt 등 가능.
noun_df.to_csv("파일 저장 경로", index=False, encoding='UTF-8')
noun_df
다른 기술 블로그들이 그렇듯,
코드를 블로그에 공유하는 것은 기록과 '공유'를 위해서입니다.
만약 제 글의 도움을 받아 본인의 글을 작성하신다면 출처를 남겨주시길 바랍니다.
문의는 댓글로 남겨주시면 확인 후 답변드리겠습니다.
'데이터 분석 > Python' 카테고리의 다른 글
[텍스트 마이닝-분석] 단어동시출현행렬 및 CONCOR 분석 (0) | 2023.09.18 |
---|---|
[텍스트 마이닝-분석] TF-IDF: sklearn Tfidfvectorizer 사용 (0) | 2023.09.17 |
[텍스트 마이닝-전처리] 한글 맞춤법 검사: Py-hanspell (0) | 2023.09.17 |
[텍스트 마이닝-전처리] 불용어 제거 및 한글만 남기기: 파이썬 정규표현식 (0) | 2023.09.17 |
[텍스트 마이닝-수집] 네이버 블로그 크롤러(2) - 본문 수집 (0) | 2023.09.17 |
댓글