: 텍스트 요약을 위해 collections.Counter와 most_common에 대해 알아 보겠다.

 

1. collections 이란?

 : python의 범용 내장 컨테이너 dict, list, set, tuple에 대한 대안을 제공하는 특수 컨테이너로 데이터형을 구현해 준다. 우린 여기서 요소의 갯수를 확인 할 수 있는 collections.Counter()를 학습할 것이다.

 

2. collections 실습.

 : 1-03. 텍스트 요약(textwrap) 에서 사용했던 text 변수를 그대로 사용할 예정이다. text 변수에 저장된 문자열은 Link 의 기사를 복사해서 한 줄로 붙여 사용했다. '1.02. textwrap 실습' 첫 내용을 확인하면 된다. 또한 이번 실습은 '1-04. 텍스트 요약 (re)'의 내용을 포함한다.

 

2.01. collections.Counter()

 : collectinos.Counter를 사용하면 리스트나 문자열과 같은 자료형 data에서 같은 요소의 갯수를 확인 할 수 있다. 이제 실습을 진행해 보자. re.findall을 사용해 word에 모든 단어를 저장한다. 이 변수를 collectino.Counter 에 넣으면, 각 단어의 갯수를 확인 할 수 있다. 아래 결과에서 보면 형식은 dictionary이며, '0'은 16번 '5'는 7번과 같이 각 단어의 갯수를 확인 할 수 있다. 많이 등장했던 단어 순서대로 나열된다.

import collections
import textwrap
import re

word = re.findall(r'\w+', text)
counter = collections.Counter(word)
print(counter)

