본문 바로가기

AI_딥_러닝_언어지능

AI_파이썬_언어지능_rss_ir_v1

!pip install feedparser            # 설치 RSS에서 xml태크별 정보를 추출
!pip install newspaper3k           # 설치 인터넷 신문기사 분석을 위해 (ex 'Article()')
!pip install konlpy                # 설치 한국어형태소 분석기 (주어진 문장에서 명사만 추출하는 목적)
!pip install lxml[html_clean]      # 설치 신규추가 본 (2024년 가을)

import feedparser
from newspaper import Article      # !pip install newspaper3k
from konlpy.tag import Okt         # !pip install konlpy
from collections import Counter    # 명사를 추출한 후에 본문에 몇번이나 그 명사가 나오는지 확인(TF확인 용)
Collecting feedparser
  Downloading feedparser-6.0.11-py3-none-any.whl.metadata (2.4 kB)
Collecting sgmllib3k (from feedparser)
  Downloading sgmllib3k-1.0.0.tar.gz (5.8 kB)
  Preparing metadata (setup.py) ... done
Downloading feedparser-6.0.11-py3-none-any.whl (81 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.3/81.3 kB 3.0 MB/s eta 0:00:00
Building wheels for collected packages: sgmllib3k
  Building wheel for sgmllib3k (setup.py) ... done
  Created wheel for sgmllib3k: filename=sgmllib3k-1.0.0-py3-none-any.whl size=6047 sha256=77ce89765fe24b38222919f8c0f806158a051121ed35ef3a35927f7cb8debe59
  Stored in directory: /root/.cache/pip/wheels/f0/69/93/a47e9d621be168e9e33c7ce60524393c0b92ae83cf6c6e89c5
Successfully built sgmllib3k
Installing collected packages: sgmllib3k, feedparser
Successfully installed feedparser-6.0.11 sgmllib3k-1.0.0
Collecting newspaper3k
  Downloading newspaper3k-0.2.8-py3-none-any.whl.metadata (11 kB)
Requirement already satisfied: beautifulsoup4>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (4.12.3)
Requirement already satisfied: Pillow>=3.3.0 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (11.0.0)
Requirement already satisfied: PyYAML>=3.11 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (6.0.2)
Collecting cssselect>=0.9.2 (from newspaper3k)
  Downloading cssselect-1.2.0-py2.py3-none-any.whl.metadata (2.2 kB)
Requirement already satisfied: lxml>=3.6.0 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (5.3.0)
Requirement already satisfied: nltk>=3.2.1 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (3.9.1)
Requirement already satisfied: requests>=2.10.0 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (2.32.3)
Requirement already satisfied: feedparser>=5.2.1 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (6.0.11)
Collecting tldextract>=2.0.1 (from newspaper3k)
  Downloading tldextract-5.1.3-py3-none-any.whl.metadata (11 kB)
Collecting feedfinder2>=0.0.4 (from newspaper3k)
  Downloading feedfinder2-0.0.4.tar.gz (3.3 kB)
  Preparing metadata (setup.py) ... done
Collecting jieba3k>=0.35.1 (from newspaper3k)
  Downloading jieba3k-0.35.1.zip (7.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.4/7.4 MB 42.0 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Requirement already satisfied: python-dateutil>=2.5.3 in /usr/local/lib/python3.10/dist-packages (from newspaper3k) (2.8.2)
Collecting tinysegmenter==0.3 (from newspaper3k)
  Downloading tinysegmenter-0.3.tar.gz (16 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4>=4.4.1->newspaper3k) (2.6)
Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from feedfinder2>=0.0.4->newspaper3k) (1.17.0)
Requirement already satisfied: sgmllib3k in /usr/local/lib/python3.10/dist-packages (from feedparser>=5.2.1->newspaper3k) (1.0.0)
Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from nltk>=3.2.1->newspaper3k) (8.1.7)
Requirement already satisfied: joblib in /usr/local/lib/python3.10/dist-packages (from nltk>=3.2.1->newspaper3k) (1.4.2)
Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.10/dist-packages (from nltk>=3.2.1->newspaper3k) (2024.11.6)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from nltk>=3.2.1->newspaper3k) (4.67.1)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.10.0->newspaper3k) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.10.0->newspaper3k) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.10.0->newspaper3k) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.10.0->newspaper3k) (2024.12.14)
Collecting requests-file>=1.4 (from tldextract>=2.0.1->newspaper3k)
  Downloading requests_file-2.1.0-py2.py3-none-any.whl.metadata (1.7 kB)
