File size: 2,519 Bytes
81c64f3 4c85533 81c64f3 4c85533 81c64f3 4c85533 81c64f3 4c85533 81c64f3 4c85533 81c64f3 4c85533 81c64f3 4c85533 81c64f3 ef15b80 4c85533 81c64f3 ef15b80 4c85533 ef15b80 4c85533 ef15b80 4c85533 ef15b80 81c64f3 ef15b80 4c85533 ef15b80 81c64f3 ef15b80 4c85533 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
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("분석이 완료되었습니다!")
|