import streamlit as st from transformers import pipeline # ----------------------------- # 1) Zero-Shot 분류 모델 준비 # ----------------------------- topic_classifier = pipeline( "zero-shot-classification", model="joeddav/xlm-roberta-large-xnli" # 다국어 지원 모델 ) # ----------------------------- # 2) 감성분석 모델 준비 # ----------------------------- sentiment_analyzer = pipeline( "sentiment-analysis", model="monologg/koelectra-base-finetuned-nsmc" ) # ----------------------------- # 3) 세분화 라벨 정의 # ----------------------------- topic_labels = [ "근무환경-설비장비", "근무환경-휴게소음", "근무환경-안전", "복리후생-수당보상", "복리후생-교통셔틀", "복리후생-기숙사숙소", "조직문화-대인관계갈등", "조직문화-언어매너", "조직문화-사기스트레스", "인원충원", "근태관리", "장비물자-작업복", "장비물자-언더웨어", "기타" ] # ----------------------------- # 4) 스트림릿 UI # ----------------------------- st.title("익명게시판 이슈분석 (세분화 주제 + 감성)") st.write(""" **한 번에 글 하나씩** 아래 칸에 붙여넣고, "분석하기" 버튼을 누르세요. - **Zero-Shot 분류**: 근무환경, 복리후생, 조직문화, 인원충원... 등 세분화 - **감성분석**: 긍정(positive) vs 부정(negative) - 최대 약 5,000자까지 입력 가능합니다. """) user_input = st.text_area("본문을 입력하세요 (복사/붙여넣기)", max_chars=5000, height=250) if st.button("분석하기"): text = user_input.strip() if not text: st.warning("텍스트를 입력해주세요!") else: # 1) Zero-Shot 분류 topic_result = topic_classifier( text, topic_labels, truncation=True # 512토큰 초과시 잘라내기 ) # 가장 확률 높은 라벨 pred_topic = topic_result["labels"][0] topic_score = topic_result["scores"][0] # 2) 감성분석 sent_result = sentiment_analyzer(text, truncation=True) sent_label = sent_result[0]["label"] # positive/negative sent_score = sent_result[0]["score"] st.subheader("분석 결과") st.write(f"**주제**: {pred_topic} (score={topic_score:.4f})") st.write(f"**감성**: {sent_label} (score={sent_score:.4f})") st.success("분석이 완료되었습니다!")