Requirement already satisfied: filelock>=3.0.8 in /usr/local/lib/python3.10/dist-packages (from tldextract>=2.0.1->newspaper3k) (3.16.1)
Downloading newspaper3k-0.2.8-py3-none-any.whl (211 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.1/211.1 kB 11.6 MB/s eta 0:00:00
Downloading cssselect-1.2.0-py2.py3-none-any.whl (18 kB)
Downloading tldextract-5.1.3-py3-none-any.whl (104 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 104.9/104.9 kB 6.7 MB/s eta 0:00:00
Downloading requests_file-2.1.0-py2.py3-none-any.whl (4.2 kB)
Building wheels for collected packages: tinysegmenter, feedfinder2, jieba3k
  Building wheel for tinysegmenter (setup.py) ... done
  Created wheel for tinysegmenter: filename=tinysegmenter-0.3-py3-none-any.whl size=13539 sha256=c2bf859e6cbcc69ea025ade46dcd5d906f7b7f585dd91fb33b11b48c30427ec7
  Stored in directory: /root/.cache/pip/wheels/c8/d6/6c/384f58df48c00b9a31d638005143b5b3ac62c3d25fb1447f23
  Building wheel for feedfinder2 (setup.py) ... done
  Created wheel for feedfinder2: filename=feedfinder2-0.0.4-py3-none-any.whl size=3342 sha256=9566619b0e4ad697bc0065e75acbcc24ba6dd4047722567a1e76dd3e1d76a446
  Stored in directory: /root/.cache/pip/wheels/97/02/e7/a1ff1760e12bdbaab0ac824fae5c1bc933e41c4ccd6a8f8edb
  Building wheel for jieba3k (setup.py) ... done
  Created wheel for jieba3k: filename=jieba3k-0.35.1-py3-none-any.whl size=7398379 sha256=790706b2796c759c2e2d16fd274a567eb1a0a1de9d8861d26e93947cf883183b
  Stored in directory: /root/.cache/pip/wheels/7a/c4/0c/12a9a314ecac499456c4c3b2fcc2f635a3b45a39dfbd240299
Successfully built tinysegmenter feedfinder2 jieba3k
Installing collected packages: tinysegmenter, jieba3k, cssselect, requests-file, feedfinder2, tldextract, newspaper3k
Successfully installed cssselect-1.2.0 feedfinder2-0.0.4 jieba3k-0.35.1 newspaper3k-0.2.8 requests-file-2.1.0 tinysegmenter-0.3 tldextract-5.1.3
Collecting konlpy
  Downloading konlpy-0.6.0-py2.py3-none-any.whl.metadata (1.9 kB)
Collecting JPype1>=0.7.0 (from konlpy)
  Downloading jpype1-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)
Requirement already satisfied: lxml>=4.1.0 in /usr/local/lib/python3.10/dist-packages (from konlpy) (5.3.0)
Requirement already satisfied: numpy>=1.6 in /usr/local/lib/python3.10/dist-packages (from konlpy) (1.26.4)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from JPype1>=0.7.0->konlpy) (24.2)
Downloading konlpy-0.6.0-py2.py3-none-any.whl (19.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.4/19.4 MB 76.4 MB/s eta 0:00:00
Downloading jpype1-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (493 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 493.8/493.8 kB 29.8 MB/s eta 0:00:00
Installing collected packages: JPype1, konlpy
Successfully installed JPype1-1.5.1 konlpy-0.6.0
Requirement already satisfied: lxml[html_clean] in /usr/local/lib/python3.10/dist-packages (5.3.0)
Collecting lxml-html-clean (from lxml[html_clean])
  Downloading lxml_html_clean-0.4.1-py3-none-any.whl.metadata (2.4 kB)
Downloading lxml_html_clean-0.4.1-py3-none-any.whl (14 kB)
Installing collected packages: lxml-html-clean
Successfully installed lxml-html-clean-0.4.1

# [단계1] 모든 RSS파일(xml형식)을 돌아다니면서 기사의 제목과 링크를 추출함
# urls는 검색할 RSS파일들의 목록을 list로 만든것

urls = ['http://rss.etnews.com/Section901.xml',
        'http://rss.etnews.com/Section902.xml',
        'http://rss.etnews.com/Section903.xml',
        'http://rss.etnews.com/Section904.xml']

# 아래 함수는 RSS목록의 list인 urls를 받아서 그 list에 존재하는
# 모든 RSS의 안에 있는 모든 기사들의 title과 link를 추출함

def crawl_rss(urls):
  array_rss = []                            # 함수시작하는 시점에 빈 리스트를 만들어 여기에 title과 link를 담음
  for index_url in urls:                    # urls리스트에 하나씩 xml를 방문(4번 방문예정, 901 ~ 904)
    print('[Crawl Rss]', index_url)         # 현재 어떤 xml파일을 방문 중인지 표시
    parse_rss = feedparser.parse(index_url) # 현재 xml파일을 파싱 후, 결과를 parse_rss에 저장
    for p in parse_rss.entries:             # parse_rss에 있는 모든 entries/기사를 검색하면서 나눠서 담음
      array_rss.append({'title': p.title, 'link': p.link})
  return array_rss

list_artcles = crawl_rss(urls)
print(list_artcles)
[Crawl Rss] http://rss.etnews.com/Section901.xml
[Crawl Rss] http://rss.etnews.com/Section902.xml
[Crawl Rss] http://rss.etnews.com/Section903.xml
[Crawl Rss] http://rss.etnews.com/Section904.xml
[{'title': '[우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다', 'link': 'https://www.etnews.com/20250103000176'}, {'title': '헌재, 尹 탄핵 정식재판 14일부터 시작', 'link': 'https://www.etnews.com/20250103000223'}, {'title': '에이피텍, 고속 0.1㎜ 마이크로 볼 제트 부착장비 출시', 'link': 'https://www.etnews.com/20250103000024'}, {'title': '우원식, 마은혁 임명보류에 권한쟁의심판·가처분 청구', 'link': 'https://www.etnews.com/20250103000221'}, {'title': '제주항공 여객기 참사, 항공사 특별안전점검 연장…비행기록장치 6일 美 이송', 'link': 'https://www.etnews.com/20250103000212'}, {'title': '최상목, 美대사·사령관 접견..“외교안보 기조 흔들림 없이 추진”', 'link': 'https://www.etnews.com/20250103000211'}, {'title': '中 BYD, 지난해 400만대 돌파…테슬라 턱밑 추격', 'link': 'https://www.etnews.com/20250103000208'}, {'title': '박찬대 “尹 찌질함 다시 확인”…민주당, 경호처 책임자 고발', 'link': 'https://www.etnews.com/20250103000206'}, {'title': '3월부터 한강에서 비둘기 먹이 주면 과태료 최대 100만원…서울시, 제·개정 조례 공포', 'link': 'https://www.etnews.com/20250103000202'}, {'title': '권영세 “공수처 尹 체포영장 집행, 불공정·부당한 행위”', 'link': 'https://www.etnews.com/20250103000185'}, {'title': '“시리가 대화 엳듣고 개인정보 침해”… 애플, 1400억 합의금 낸다', 'link': 'https://www.etnews.com/20250103000151'}, {'title': '崔 대행, 8~14일 정부 업무보고…5개 분야로 나눠 진행', 'link': 'https://www.etnews.com/20250103000175'}, {'title': '최상목, 중소기업 만나 “과감·파격 지원 적극 강구”', 'link': 'https://www.etnews.com/20250103000166'}, {'title': '민간주도 재사용발사체 개발 본격화…체계모델 연구 착수', 'link': 'https://www.etnews.com/20250103000074'}, {'title': "국가안보실, 野의원 13명 고발..'평양무인기 침투 지시' 허위사실 유포", 'link': 'https://www.etnews.com/20250103000161'}, {'title': '尹 체포 “불가능 판단” 공수처, 경호처장 입건..경호처 “무단침입 책임 물을 것”', 'link': 'https://www.etnews.com/20250103000152'}, {'title': '온누리상품권 사업 이전 골든타임 지났다…1월 중 일부 기능 셧다운', 'link': 'https://www.etnews.com/20250103000147'}, {'title': '공수처-경호처 尹 체포영장 집행 두고 대치에… 野 “경호처장 처벌해야”', 'link': 'https://www.etnews.com/20250103000142'}, {'title': '[CES 2025] SK하이닉스, HBM3E 16단 공개…“차세대 AI 메모리 청사진 제시”', 'link': 'https://www.etnews.com/20250103000103'}, {'title': '박민수 차관 “겨울철 인플루엔자 유행, 65세 이상·어린이 예방접종 참여” 요청', 'link': 'https://www.etnews.com/20250103000101'}, {'title': '[CES 2025]LG전자, 스탠드형·이동성 강화한 프로젝터 2종 공개', 'link': 'https://www.etnews.com/20250103000068'}, {'title': "與, '여야정 국정협의체' 가동 위한 실무회동 제안", 'link': 'https://www.etnews.com/20250103000094'}, {'title': "'최대 130년형' 美 법원 선 권도형, 무죄 주장", 'link': 'https://www.etnews.com/20250103000089'}, {'title': '이재명 “항공참사특별법 제정 추진…추경도 신속하게 편성해야”', 'link': 'https://www.etnews.com/20250103000083'}, {'title': "'애플의 안간힘'…中 점유율 하락에 '새해 할인'", 'link': 'https://www.etnews.com/20250103000078'}, {'title': "기아 EV3, 르노·시트로엥 제치고 '핀란드 올해의 차' 선정", 'link': 'https://www.etnews.com/20250103000079'}, {'title': '崔 대행 “무안 유가족 긴급 생계비·긴급돌봄서비스 지원”', 'link': 'https://www.etnews.com/20250103000066'}, {'title': '로제, 한터 국가별 차트 美 10주 연속·日中 5주 연속 정상 기록', 'link': 'https://www.etnews.com/20250103000052'}, {'title': '尹 체포영장 집행, 실시간 타전하는 주요 외신', 'link': 'https://www.etnews.com/20250103000026'}, {'title': '美, 中 드론 규제 검토 …“국가 안보에 위험”', 'link': 'https://www.etnews.com/20250103000025'}, {'title': '[우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다', 'link': 'https://www.etnews.com/20250103000176'}, {'title': '최태원 대한상의 회장 “경제 최대 공포는 불확실성 … 조속한 국정 안정화 필요”', 'link': 'https://www.etnews.com/20250103000229'}, {'title': '최상목, 경제계 만나 반도체법·전력망법 빠른 처리 약속', 'link': 'https://www.etnews.com/20250103000228'}, {'title': "위고페어, 온라인 위조상품 대응 위한 '온라인마켓 위조상품 신고 가이드' 발간", 'link': 'https://www.etnews.com/20250103000225'}, {'title': '이재성 한국전자파학회장 “전파 학술·교육·국제교류 강화”', 'link': 'https://www.etnews.com/20250103000224'}, {'title': '헌재, 尹 탄핵 정식재판 14일부터 시작', 'link': 'https://www.etnews.com/20250103000223'}, {'title': '에이피텍, 고속 0.1㎜ 마이크로 볼 제트 부착장비 출시', 'link': 'https://www.etnews.com/20250103000024'}, {'title': '우원식, 마은혁 임명보류에 권한쟁의심판·가처분 청구', 'link': 'https://www.etnews.com/20250103000221'}, {'title': "[에듀플러스]웅진씽크빅, 외국인 대상 AI 한국어 교육 서비스 '씽크빅 토픽' 출시", 'link': 'https://www.etnews.com/20250103000220'}, {'title': '[인사] 우정사업본부', 'link': 'https://www.etnews.com/20250103000219'}, {'title': '[인사] 과학기술정보통신부', 'link': 'https://www.etnews.com/20250103000217'}, {'title': '에이플러스-수원대 창업보육센터, 디스플레이 창업 지원 업무협약 체결', 'link': 'https://www.etnews.com/20250103000215'}, {'title': '“경제 불확실 속 인내로 새로운 미래 준비”…2025 중소기업인 신년인사회 개최', 'link': 'https://www.etnews.com/20250103000213'}, {'title': '제주항공 여객기 참사, 항공사 특별안전점검 연장…비행기록장치 6일 美 이송', 'link': 'https://www.etnews.com/20250103000212'}, {'title': '최상목, 美대사·사령관 접견..“외교안보 기조 흔들림 없이 추진”', 'link': 'https://www.etnews.com/20250103000211'}, {'title': '김태규 직무대행 “방송·통신·미디어 시장 혁신 촉진해야”', 'link': 'https://www.etnews.com/20250103000209'}, {'title': '中 BYD, 지난해 400만대 돌파…테슬라 턱밑 추격', 'link': 'https://www.etnews.com/20250103000208'}, {'title': '박찬대 “尹 찌질함 다시 확인”…민주당, 경호처 책임자 고발', 'link': 'https://www.etnews.com/20250103000206'}, {'title': '허태수 GS 회장 “친환경·DX 전환 속도 내자”', 'link': 'https://www.etnews.com/20250103000205'}, {'title': '서울시 공무원, 1월 한달간 불필요한 규제 찾는다', 'link': 'https://www.etnews.com/20250103000204'}, {'title': '서울 시니어일자리센터 개관…온라인 구인구직 플랫폼도 운영', 'link': 'https://www.etnews.com/20250103000203'}, {'title': '3월부터 한강에서 비둘기 먹이 주면 과태료 최대 100만원…서울시, 제·개정 조례 공포', 'link': 'https://www.etnews.com/20250103000202'}, {'title': '노보센스·콘티넨탈, 차량용 안전 센서 개발 협력', 'link': 'https://www.etnews.com/20250103000201'}, {'title': "마음AI 배리어프리 키오스크 '마음터치', 벤처나라 등록", 'link': 'https://www.etnews.com/20250103000200'}, {'title': "루크러닝, 영어 원서 교육 프로그램 '리딩터치' 업데이트", 'link': 'https://www.etnews.com/20250103000199'}, {'title': '충남신보, 2025년 소상공자금 6000억 확대 지원…도내 지역 경제 활성화 주력', 'link': 'https://www.etnews.com/20250103000196'}, {'title': "사업자용 주류발주플랫폼 '마켓뱅'서비스 쓰리랩스, 중기부 팁스 선정", 'link': 'https://www.etnews.com/20250103000195'}, {'title': "오규식 LF 부회장 “올해 '브랜드 중심 경영'·'글로벌 확대' 집중할 것”", 'link': 'https://www.etnews.com/20250103000194'}, {'title': '이옷, AI 스타일 추천과 PB 브랜드 성장 통해 패션 혁신', 'link': 'https://www.etnews.com/20250103000192'}, {'title': '오케스트로, 김범재 신임 대표 선임', 'link': 'https://www.etnews.com/20250103000190'}, {'title': 'KB국민은행, 136억원 규모 금융사고 발생', 'link': 'https://www.etnews.com/20241231000172'}, {'title': "삼성전자, 레인보우로보틱스 최대주주로…'미래로봇추진단' 신설", 'link': 'https://www.etnews.com/20241231000009'}, {'title': 'LGD, 스마트폰 OLED에 더 힘준다', 'link': 'https://www.etnews.com/20241231000137'}, {'title': '尹 체포 “불가능 판단” 공수처, 경호처장 입건..경호처 “무단침입 책임 물을 것”', 'link': 'https://www.etnews.com/20250103000152'}, {'title': '공수처, 尹 체포영장 집행 시작', 'link': 'https://www.etnews.com/20250103000001'}, {'title': "삼성전자 야심작 '펠티어 냉장고' 글로벌 판매 돌입", 'link': 'https://www.etnews.com/20241231000120'}, {'title': "민주당, 권성동·나경원·윤상현 '내란선전 혐의' 고발… 유튜버 4명도 적시", 'link': 'https://www.etnews.com/20250102000306'}, {'title': "법원, '내란 혐의' 尹 체포영장 발부…현직 대통령 최초", 'link': 'https://www.etnews.com/20241231000028'}, {'title': '8인 체제된 헌재, 尹 탄핵심판 두번째 재판..尹측 추가 서면 제출 안 해', 'link': 'https://www.etnews.com/20250102000242'}, {'title': '[2025 달라지는 것] 결혼세액공제 도입·친환경차 개소세 감면 연장', 'link': 'https://www.etnews.com/20241231000110'}, {'title': '崔대행, 헌법재판관 3명 중 2명 임명…野추천 1명 보류', 'link': 'https://www.etnews.com/20241231000192'}, {'title': '[오늘의 운세] 2025년 01월 01일 띠별 운세', 'link': 'https://www.etnews.com/20250101000025'}, {'title': '“K테크·AI융합이 신산업 경쟁력 이끈다”', 'link': 'https://www.etnews.com/20241231000140'}, {'title': '제주항공, 환불 행렬 우려…예약금만 2600억원', 'link': 'https://www.etnews.com/20250101000067'}, {'title': '아이폰SE4, 이름 변화 예고… “아이폰 16E로 출시”', 'link': 'https://www.etnews.com/20250102000166'}, {'title': "'오징어 게임' 영희 다음 마스코트는 철수... 시즌3 티저 공개", 'link': 'https://www.etnews.com/20250102000301'}, {'title': '[CES 2025] SK하이닉스, HBM3E 16단 공개…“차세대 AI 메모리 청사진 제시”', 'link': 'https://www.etnews.com/20250103000103'}, {'title': "애플 첫 폴더블폰 '아이폰18 폴드', 2026년 하반기 출시?", 'link': 'https://www.etnews.com/20241231000077'}, {'title': '테슬라, 中 메가팩 배터리 공장 완공…1분기 대량 생산', 'link': 'https://www.etnews.com/20250101000019'}, {'title': "'엔비디아 AI 기판 공급사' 日 이비덴, 신공장 새해 가동", 'link': 'https://www.etnews.com/20241231000125'}, {'title': '[우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다', 'link': 'https://www.etnews.com/20250103000176'}, {'title': '헌재, 尹 탄핵 정식재판 14일부터 시작', 'link': 'https://www.etnews.com/20250103000223'}, {'title': '에이피텍, 고속 0.1㎜ 마이크로 볼 제트 부착장비 출시', 'link': 'https://www.etnews.com/20250103000024'}, {'title': '우원식, 마은혁 임명보류에 권한쟁의심판·가처분 청구', 'link': 'https://www.etnews.com/20250103000221'}, {'title': '제주항공 여객기 참사, 항공사 특별안전점검 연장…비행기록장치 6일 美 이송', 'link': 'https://www.etnews.com/20250103000212'}, {'title': '최상목, 美대사·사령관 접견..“외교안보 기조 흔들림 없이 추진”', 'link': 'https://www.etnews.com/20250103000211'}, {'title': '中 BYD, 지난해 400만대 돌파…테슬라 턱밑 추격', 'link': 'https://www.etnews.com/20250103000208'}, {'title': '박찬대 “尹 찌질함 다시 확인”…민주당, 경호처 책임자 고발', 'link': 'https://www.etnews.com/20250103000206'}, {'title': '3월부터 한강에서 비둘기 먹이 주면 과태료 최대 100만원…서울시, 제·개정 조례 공포', 'link': 'https://www.etnews.com/20250103000202'}, {'title': '권영세 “공수처 尹 체포영장 집행, 불공정·부당한 행위”', 'link': 'https://www.etnews.com/20250103000185'}, {'title': '“시리가 대화 엳듣고 개인정보 침해”… 애플, 1400억 합의금 낸다', 'link': 'https://www.etnews.com/20250103000151'}, {'title': '崔 대행, 8~14일 정부 업무보고…5개 분야로 나눠 진행', 'link': 'https://www.etnews.com/20250103000175'}, {'title': '최상목, 중소기업 만나 “과감·파격 지원 적극 강구”', 'link': 'https://www.etnews.com/20250103000166'}, {'title': '민간주도 재사용발사체 개발 본격화…체계모델 연구 착수', 'link': 'https://www.etnews.com/20250103000074'}, {'title': "국가안보실, 野의원 13명 고발..'평양무인기 침투 지시' 허위사실 유포", 'link': 'https://www.etnews.com/20250103000161'}, {'title': '尹 체포 “불가능 판단” 공수처, 경호처장 입건..경호처 “무단침입 책임 물을 것”', 'link': 'https://www.etnews.com/20250103000152'}, {'title': '온누리상품권 사업 이전 골든타임 지났다…1월 중 일부 기능 셧다운', 'link': 'https://www.etnews.com/20250103000147'}, {'title': '공수처-경호처 尹 체포영장 집행 두고 대치에… 野 “경호처장 처벌해야”', 'link': 'https://www.etnews.com/20250103000142'}, {'title': '[CES 2025] SK하이닉스, HBM3E 16단 공개…“차세대 AI 메모리 청사진 제시”', 'link': 'https://www.etnews.com/20250103000103'}, {'title': '박민수 차관 “겨울철 인플루엔자 유행, 65세 이상·어린이 예방접종 참여” 요청', 'link': 'https://www.etnews.com/20250103000101'}, {'title': '[CES 2025]LG전자, 스탠드형·이동성 강화한 프로젝터 2종 공개', 'link': 'https://www.etnews.com/20250103000068'}, {'title': "與, '여야정 국정협의체' 가동 위한 실무회동 제안", 'link': 'https://www.etnews.com/20250103000094'}, {'title': "'최대 130년형' 美 법원 선 권도형, 무죄 주장", 'link': 'https://www.etnews.com/20250103000089'}, {'title': '이재명 “항공참사특별법 제정 추진…추경도 신속하게 편성해야”', 'link': 'https://www.etnews.com/20250103000083'}, {'title': "'애플의 안간힘'…中 점유율 하락에 '새해 할인'", 'link': 'https://www.etnews.com/20250103000078'}, {'title': "기아 EV3, 르노·시트로엥 제치고 '핀란드 올해의 차' 선정", 'link': 'https://www.etnews.com/20250103000079'}, {'title': '崔 대행 “무안 유가족 긴급 생계비·긴급돌봄서비스 지원”', 'link': 'https://www.etnews.com/20250103000066'}, {'title': '로제, 한터 국가별 차트 美 10주 연속·日中 5주 연속 정상 기록', 'link': 'https://www.etnews.com/20250103000052'}, {'title': '尹 체포영장 집행, 실시간 타전하는 주요 외신', 'link': 'https://www.etnews.com/20250103000026'}, {'title': '美, 中 드론 규제 검토 …“국가 안보에 위험”', 'link': 'https://www.etnews.com/20250103000025'}]

# [단계2] list에 존재하는 모든 기사들의 링크를 하나씩 돌아다니며 본문 title/text 추출
# 아래 함수는 하나의 url을 입력받아, 그 링크를 타고 들어가, 그 안에 text 추출

def crwal_article(url,language = 'ko'):
  print('[Crawl Art]', url)                   # 현재 text를 추출할 기사의 url
  a = Article(url, language = language)       # Article()를 사용하여 url을 입력 (언어에 맞게 세팅을 해줘야 함.)
  a.download()                                # 해당하는 url기사 html을 다운로드
  a.parse()                                   # 해당하는 url기사 html을 분석
  return a.title, a.text                      # 해당하는 url기사 title, text 출력

for article in list_artcles:                  # 기존에 만든 list에서 하나하나의 기사를 방문
  _, text = crwal_article(article['link'])    # 기사의 링크를 함수에 넣어 본문 추출
  article['text'] = text                      # 추출한 본문을 text에 넣어 지정

print(list_artcles[0])
[Crawl Art] https://www.etnews.com/20250103000176
...
[Crawl Art] https://www.etnews.com/20250103000025
{'title': '[우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다', 'link': 'https://www.etnews.com/20250103000176', 'text': "탤런트리는 기업 고객의 문제 해결을 도와주는 인공지능(AI) 솔루션 기업이다.\n\n\n\n탤런트리는 안찬봉 대표를 주축으로 2022년 3월 기업과 파트타임 전문가를 연결해주는 서비스 '번지'를 시작했다. 번지는 서비스 잠재력을 인정 받아 설립 한 달여만에 카카오벤처스 등 3개 투자사로부터 시드 투자를 받았다.\n\n\n\n2023년부터 AI 솔루션 활용에 나섰고, 지난해 7월 기업 대상 AI 솔루션 및 데이터 플랫폼 '클리브'를 처음 선보였다.\n\n\n\n클리브는 전사적자원관리(ERP), 엑셀, PDF, 텍스트 등 기업 내부의 흩어진 데이터를 통합하고 활용하기 쉽도록 한다. 이를 고객사 맞춤형 데이터 플랫폼으로 만들고 대시보드, 데이터 어시스턴트, 알림 시스템 등으로 제공한다. 이때 기업·업무·부서마다 필요한 도구를 맞춤형으로 제공하고 빠른 의사결정을 돕는다.\n\n탤런트리의 궁극적 목표는 한국의 팔란티어테크놀로지다. 2003년 설립된 미국의 팔란티어는 방대한 데이터를 수집, 분석, 처리해 조직이 더 나은 결정을 내릴 수 있도록 돕는 소프트웨어 솔루션을 제공한다.\n\n\n\n유아의류·용품 전문기업 아가방컴퍼니는 클리브를 재고 관리와 판매 기획에 활용했다. 매장별 상품별 판매 데이터를 한 눈에 파악하고, 맞춤형 판매 전략을 세울 수 있게 했다. 이러한 성공 사례는 제품 기획을 넘어 영업 등 전사 프로젝트로 확대, 적용됐다.\n\n\n\n클리브는 베타 서비스 기간 동안 10여곳의 중견·대기업 등과 기술검증(PoC)를 비롯한 프로젝트를 진행하며 큰 호응을 얻었다. 지난해 성과의 2배가 넘는 수주 계약을 이미 달성했다.\n\n\n\n탤런트리는 새해 패션, 커머스, 금융과 헬스케어를 넘어 국방까지 클리브의 영역을 넓힐 계획이다.\n\n〈인터뷰〉 안찬봉 탤런트리 대표 “클리브로 기업 매출 상승, 비용 감소 돕는다”\n\n\n\n안찬봉 탤런트리 대표는 보스턴컨설팅그룹(BCG) 컨설턴트, 스타트업, 구글코리아 등을 거치며 최고경영자(CEO)의 시각에서 기업의 문제 해결을 정의하는 방법을 배웠다.\n\n\n\n이는 기업이 필요로 하는 전문 인재를 적재적소에 연결해주는 '번지', 데이터와 AI 자동화 도구를 활용해 고객사의 문제 해결을 지원하는 '클리브'로 이어졌다.\n\n\n\n안 대표는 번지 운영을 최적화하기 위해 데이터와 AI 솔루션의 가능성을 발견했다. 이는 사실상 '스핀오프'와 같은 클리브 서비스 개발로 이어졌다.\n\n\n\n안 대표는 “AI로 기존에는 10명이 해야 하는 일들도 단 2명만으로 할 수 있게 됐다”며 “작은 규모지만 두 개의 사업이 원할하게 돌아갈 수 있는 것은 우리가 직접 AI 도구를 개발하고 개선하고 있기 때문”이라고 설명했다.\n\n\n\n탤런트리는 기업 매출 확대, 비용 감소라는 실질적 목표에 집중한다.\n\n\n\n안 대표는 “기업이 가진 데이터만 잘 활용해도 파급력이 크다”며 “단순 AI 봇 도입이 아니라 고객사가 성과를 낼 수 있는 문제 해결에 집중할 것”이라고 밝혔다.\n\n\n\n김명희 기자 noprint@etnews.com"}

print(len(list_artcles))
110

# [단계3] 가져온 본문 text에서 명사(키워드, 빈도수)추출
def get_keywords(text, nKeywords = 10):         # 키워드 추출 함수 (빈도수고려 : TF), 디폴트 10개
  list_keywords = []                            # 함수시작하는 시점에 빈 리스트를 만들어 여기에 키워드를 담음
  spliter = Okt()                               # konlpy에 의해 문장을 형태소별로 나누는 기능
  nouns = spliter.nouns(text)                   # 입력받은 text를 nouns함수에 넣어 명사만 추출하는 기능
  count = Counter(nouns)                        # 추출된 명사들의 출현 빈도를 추출하는 기능

  for n, c in count.most_common(nKeywords):     # 가장출현빈도 높은 명사 부터 순차적으로 10번 연산
    item = {'keyword': n, 'count': c}           # 리스트 저장은 keyword, count로 한다
    list_keywords.append(item)                  # 위 포멧으로 리스트에 list_keywords에 저장

  return list_keywords

for article in list_artcles:                    # 기존에 만든 list에서 하나하나의 text를 방문
  keywords = get_keywords(article['text'])      # 기사의 test를 함수에 넣어 본문 추출
  article['keywords'] = keywords                # 추출한 본문을 keywords에 넣어 지정

print(list_artcles[0])
{'title': '[우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다', 'link': 'https://www.etnews.com/20250103000176', 'text': "탤런트리는 기업 고객의 문제 해결을 도와주는 인공지능(AI) 솔루션 기업이다.\n\n\n\n탤런트리는 안찬봉 대표를 주축으로 2022년 3월 기업과 파트타임 전문가를 연결해주는 서비스 '번지'를 시작했다. 번지는 서비스 잠재력을 인정 받아 설립 한 달여만에 카카오벤처스 등 3개 투자사로부터 시드 투자를 받았다.\n\n\n\n2023년부터 AI 솔루션 활용에 나섰고, 지난해 7월 기업 대상 AI 솔루션 및 데이터 플랫폼 '클리브'를 처음 선보였다.\n\n\n\n클리브는 전사적자원관리(ERP), 엑셀, PDF, 텍스트 등 기업 내부의 흩어진 데이터를 통합하고 활용하기 쉽도록 한다. 이를 고객사 맞춤형 데이터 플랫폼으로 만들고 대시보드, 데이터 어시스턴트, 알림 시스템 등으로 제공한다. 이때 기업·업무·부서마다 필요한 도구를 맞춤형으로 제공하고 빠른 의사결정을 돕는다.\n\n탤런트리의 궁극적 목표는 한국의 팔란티어테크놀로지다. 2003년 설립된 미국의 팔란티어는 방대한 데이터를 수집, 분석, 처리해 조직이 더 나은 결정을 내릴 수 있도록 돕는 소프트웨어 솔루션을 제공한다.\n\n\n\n유아의류·용품 전문기업 아가방컴퍼니는 클리브를 재고 관리와 판매 기획에 활용했다. 매장별 상품별 판매 데이터를 한 눈에 파악하고, 맞춤형 판매 전략을 세울 수 있게 했다. 이러한 성공 사례는 제품 기획을 넘어 영업 등 전사 프로젝트로 확대, 적용됐다.\n\n\n\n클리브는 베타 서비스 기간 동안 10여곳의 중견·대기업 등과 기술검증(PoC)를 비롯한 프로젝트를 진행하며 큰 호응을 얻었다. 지난해 성과의 2배가 넘는 수주 계약을 이미 달성했다.\n\n\n\n탤런트리는 새해 패션, 커머스, 금융과 헬스케어를 넘어 국방까지 클리브의 영역을 넓힐 계획이다.\n\n〈인터뷰〉 안찬봉 탤런트리 대표 “클리브로 기업 매출 상승, 비용 감소 돕는다”\n\n\n\n안찬봉 탤런트리 대표는 보스턴컨설팅그룹(BCG) 컨설턴트, 스타트업, 구글코리아 등을 거치며 최고경영자(CEO)의 시각에서 기업의 문제 해결을 정의하는 방법을 배웠다.\n\n\n\n이는 기업이 필요로 하는 전문 인재를 적재적소에 연결해주는 '번지', 데이터와 AI 자동화 도구를 활용해 고객사의 문제 해결을 지원하는 '클리브'로 이어졌다.\n\n\n\n안 대표는 번지 운영을 최적화하기 위해 데이터와 AI 솔루션의 가능성을 발견했다. 이는 사실상 '스핀오프'와 같은 클리브 서비스 개발로 이어졌다.\n\n\n\n안 대표는 “AI로 기존에는 10명이 해야 하는 일들도 단 2명만으로 할 수 있게 됐다”며 “작은 규모지만 두 개의 사업이 원할하게 돌아갈 수 있는 것은 우리가 직접 AI 도구를 개발하고 개선하고 있기 때문”이라고 설명했다.\n\n\n\n탤런트리는 기업 매출 확대, 비용 감소라는 실질적 목표에 집중한다.\n\n\n\n안 대표는 “기업이 가진 데이터만 잘 활용해도 파급력이 크다”며 “단순 AI 봇 도입이 아니라 고객사가 성과를 낼 수 있는 문제 해결에 집중할 것”이라고 밝혔다.\n\n\n\n김명희 기자 noprint@etnews.com", 'keywords': [{'keyword': '기업', 'count': 12}, {'keyword': '데이터', 'count': 9}, {'keyword': '탤런트', 'count': 7}, {'keyword': '리', 'count': 7}, {'keyword': '리브', 'count': 7}, {'keyword': '대표', 'count': 6}, {'keyword': '등', 'count': 6}, {'keyword': '솔루션', 'count': 5}, {'keyword': '활용', 'count': 5}, {'keyword': '수', 'count': 5}]}

# [단계4] 검색어를 입력받아 그 검색어를 가지고 있는 문서를 출력

query = input()  # 쿼리를 입력 받음

# 아래의 함수는 쿼리를 입력받은 후에, 정해진 문서의 keywords의 리스트에서
# 쿼리가 그 keyword 중의 하나로 존재하는지 검색

def search_articles(query, list_keywords): # 쿼리가 키워드 리스트에 있으면 빈도수 출력(없으면 0 출력)
  nWords = 0                     # 아래의 if문에 걸리지 않으면(즉, 쿼리가 키워드에 없으면) 0을 출력하기 위한 초기값
  for kw in list_keywords:       # 키워드 리스트를 하나씩 kw로 검색
    if query == kw['keyword']:   # 만약 쿼리와 동인 키워드가 있는 비교
      nWords = kw['count']       # 키워드가 동일하면 키워드에 해당하는 count가 nWords가 됨
  return nWords                  # 결과적으로 쿼리의 출현회수가 출력됨

for article in list_artcles:                    # 기존에 만든 list에서 하나하나의 text를 방문
  nQuery = search_articles(query, article['keywords'])      # 기사의 test를 함수에 넣어 본문 추출
  if nQuery !=0:
    print('[TF]', nQuery, '[Title]', article['title'])
    print('[URL]', article['link'])
탤런트
[TF] 7 [Title] [우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다
[URL] https://www.etnews.com/20250103000176
[TF] 7 [Title] [우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다
[URL] https://www.etnews.com/20250103000176
[TF] 7 [Title] [우리가 AX 주역]〈47〉탤런트리, 한국의 팔란티어 꿈꾼다
[URL] https://www.etnews.com/20250103000176