# 결과 #
Counter({'0': 16, '5': 7, '50': 7, '4': 7, '이후': 7, '2': 7, '25': 6, '1': 6, '3': 6, 
'수': 6, '기준금리를': 5, '로': 5, '금리': 5, '올해': 5, '있다': 5, '지난해': 5, 
'선제적으로': 4, '금리를': 4, '기준금리': 4, '포인트': 4, '5월': 4, '4분기': 3, '부채': 3, 
'성장률': 3, '한은이': 3, '물가': 3, '환율': 3, '셈이다': 3, '을': 3, '차례': 3, '에서': 3, 
'만에': 3, '다시': 3, '9': 3, '연속': 3, '연': 3, '2022년': 3, '여전히': 3, '6': 3, '분기': 3, 
'고': 3, '우리나라는': 2, '전망이': 2, '비교적': 2, '증가세가': 2, '것으로': 2, '대에': 2, 
'있는': 2, '과감하게': 2, '인하할': 2, '유인이': 2, '연준은': 2, '11': 2, '현지시간': 2, 
'열린': 2, 'FOMC': 2, '이날': 2, '수준': 2, '10': 2, '3월': 2, '높은': 2, '가운데': 2, 
'이에': 2, '연말에': 2, '7월': 2, '이어': 2, '반면': 2, '유럽은': 2, '은': 2, '물가가': 2, 
'작년': 2, '유로존': 2, '를': 2, '일부': 2, '것이다': 2, '여기에': 2, '유럽': 2, 
'전망치는': 2, '보기': 2, '상승률': 2, '가장': 2, '1분기': 2, '않은': 2, '않다': 2, '며': 2, 
'유럽과': 1, '캐나다가': 1, '내렸지만': 1, '이후에 나': 1, '통화정책': 1, '전환이': 1, 
'가능할': 1, '것이란': 1, '지배적이다': 1, '양호한': 1, '경제': 1, '성장률과': 1, 
'꺾이지': 1, '않는': 1, '영향': 1, '등이': 1, '미친': 1, '분석된다': 1, '머무르고': 1, 
'유럽과는': 1, '상황이': 1, '다르다': 1, '불안을': 1, '감수하고서': 1, '적은': 1, 
'12일': 1, '연방공개시장위원회': 1, '정례회의에서': 1, '목표': 1, '범위를': 1, '동결했다': 1, 
'공개된': 1, '새': 1, '점도표': 1, '위원들의': 1, '향후': 1, '전망을': 1, '표시한': 1, 
'도표': 1, '에서는': 1, '말': 1, '전망치': 1, '중간값은': 1, '이었다': 1, '지난': 1, 
'회의': 1, '당시의': 1, '60': 1, ' 보다': 1, '수준이다': 1, '현재': 1, '고려할': 1, '때': 1, 
'연내': 1, '인하': 1, '예상': 1, '횟수가': 1, '세': 1, '포인트씩': 1, '한': 1, '가량으로': 1, 
'줄어든': 1, '위원': 1, '19명': 1, '4명은': 1, '아예': 1, '인하가': 1, '없을': 1, 
'봤다': 1, '시장이': 1, '기대하는': 1, '연준': 1, '피벗': 1, '시점도': 1, '당초': 1, 
'9월에서': 1, '가까운': 1, '11월': 1, '또는': 1, '12월로': 1, '늦춰지고': 1, '앞서': 1, 
'6월': 1, '약': 1, '15개월': 1, ' 인상을': 1, '멈췄다가': 1, '베이비스텝': 1, 
'밟았지만': 1, '12월과': 1, '5월에': 1, '이번까지': 1, '일곱': 1, '묶었다': 1, 
'인하했다': 1, '유럽중앙은행': 1, 'ECB': 1, '6일': 1, '하향조정했다': 1, 'ECB는': 1, 
'독일': 1, '프랑크푸르트에서': 1, '통화정책이사회를': 1, '열어': 1, '수신금리와': 1, 
'한계대출금리는': 1, '각각': 1, '75': 1, '내렸다고': 1, '밝혔다': 1, '올리는': 1, 
'빅스텝': 1, '밟으며': 1, '금리인상을': 1, '시작한': 1, '1년': 1, '11개월': 1, 
'만의': 1, '방향': 1, '전환이다': 1, '코로나19': 1, '팬데믹': 1, '양적완화': 1, 
'등': 1, '영향으로': 1, '급등하자': 1, '7월부터': 1, '9월까지': 1, '10차례': 1, 
'올렸다': 1, '9월': 1, '는': 1, '1999년': 1, '출범': 1, '이래': 1, '최고치였다': 1, 
'연말': 1, '넘긴': 1, '유로존의': 1, '전년': 1, '대비': 1, '소비자물가': 1, '상승률은': 1, 
'10월부터': 1, '머물면서': 1, '목표치인': 1, '에': 1, '근접했다': 1, '안정세에': 1, 
'접어든': 1, '내': 1, '각국': 1, '경기침체': 1, '우려도': 1, '가시지': 1, '않자': 1, 
'선제적인': 1, '인하를': 1, '감행했다': 1, '상향됐지만': 1, '대다': 1, '최근': 1, 
'경제성장률': 1, '기존': 1, '내년': 1, '전망은': 1, '수정됐다': 1, '아직': 1, '안정세가': 1, 
'완연하다고': 1, '힘들다': 1, '소비자물가지수': 1, '전년동월대비': 1, '대에서': 1, '대': 1, 
'후반': 1, '4월': 1, '7': 1, '으로': 1, '내려왔지만': 1, '농산물': 1, '물가는': 1, '19': 1, 
'나': 1, '치솟고': 1, '석유류': 1, '도': 1, '1월': 1, '최고': 1, '수준을': 1, '기록했다': 1, 
'가계대출': 1, '증가세도': 1, '강해지고': 1, '가계대출은': 1, '주택': 1, '거래': 1, 
'증가와': 1, '함께': 1, '6조원이나': 1, '또': 1, '불었다': 1, '10월': 1, '6조7000억원': 1, 
'7개월': 1, '큰': 1, '증가': 1, '폭이다': 1, '성장률도': 1, '견조하다': 1, '한국은행은': 1, 
'실질': 1, '국내총생산': 1, 'GDP': 1, '직전분기대비': 1, '잠정치': 1, '이': 1, 
'집계됐 다고': 1, '발표했다': 1, '2021년': 1, '2년': 1, '3개월': 1, '성장률이다': 1, 
'성장률은': 1, '반등한': 1, '뒤': 1, '2분기': 1, '3분기': 1, '8': 1, '와': 1, 
'1분기까지': 1, '다섯': 1, '플러스': 1, '성장': 1, '기조를': 1, '유지했다': 1, 
'물가와': 1, '가계부채': 1, '완전하게': 1, '잡히지': 1, '성 장률이': 1, '견조한': 1, 
'환율까지': 1, '1300원대': 1, '후반에서': 1, '내려오지': 1, '않고': 1, '통화정책을': 1, 
'전환하기': 1, '위한': 1, '필요조 건이': 1, '대부분': 1, '충족되지': 1, '미국보다': 1, 
'포인트나': 1, '낮은': 1, '유지하고': 1, '불안까지': 1, '감수하고': 1, '인하에': 1, 
'나설': 1, '크지': 1, '이창용': 1, '한은': 1, '총재은': 1, '지난달': 1, '23일': 1, 
'금융통화위원회': 1, '직후': 1, '기자간담회에서': 1, '미국의': 1, '경제정 책으로': 1, 
'인한': 1, '환율의': 1, '변화나': 1, '자본의': 1, '이동': 1, '가능성이': 1, '크다': 1, 
'강조했다': 1, '학계의': 1, '시각도': 1, '비슷하다': 1, '김상봉': 1, '한성대': 1, 
'경제학과': 1, '교수는': 1, '미국도': 1, '한번': 1, '정도': 1, '내릴': 1, '있을지': 1, 
'없을지': 1, '모르는': 1, '상황에서': 1, '우리나라가': 1, '있다고': 1, '어렵다': 1, 
'상황을': 1, '보면': 1, '알': 1, '말했다': 1, '우리나라': 1, '인하는': 1, '내년까지': 1, 
'미뤄질': 1, '있고': 1, '사람들이': 1, '생각하는': 1, '것과는': 1, '매우': 1, '다른': 1, 
'양상으로': 1, '전개될': 1, '고금리라고': 1, '하지만': 1, '대출은': 1, '늘고': 1, 
'있기': 1, '때문에': 1, '금리가': 1, '곧': 1, '저금리로': 1, '갈': 1, '있단': 1, 
'생각은': 1, '옳지': 1, '덧붙였다': 1})

 

 : 형식이 dictionary 이기 때문에 연산이 가능하다. 아래 code를 참고 하자.

