: 앞에서 진행한 '1-06. 텍스트 요약 (gensim 01)' 에서 이어진다.

 

3. gensim 실습01

 : 언어처리 model을 불러온다.

import gensim
model=gensim.models.Word2Vec.load('ko/ko.bin')

 

 : 1. 유사 단어 검색 및 2. 유사도 확인

1.
print(model.wv.most_similar("사람"))

# 결과 #
[('젊은이', 0.6494427919387817), ('여인', 0.6287257671356201), ('백성', 0.6063710451126099), 
('포졸', 0.6043275594711304), ('죄인', 0.5960500836372375), ('선비', 0.5868039131164551), 
('부녀자', 0.5654411315917969), ('죄수', 0.5639811754226685), ('구경꾼', 0.5620019435882568), 
('손님', 0.5589558482170105)]


2.
print(model.wv.similarity("사람","강아지"))

# 결과 #
0.23977639

 

: 텍스트 요약을 위해 genism에 대해 알아 보겠다.

 

1. gensim 이란?

 : 외부 라이브러리로 자연어 처리를 위해 사용하는 머신러닝 라이브러리다. 주제 모델링, 문서 인덱싱, 텍스트 유사성 찾기에 많이 사용 된다. 문서요약을 위해 summarization 모듈을 사용할 예정이다. 4.X이 버전을 설치해야 summarization 사용이 가능하다.

 

2. gensim 세팅

 : gensim 3.7.3 버전을 설치해서 사용할 예정이다. 아래 명령어를 terminal 창에 입력해서 gensim 을 설치한다.

pip install gensim==3.7.3

 

 아래 명령어를 입력해서 뜨는 list에서 설치가 제대로 됐는지 확인한다.

pip list

# 결과 #
Package    Version
---------- -------
gensim     3.7.3

https://github.com/Kyubyong/wordvectors 링크로 들어가서 ko.zip 파일을 다운 받아야한다. 링크로 들어가서 스크롤을 내리다보면 Korea(w) 가 보인다 click 하자

 

 Korea (w)를 누르면 아래와 같은 화면이 뜬다. 우측 상단에 다운로드 버튼을 클릭다.

 아래와 같은 창이 뜨면 "무시하고 다운로드" 를 클릭힌다. 파일을 현재 작업하는 python file이 있는 곳으로 옮기고 압축을 푼다.

 이제 gensim을 사용할 준비가 되었다. 다음 장에서 실습을 통해 문서요약을 진행해 보겠다.

 

 

 : 텍스트 요약을 위해 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

 

 : 텍스트 요약을 위해 re 에 대해 알아 보겠다.

1. re 란?

 : 정규표현식(Reular Expression)은 문자열을 처리할 때 사용하는 라이브러리로, python, c, 자바, 문서작성 프로그램등 에서 활용된다. 특정 문자열을 추출하거나 변환할 수 있다.

 

2. re 실습.

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

 

2.01. re.findall()

 : findall()은 문자열에서 조건에 맞춰 추출하는 함수이다. 첫번째 '\w+' 인자를 넣어 단어를 추출한다. 띄어쓰기를 인식해서 나눠준다. 두번째 인자는 변수를 넣으면 된다. 결과는 list 형식으로 저장된다.

import re

findall_word = re.findall(r'\w+', text)
print(findall_word)

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

 

 : 다음은 숫자가 숫자만 찾아보겠다. 숫자를 의미하는 구분자는 '\d+' 이다.

findall_num = re.findall('(\d+)', text)
print(findall_num)

# 결과 #
['4', '0', '11', '12', '5', '25', '5', '50', '5', '10', '3', '4', '60', '0', '50', '5', '25', '5', '50', '0', '25', '19', '4', '9', '11', '12', '6', '15', '7', '0', '25', '9', '11', '12', '1', '3', '5', '6', '0', '25', '4', '25', '3', '75', '4', '50', '0', '50', '2022', '7', '1', '11', '19', '2022', '7', '9', '10', '9', '4', '50', '1999', '2022', '10', '10', '2', '2', '0', '0', '0', '6', '0', '9', '1', '5', '1', '4', '2', '3', '3', '4', '5', '2', '4', '2', '9', '5', '2', '7', '5', '19', '0', '3', '1', '1', '5', '6', '10', '6', '7000', '7', '1', '1', '3', '2021', '4', '1', '6', '2', '3', '1', '0', '4', '2', '0', '6', '3', '0', '8', '4', '0', '5', '1', '1300', '2', '0', '3', '50', '23']

 

 : 숫자로 시작하는 단어를 추출하겠다.

findall_num = re.findall('\d\w+', text)
print(findall_num)

