단어 빈도수 분석
- 한글 텍스트 데이터 → 한글 형태소 분석기 → 형태소 단위로 토큰화 → 명사(Noun) 추출
- python collections 패키지 → Counter() 이용 → 빈도수 분석
- 빈도수 분석 결과 → wordcloud 라이브러리를 이용하여 시각화
python collections 패키지 Counter() 함수
기능 : 문자열, 리스트, 튜플 등 여러 성분 원소를 저장하고 있는 자료형에서 각 성분 원소의 빈도수를 계산해주는 함수
- 딕셔너리 형태지만 counter의 고유의 자료형 > 활용, 변수 등 모두 동일 하지만 다른 자료형이다
- collections.Counter()함수 실행의 결과 > 자료형 : Counter > python dict의 성질을 포함
- len을 변수로 쓰면 len함수가 변수와 충돌해 오류가 남
ex)
#필요한 함수 임폴트
from collections import Counter
#함수 실행의 결과
Counter(["hi", "hey", "hi", "hi", "hello", "hey"])
Counter({'hi': 3, 'hey': 2, 'hello': 1})
# text data 불러오기
## 파일 경로 설정
file_path = '/content/drive/MyDrive/NLP/constitution.txt'
with open(file_path, 'r') as f: # 파이썬으로 파일 읽어 오기
text = f.read()
print(text)
#################################################################
# from collections import Counter
import collections
cnt = collections.Counter(text)
print(cnt)
# mecab 형태소 분석기 > 형태소 분석 > 체언(명사) 추출 > nouns(text) 함수 활용
import mecab #라이브러리 임폴트
mc = mecab.MeCab()
nounss = mc.nouns(text) #체언(명사) 추출
print(f"{nounss}\n{len(nounss)}\n\n{'-'*80}\n")
####################################################################
# 길이가 1보다 큰 체언만 추출
nouns_mecab = []
for n in nounss:
if len(n) > 1:
nouns_mecab.append(n)
print(f"{nouns_mecab}\n{len(nouns_mecab)}")
#길이가 1보다 큰 체언의 빈도수 분석
cnt_mecab = collections.Counter(nouns_mecab) #빈도수 분석
print(f"{cnt_mecab}\n{len(cnt_mecab)}")
cntt = cnt_mecab['대통령']
print(cntt)
# kiwi 형태소 분석기 > 불용어 제거 + 형태소 분석
import kiwipiepy #라이브러리 임폴트
kw2 = kiwipiepy.Kiwi(typos='basic_with_continual') #오타 교정
stop_words2 = kiwipiepy.utils.Stopwords()
morphss = kw.tokenize(text, normalize_coda=True, stopwords=stop_words2) #불용어 제거
print(f"{morphss}\n{len(morphss)}\n\n{'-'*80}\n")
#####################################################################
morhp_kiwi = []
for morph, pos, _, n in morphss: #길이가 1보다 큰 체언(명사) 추출
if pos.startswith('N') and n > 1:
morhp_kiwi.append(morph)
print(f"{morhp_kiwi}\n{len(morhp_kiwi)}\n\n{'-'*80}\n")
cnt_kiwi = collections.Counter(morhp_kiwi) #빈도수 분석
print(f"{cnt_kiwi}\n{len(cnt_kiwi)}")
# kiwi분석기와 mecab분석기 비교
print(f"{cnt_kiwi}\n{len(cnt_kiwi)}")
print('-'*80)
print(f"{cnt_mecab}\n{len(cnt_mecab)}")
wordcloud 라이브러리
- 텍스트에 등장하는 단어들의 빈도수를 기반으로 텍스트 데이터의 주요 단어들을 시각적으로 표현하는데 사용되는 라이브러리
- 사용 방법
1) 필요한 라이브러리 / 함수 임폴트
2) 한글 폰트 설정
3) WordClod 클래스 함수 객체 생성
4) wordcloud 이미지 생성
5) 이미지 저장
6) 이미지 출력
!pip install wordcloud #라이브러리 설치
import wordcloud #라이브러리 임폴트
# colab 환경 > 한글 폰트(나눔 글꼴) 설치
!apt-get update -qq
!apt-get install fonts-nanum* -qq
fonts_path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic-YetHangul.ttf'
#함수 호출, 객체 생성
wc = wordcloud.WordCloud(
font_path=fonts_path,
width = 1000,
height = 500,
max_words = 50,
background_color = 'white',
max_font_size = 200,
random_state = 0
)
# mecab의 빈도수 시각화
wc.generate_from_frequencies(cnt_mecab) #이미지 생성
file_path2 = '/content/drive/MyDrive/NLP/헌법_mecab.png'
wc.to_file(file_path2)
# kiwi의 빈도수 시각화
wc.generate_from_frequencies(cnt_kiwi) #이미지 생성
file_path2 = '/content/drive/MyDrive/NLP/헌법_kiwi.png'
wc.to_file(file_path2)
참고자료