| 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("분석이 완료되었습니다!") |
|
|