vizdre commited on
Commit
79a95db
·
verified ·
1 Parent(s): 0600bd0

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +103 -0
  2. requirements.txt +0 -0
app.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import streamlit as st
3
+ from streamlit_lottie import st_lottie
4
+ import requests
5
+ from bs4 import BeautifulSoup
6
+ import torch
7
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
8
+ import smtplib
9
+ from email.mime.multipart import MIMEMultipart
10
+ from email.mime.text import MIMEText
11
+ animation_url1 = "https://lottie.host/dd7f2ccb-f1a4-46ab-9367-ac7a766c382f/1mpGXTnenM.json"
12
+
13
+
14
+ # Load Lottie animation data from URLs
15
+ def load_lottie_url(url):
16
+ r = requests.get(url)
17
+ if r.status_code != 200:
18
+ return None
19
+ return r.json()
20
+
21
+ st.header('Sentiment Analysis')
22
+
23
+ # Load RoBERTa model and tokenizer
24
+ roberta_model_name = "cardiffnlp/twitter-roberta-base-sentiment"
25
+ model = AutoModelForSequenceClassification.from_pretrained(roberta_model_name)
26
+ tokenizer = AutoTokenizer.from_pretrained(roberta_model_name)
27
+ labels = ['Negative', 'Neutral', 'Positive']
28
+
29
+ # Define function for sentiment analysis using RoBERTa
30
+ def analyze_sentiment(text):
31
+ encoded_text = tokenizer(text, return_tensors='pt', truncation=False, padding=True)
32
+ output = model(**encoded_text)
33
+ scores = torch.softmax(output.logits, dim=1).detach().numpy()[0]
34
+ sentiment_index = scores.argmax()
35
+ sentiment_label = labels[sentiment_index]
36
+ return sentiment_label, scores[sentiment_index]
37
+
38
+ # Define function to scrape reviews from an Amazon product page
39
+ def scrape_amazon_reviews(product_url):
40
+ response = requests.get(product_url)
41
+ soup = BeautifulSoup(response.content, 'html.parser')
42
+
43
+ review_elements = soup.find_all("div", class_="a-section review aok-relative")
44
+ reviews = []
45
+ for review_element in review_elements[:5]:
46
+
47
+ review_text = review_element.find("span", class_="review-text").text.strip()
48
+
49
+ reviews.append(review_text)
50
+
51
+ sentiment_label, sentiment_score = analyze_sentiment(review_text)
52
+ if sentiment_label == 'Negative':
53
+ send_email_alert(review_text) # Send email alert for negative review
54
+
55
+ return reviews
56
+
57
+ # Function to send email alert for negative review
58
+ def send_email_alert(review_text):
59
+
60
+ sender_email = "vaibhavdeori1@gmail.com"
61
+ receiver_email = "vaibhavdeori01@gmail.com"
62
+ password = "ejcp fpdq reek ewer"
63
+
64
+
65
+ message = MIMEMultipart()
66
+ message["From"] = sender_email
67
+ message["To"] = receiver_email
68
+ message["Subject"] = "Negative Review Alert"
69
+ body = f"The following review is negative:\n\n{review_text}"
70
+ message.attach(MIMEText(body, "plain"))
71
+
72
+ # Establish a connection with the SMTP server
73
+ with smtplib.SMTP("smtp.gmail.com", 587) as server:
74
+ server.starttls()
75
+ server.login(sender_email, password)
76
+ server.sendmail(sender_email, receiver_email, message.as_string())
77
+
78
+ # Analyze Text
79
+ with st.expander('Analyze Text'):
80
+ text = st.text_input('Text here: ')
81
+ if text:
82
+ sentiment_label, sentiment_score = analyze_sentiment(text)
83
+ st.write('Sentiment:', sentiment_label)
84
+ st.write('Confidence Score:', sentiment_score)
85
+
86
+
87
+ # Scrape Reviews from Amazon Product Page
88
+ with st.expander('URL of product'):
89
+ product_url = st.text_input('Enter the link to the Amazon product page:')
90
+ if product_url:
91
+ reviews = scrape_amazon_reviews(product_url)
92
+ if reviews:
93
+ st.write('Reviews scraped successfully:')
94
+ for review in reviews:
95
+ sentiment_label, sentiment_score = analyze_sentiment(review)
96
+ st.write('Review:', review)
97
+ st.write('Sentiment:', sentiment_label)
98
+ st.write('Confidence Score:', sentiment_score)
99
+ st.write('---')
100
+ else:
101
+ st.write('No reviews found.')
102
+
103
+ st_lottie(load_lottie_url(animation_url1), speed=1, height=200, key="lottie1")
requirements.txt ADDED
Binary file (7.7 kB). View file