mxiean commited on
Commit
8d5c0ef
·
verified ·
1 Parent(s): 23157fe

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -26
app.py CHANGED
@@ -2,6 +2,9 @@ import streamlit as st
2
  from transformers import pipeline
3
  import pandas as pd
4
  from datetime import datetime
 
 
 
5
 
6
  # Constants
7
  RATING_MAP = {
@@ -10,6 +13,13 @@ RATING_MAP = {
10
  2: "Positive (⭐⭐⭐)"
11
  }
12
 
 
 
 
 
 
 
 
13
  @st.cache_resource
14
  def load_models():
15
  # Load sentiment analysis model
@@ -17,48 +27,47 @@ def load_models():
17
  "text-classification",
18
  model="AndrewLi403/CustomModel_tripadvisor_finetuned"
19
  )
20
- # Load fake review detection model (automatically handles sigmoid)
21
- fake_detector = pipeline(
22
- "text-classification",
23
- model="filippoferrari/finetuning-fake-reviews-detector-model"
24
- )
25
- return sentiment_model, fake_detector
26
 
27
- def analyze_review(text, sentiment_model, fake_detector):
28
  # Sentiment analysis
29
  sentiment_result = sentiment_model(text)[0]
30
  rating = int(sentiment_result['label'].split('_')[-1])
31
 
32
- # Fake detection
33
- fake_result = fake_detector(text)[0]
34
- is_fake = fake_result['label'] == 'FAKE'
35
 
36
  return {
37
  'sentiment': RATING_MAP[rating],
38
  'sentiment_score': sentiment_result['score'],
39
- 'is_fake': is_fake,
40
- 'fake_score': fake_result['score']
 
41
  }
42
 
43
  def main():
44
  st.title("Hotel Review Analyzer")
45
- st.markdown("Analyze sentiment and detect fake reviews")
46
 
47
  # Load models
48
- sentiment_model, fake_detector = load_models()
49
 
50
  # Input
51
  review_text = st.text_area("Paste your hotel review here:", height=150)
52
 
53
  if st.button("Analyze"):
54
  if review_text:
55
- with st.spinner("Analyzing..."):
56
  # Get analysis results
57
- results = analyze_review(review_text, sentiment_model, fake_detector)
58
 
59
  # Display results
60
  st.subheader("Analysis Results")
61
 
 
62
  col1, col2 = st.columns(2)
63
  with col1:
64
  st.metric("Sentiment Rating",
@@ -66,18 +75,28 @@ def main():
66
  delta=f"{results['sentiment_score']:.2f}")
67
 
68
  with col2:
69
- st.metric("Authenticity",
70
- "SUSPICIOUS" if results['is_fake'] else "GENUINE",
71
- delta=f"{results['fake_score']:.2f}",
72
- delta_color="inverse" if results['is_fake'] else "normal")
73
 
74
- # Warning for fake reviews
75
- if results['is_fake']:
76
- st.warning("⚠️ This review shows characteristics of potentially fake content!")
 
 
 
 
 
 
 
 
 
 
 
 
77
  else:
78
  st.error("Please enter a review to analyze")
79
 
80
  if __name__ == "__main__":
81
- main()
82
-
83
-
 
2
  from transformers import pipeline
3
  import pandas as pd
4
  from datetime import datetime
5
+ from PIL import Image
6
+ import requests
7
+ from io import BytesIO
8
 
9
  # Constants
10
  RATING_MAP = {
 
13
  2: "Positive (⭐⭐⭐)"
14
  }
15
 
16
+ # Emoji mapping based on ratings
17
+ EMOJI_MAP = {
18
+ 0: "😠", # Angry face for negative
19
+ 1: "😐", # Neutral face
20
+ 2: "😊" # Happy face
21
+ }
22
+
23
  @st.cache_resource
24
  def load_models():
25
  # Load sentiment analysis model
 
27
  "text-classification",
28
  model="AndrewLi403/CustomModel_tripadvisor_finetuned"
29
  )
30
+ # Load text-to-emoji model
31
+ emoji_pipe = pipeline("text-classification", model="j-hartmann/emotion-english-roberta-large")
32
+ return sentiment_model, emoji_pipe
 
 
 
33
 
34
+ def analyze_review(text, sentiment_model, emoji_pipe):
35
  # Sentiment analysis
36
  sentiment_result = sentiment_model(text)[0]
37
  rating = int(sentiment_result['label'].split('_')[-1])
38
 
39
+ # Emoji analysis
40
+ emoji_result = emoji_pipe(text)[0]
41
+ dominant_emoji = emoji_result['label']
42
 
43
  return {
44
  'sentiment': RATING_MAP[rating],
45
  'sentiment_score': sentiment_result['score'],
46
+ 'rating': rating,
47
+ 'dominant_emoji': dominant_emoji,
48
+ 'emoji_confidence': emoji_result['score']
49
  }
50
 
51
  def main():
52
  st.title("Hotel Review Analyzer")
53
+ st.markdown("Analyze sentiment and detect emotional tone")
54
 
55
  # Load models
56
+ sentiment_model, emoji_pipe = load_models()
57
 
58
  # Input
59
  review_text = st.text_area("Paste your hotel review here:", height=150)
60
 
61
  if st.button("Analyze"):
62
  if review_text:
63
+ with st.spinner("Analyzing emotions..."):
64
  # Get analysis results
65
+ results = analyze_review(review_text, sentiment_model, emoji_pipe)
66
 
67
  # Display results
68
  st.subheader("Analysis Results")
69
 
70
+ # First row: Rating and Emoji
71
  col1, col2 = st.columns(2)
72
  with col1:
73
  st.metric("Sentiment Rating",
 
75
  delta=f"{results['sentiment_score']:.2f}")
76
 
77
  with col2:
78
+ # Display both system emoji and detected emoji
79
+ st.metric("Emotional Tone",
80
+ f"{EMOJI_MAP[results['rating']]} (System) / {results['dominant_emoji']} (Detected)",
81
+ delta=f"Confidence: {results['emoji_confidence']:.2f}")
82
 
83
+ # Visual emoji display
84
+ st.subheader("Emotional Response")
85
+ cols = st.columns(3)
86
+ with cols[1]:
87
+ st.header(EMOJI_MAP[results['rating']] * 5) # Repeat emoji for visual impact
88
+ st.caption("Based on your star rating")
89
+
90
+ # Emotion breakdown
91
+ with st.expander("Detailed Emotion Analysis"):
92
+ full_emoji_results = emoji_pipe(review_text, top_k=5)
93
+ for emotion in full_emoji_results:
94
+ st.progress(
95
+ int(emotion['score'] * 100),
96
+ text=f"{emotion['label']}: {emotion['score']:.2f}"
97
+ )
98
  else:
99
  st.error("Please enter a review to analyze")
100
 
101
  if __name__ == "__main__":
102
+ main()