word_a = collections.Counter(['a','b','c','d','d','e','f','c'])
word_b = collections.Counter(['a','c','d','k','j','e','z','y'])
print(word_a)
print(word_b)
print(word_a + word_b)
print(word_a - word_b)
print(word_a & word_b)
print(word_a | word_b)

# 결과 #
Counter({'c': 2, 'd': 2, 'a': 1, 'b': 1, 'e': 1, 'f': 1})
Counter({'a': 1, 'c': 1, 'd': 1, 'k': 1, 'j': 1, 'e': 1, 'z': 1, 'y': 1})
Counter({'c': 3, 'd': 3, 'a': 2, 'e': 2, 'b': 1, 'f': 1, 'k': 1, 'j': 1, 'z': 1, 'y': 1})
Counter({'b': 1, 'c': 1, 'd': 1, 'f': 1})
Counter({'a': 1, 'c': 1, 'd': 1, 'e': 1})
Counter({'c': 2, 'd': 2, 'a': 1, 'b': 1, 'e': 1, 'f': 1, 'k': 1, 'j': 1, 'z': 1, 'y': 1})

 

2.02. most_common()

 : 상위 빈도수 단어를 추출할 수 있는 함수이다. 아래 실습은 상위 빈도수 20개를 추출해 준다.

most_com = counter.most_common(20)
print(most_com)

# 결과 #
[('0', 16), ('5', 7), ('50', 7), ('4', 7), ('이후', 7), ('2', 7), ('25', 6), ('1', 6), 
('3', 6), ('수', 6), ('기준금리를', 5), ('로', 5), ('금리', 5), ('올해', 5), ('있다', 5), 
('지난해', 5), ('선제적으로', 4), ('금리를', 4), ('기준금리', 4), ('포인트', 4)]

 

 

 

'업무자동화' 카테고리의 다른 글

1-07. 텍스트 요약 (gensim 02)  (0) 2024.06.19
1-06. 텍스트 요약 (gensim 01)  (0) 2024.06.19
1-04. 텍스트 요약 (re)  (0) 2024.06.17
1-03. 텍스트 요약 (textwrap)  (0) 2024.06.16
1-02. 텍스트 요약 (Binary와 Base64)  (1) 2024.06.10

+ Recent posts