You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
✨ [Feature] DB 통합 뉴스 토픽 분석 배치 시스템 (Gemini Worker 구현)
📜 PR 요약
취업 준비생 대상의 '기업 인사이트 AI 리포트' 서비스의 핵심 백엔드 기능인 뉴스 토픽 분류 시스템을 구현합니다.
이 스크립트는 파일 기반이 아닌, Cloud SQL 데이터베이스에 직접 연결하여 미처리된 기사를 가져와 분석하고, 그 결과를 article_topics 테이블에 저장하는 완전한 DB-to-DB 배치 처리 워커로 작동합니다.
📌 주요 기능 및 변경 사항
DB 통합 배치 처리
news_articles 테이블에서 아직 분석되지 않은 기사만 조회하여 가져옵니다.
분석 후, 결과를 article_topics 테이블에 최종 보고서 형태로 INSERT 합니다.
고도화된 중복 제거 로직 (데이터 품질 확보)
threshold=0.8 (80% 유사도)를 기준으로 기사 본문(content)의 의미를 비교하여 **'사실상 동일한 사건'**을 찾아냅니다.
각 중복 그룹에서 대표 기사 1개만을 분석 대상으로 남기고, 나머지는 제외하여 API 호출 비용을 절감하고 리포트의 중복을 해소합니다.
AI 기반의 요약 및 분류 (취준생 맞춤형)
Gemini 2.5 Flash 모델을 사용합니다.
토픽 분류: 사전에 정의된 20개 이상의 '직무/산업 토픽 목록' (예: 신사업/M&A, 인재채용/인재상) 중에서 가장 적합한 하나를 선택합니다.
개별 요약: "이 뉴스가 지원자에게 어떤 의미가 있는지"에 초점을 맞춘 맞춤형 요약문을 생성합니다. (면접/자소서 활용 목적)
효율성: 요약(Summary)과 분류(Topic)를 단 한 번의 Gemini API 호출로 동시에 처리하여 속도와 비용을 최적화했습니다.
안정적인 시스템 설계
DB 연결:.env 파일의 DATABASE_URL을 사용해 안전하게 연결합니다.
속도:ThreadPoolExecutor를 사용하여 멀티스레딩으로 API 호출을 병렬 처리하여 분석 속도를 높였습니다.
오류 방지: 정규식을 활용한 강력한 응답 파싱 로직을 적용하여, LLM의 응답 형식이 조금 깨져도 '분류 실패'를 최소화했습니다.
⚙️ 실행 및 의존성
실행 명령어 | poetry run python analysis_Gemini.py
데이터 읽기 | news_articles (미처리된 모든 기사)
데이터 쓰기 | article_topics (분석 완료된 최종 리포트)
필수 환경변수 | DATABASE_URL, GOOGLE_API_KEY (모두 .env 파일 관리)
🚨 중요 체크리스트 (리뷰 전 확인)
article_topics 테이블에 id, 기업명, summary, topic, cluster_id 등 필요한 모든 컬럼이 생성되어 있어야 합니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 BERTopic과 KeyBERT를 이용한 뉴스 토픽 및 키워드 분석 스크립트
📜 요약
news.csv 파일을 읽어 AI 모델을 통해 자동으로 토픽 모델링과 키워드 추출을 수행하는 Python 스크립트(analysis.py)를 추가합니다.
이 PR은 프로젝트의 초기 기능 구현으로, 대량의 뉴스 데이터를 자동으로 분류하고 요약하는 기반을 마련합니다.
✨ 주요 변경 내용
💭데이터 전처리
pandas를 사용하여 news.csv 파일을 로드합니다. (utf-8-sig 인코딩 적용)
CSV 열 이름의 불필요한 공백을 제거하고, '제목'과 '본문' 열을 각각 title, content로 표준화합니다.
제목을 기준으로 중복된 뉴스 기사를 제거하여 분석 데이터의 품질을 높입니다.
💭토픽 모델링 (BERTopic)
한국어에 특화된 jhgan/ko-sbert-nli 임베딩 모델을 사용하여 문장의 의미를 벡터로 변환합니다.
BERTopic을 통해 전체 뉴스 기사를 내용의 유사도에 따라 자동으로 그룹화하고, 각 기사에 **토픽 번호(topic_num)**를 할당합니다.
💭키워드 추출 (KeyBERT)
kiwipiepy 형태소 분석기로 각 기사의 본문에서 핵심 명사를 먼저 추출합니다.
KeyBERT 모델을 이용해 추출된 명사들 중 기사의 주제와 가장 관련성이 높은 키워드 5개를 추출하여 keywords 열에 추가합니다.
💭결과 저장 및 요약
원본 데이터에 topic_num과 keywords 열이 추가된 최종 결과를 news_analysis_results.csv 파일로 저장합니다.
스크립트 실행이 완료되면, 터미널에 분석된 주요 토픽 리스트와 대표 키워드를 요약하여 출력합니다.
✅ 실행 방법
스크립트(analysis.py)와 동일한 위치에 news.csv 파일을 준비합니다.
터미널에서 poetry run python analysis.py 명령어를 실행합니다.
실행이 완료되면 생성된 news_analysis_results.csv 파일과 터미널의 토픽 요약 결과를 확인합니다.