|
import streamlit as st |
|
from transformers import pipeline |
|
|
|
|
|
|
|
|
|
topic_classifier = pipeline( |
|
"zero-shot-classification", |
|
model="joeddav/xlm-roberta-large-xnli" |
|
) |
|
|
|
|
|
|
|
|
|
sentiment_analyzer = pipeline( |
|
"sentiment-analysis", |
|
model="monologg/koelectra-base-finetuned-nsmc" |
|
) |
|
|
|
|
|
|
|
|
|
topic_labels = [ |
|
"근무환경-설비장비", |
|
"근무환경-휴게소음", |
|
"근무환경-안전", |
|
"복리후생-수당보상", |
|
"복리후생-교통셔틀", |
|
"복리후생-기숙사숙소", |
|
"조직문화-대인관계갈등", |
|
"조직문화-언어매너", |
|
"조직문화-사기스트레스", |
|
"인원충원", |
|
"근태관리", |
|
"장비물자-작업복", |
|
"장비물자-언더웨어", |
|
"기타" |
|
] |
|
|
|
|
|
|
|
|
|
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: |
|
|
|
topic_result = topic_classifier( |
|
text, |
|
topic_labels, |
|
truncation=True |
|
) |
|
|
|
pred_topic = topic_result["labels"][0] |
|
topic_score = topic_result["scores"][0] |
|
|
|
|
|
sent_result = sentiment_analyzer(text, truncation=True) |
|
sent_label = sent_result[0]["label"] |
|
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("분석이 완료되었습니다!") |
|
|