# 결과 #
['4분기', '11', '12일', '25', '50', '10', '3월', '60', '50', '25', '50', '25', '19명', '4명은', '9월에서', '11월', '12월로', '6월', '15개월', '7월', '25', '11', '12월과', '5월에', '6일', '25', '25', '75', '50', '50', '2022년', '7월', '1년', '11개월', '19', '2022년', '7월부터', '9월까지', '10차례', '9월', '50', '1999년', '2022년', '10', '10월부터', '3월', '5월', '4월', '5월', '5월', '19', '1월', '5월', '6조원이나', '10월', '6조7000억원', '7개월', '1분기', '2021년', '4분기', '2년', '3개월', '1분기', '2분기', '3분기', '4분기', '1분기까지', '1300원대', '50', '23일']

 

이렇게 조건에 따라 원하는 문자를 추출할 수 있다.

 

2.02. re.compile()

 : compile()은 문자열을 변환하는 함수이다. 위에 text에서 숫자를 '***'로 마스킹 해보겠다. 보기 편하게 하기 위해 ' 1-03. 텍스트 요약(textwrap)' 에서 사용했 "textwrap.fill()"함수도 함께 사용하겠다.

import textwrap

re_compile = re.compile('\d+')
masking_text = re_compile.sub("***", text)
print(textwrap.fill(masking_text, width=50))

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

 

compile의 경우 개인정보를 마스킹할 때 유용하게 사용할 수 있다.

 

 

 

 

 : 텍스트를 요약하기에 앞서 바이너리(Binary)와 Base64에 대해 알아 보겠다.

 

1. 바이너리 파일(Binary file) 이란?

    ● '0'과 '1' 2진수 데이터만으로 인코딩된 파일이다.

    ● 데이터 처리에 효율적이지만 사람이 직접 읽을 수 없다.

    대표적인 확장자 : exe, zip, mp3, jpg, png, dll 등이 있다.

 

2. Base64 란?

    ●  다양한 통신채널을 통해 바이너리 데이터를 안전하게 전송할 수 있게 하는 방법이다.

    ●  화면에 표시되는 ASCⅡ 문자들 써서 표현할 수 있는 가장 큰 진법은 64이다.

 

 : base64, binary, ASCⅡ등 개념이 어렵고 복잡할 수 있다. 간단하게 이야기하면 하나의 문자를 어떻게 표현하는지 그 방식이 다른 것이다. 'A'라는 글자를 1번 사람은 '에이'라고 읽고, 2번 사람은 'A라는 모양의 그림이구나'라고 인식하고, 3번 사람은 '의미없는 낙서'라고 생각할 수 있다. 이 때, 1번 ~ 3번 사람이 각각의 ' base64, binary, ASCⅡ'의 방식이라고 생각하면 된다. 특정 객체를 인식하고 생각하는 방법의 차이인 것이다.

 

3. 인코딩 디코딩은 왜 하는가?

 : 인코딩은 데이터를 압축하거나 형식을 바꿔 저장공간을 절약해준다. 이를 통해 전송시간을 줄이는 데 도움이 된다. 디코딩은 인코딩으로 변환된 데이터를 원래 형태로 돌려 사용자가 알아볼 수 있게 하는 역할을 한다.

 

4. 바이트 문자열의 인코딩.

  : "Hellow world"를 base64로 인코딩할 것이다. base64로 인코딩하기 위해서는 binary 형식이어야한다. 그래서 먼저 ascii로 변환해 binary로 만들어 주고 base64로 인코딩을 진행해야 한다.

import base64

string = "Hellow world"

bstring = string.encode('ascii') # string을 binary로 변경하기 위해 ascii 인코딩한다.
print(bstring)

encode_base64 = base64.b64encode(bstring) # base64로 디코딩한다. 바이너리만 base64 디코딩이 가능하다.
print(encode_base64)
결과

 

5. 문자열의 디코딩.

  : 위에 코드에 이어서 진행한다.

decode_base64 = base64.decodebytes(encode_base64)
print(decode_base64)
결과

 

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

1-06. 텍스트 요약 (gensim 01)  (0) 2024.06.19
1-05. 텍스트 요약 (collections.Counter)  (1) 2024.06.18
1-04. 텍스트 요약 (re)  (0) 2024.06.17
1-03. 텍스트 요약 (textwrap)  (0) 2024.06.16
1-01. 텍스트 요약 (개요)  (0) 2024.06.10

 : Python을 이용해 텍스트를 요약하는 프로젝트를 진행할 것이다. 요약하고자 하는 내용을 디코딩한 후 키워드를 추출해서 요약하고 이를 파일로 저장하는 방향으로 프로젝트를 진행할 것이다.

 

+ Recent posts