sky4432 commited on
Commit
4c85533
·
verified ·
1 Parent(s): ef15b80

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -22
app.py CHANGED
@@ -1,53 +1,78 @@
1
  import streamlit as st
2
  from transformers import pipeline
3
 
4
- # Zero-Shot 분류 모델 (이슈주제 분류)
 
 
5
  topic_classifier = pipeline(
6
  "zero-shot-classification",
7
- model="joeddav/xlm-roberta-large-xnli" # 다국어 지원
8
  )
9
 
10
- # 감성분석 모델 (koelectra-nsmc)
 
 
11
  sentiment_analyzer = pipeline(
12
  "sentiment-analysis",
13
  model="monologg/koelectra-base-finetuned-nsmc"
14
  )
15
 
16
- # 정의할 주제 라벨 (예시)
17
- topic_labels = ["근무환경", "복리후생", "조직문화", "급여", "제도평가보상", "셍산라인", "인력충원", "기타"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
- st.title("이슈주제 + 감성분석 (복붙 버전)")
 
 
 
20
 
21
  st.write("""
22
- **아래 입력란에 5,000자 이하로 텍스트를 붙여넣은 뒤, '분석하기'를 눌러주세요.**
23
- - Zero-Shot 분류 → **근무환경 / 복리후생 / 조직문화 / 인원충원 / 기타**
24
- - 감성분석 **긍정(positive) / 부정(negative)**
 
 
25
  """)
26
 
27
- # 최대 5000 제한
28
- input_text = st.text_area("텍스트 입력", max_chars=5000, height=300)
29
 
30
  if st.button("분석하기"):
31
- if len(input_text.strip()) == 0:
32
- st.warning("분석할 텍스트를 입력해주세요!")
 
33
  else:
34
  # 1) Zero-Shot 분류
35
  topic_result = topic_classifier(
36
- input_text,
37
  topic_labels,
38
- truncation=True # 글자 수가 많을 때 오류 방지(512토큰 초과 시 잘라냄)
39
  )
 
40
  pred_topic = topic_result["labels"][0]
41
  topic_score = topic_result["scores"][0]
42
 
43
  # 2) 감성분석
44
- sent_result = sentiment_analyzer(input_text, truncation=True)
45
- sent_label = sent_result[0]["label"]
46
  sent_score = sent_result[0]["score"]
47
 
48
  st.subheader("분석 결과")
49
- st.write(f"- **주제**: {pred_topic} (score={topic_score:.4f})")
50
- st.write(f"- **감성**: {sent_label} (score={sent_score:.4f})")
51
-
52
- st.success("분석 완료!")
53
-
 
1
  import streamlit as st
2
  from transformers import pipeline
3
 
4
+ # -----------------------------
5
+ # 1) Zero-Shot 분류 모델 준비
6
+ # -----------------------------
7
  topic_classifier = pipeline(
8
  "zero-shot-classification",
9
+ model="joeddav/xlm-roberta-large-xnli" # 다국어 지원 모델
10
  )
11
 
12
+ # -----------------------------
13
+ # 2) 감성분석 모델 준비
14
+ # -----------------------------
15
  sentiment_analyzer = pipeline(
16
  "sentiment-analysis",
17
  model="monologg/koelectra-base-finetuned-nsmc"
18
  )
19
 
20
+ # -----------------------------
21
+ # 3) 세분화 라벨 정의
22
+ # -----------------------------
23
+ topic_labels = [
24
+ "근무환경-설비장비",
25
+ "근무환경-휴게소음",
26
+ "근무환경-안전",
27
+ "복리후생-수당보상",
28
+ "복리후생-교통셔틀",
29
+ "복리후생-기숙사숙소",
30
+ "조직문화-대인관계갈등",
31
+ "조직문화-언어매너",
32
+ "조직문화-사기스트레스",
33
+ "인원충원",
34
+ "근태관리",
35
+ "장비물자-작업복",
36
+ "장비물자-언더웨어",
37
+ "기타"
38
+ ]
39
 
40
+ # -----------------------------
41
+ # 4) 스트림릿 UI
42
+ # -----------------------------
43
+ st.title("익명게시판 이슈분석 (세분화 주제 + 감성)")
44
 
45
  st.write("""
46
+ **한 번에 하나씩** 아래 칸에 붙여넣고, "분석하기" 버튼을 누르세요.
47
+
48
+ - **Zero-Shot 분류**: 근무환경, 복리후생, 조직문화, 인원충원... 등 세분화
49
+ - **감성분석**: 긍정(positive) vs 부정(negative)
50
+ - 최대 약 5,000자까지 입력 가능합니다.
51
  """)
52
 
53
+ user_input = st.text_area("본문을 입력하세요 (복사/붙여넣기)", max_chars=5000, height=250)
 
54
 
55
  if st.button("분석하기"):
56
+ text = user_input.strip()
57
+ if not text:
58
+ st.warning("텍스트를 입력해주세요!")
59
  else:
60
  # 1) Zero-Shot 분류
61
  topic_result = topic_classifier(
62
+ text,
63
  topic_labels,
64
+ truncation=True # 512토큰 초과시 잘라내기
65
  )
66
+ # 가장 확률 높은 라벨
67
  pred_topic = topic_result["labels"][0]
68
  topic_score = topic_result["scores"][0]
69
 
70
  # 2) 감성분석
71
+ sent_result = sentiment_analyzer(text, truncation=True)
72
+ sent_label = sent_result[0]["label"] # positive/negative
73
  sent_score = sent_result[0]["score"]
74
 
75
  st.subheader("분석 결과")
76
+ st.write(f"**주제**: {pred_topic} (score={topic_score:.4f})")
77
+ st.write(f"**감성**: {sent_label} (score={sent_score:.4f})")
78
+ st.success("분석이 완료되었습니다!")