Update app.py
Browse files
app.py
CHANGED
@@ -1,13 +1,21 @@
|
|
|
|
1 |
import streamlit as st
|
|
|
2 |
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
|
3 |
from keybert import KeyBERT
|
4 |
|
5 |
-
#
|
6 |
@st.cache_resource
|
7 |
def load_sentiment_pipeline():
|
8 |
model_name = "mayf/amazon_reviews_bert_ft"
|
9 |
-
tokenizer = AutoTokenizer.from_pretrained(
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
return pipeline(
|
12 |
"sentiment-analysis",
|
13 |
model=model,
|
@@ -15,27 +23,28 @@ def load_sentiment_pipeline():
|
|
15 |
return_all_scores=True
|
16 |
)
|
17 |
|
18 |
-
#
|
19 |
@st.cache_resource
|
20 |
def load_keybert_model():
|
21 |
return KeyBERT(model="all-MiniLM-L6-v2")
|
22 |
|
23 |
-
|
24 |
-
|
|
|
|
|
25 |
|
26 |
-
|
27 |
-
st.
|
28 |
-
st.title("π Review Sentiment & Keyword Analyzer")
|
29 |
|
30 |
-
review = st.text_area("Enter your review:")
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
-
if st.button("Analyze Review"):
|
33 |
-
if not review:
|
34 |
-
st.warning("Please enter a review to analyze.")
|
35 |
-
else:
|
36 |
# Sentiment Analysis
|
37 |
scores = sentiment_pipeline(review)[0]
|
38 |
-
# Convert scores to displayable format
|
39 |
sentiment_results = {item['label']: round(item['score'], 4) for item in scores}
|
40 |
st.subheader("Sentiment Scores")
|
41 |
st.json(sentiment_results)
|
@@ -51,9 +60,12 @@ if st.button("Analyze Review"):
|
|
51 |
for kw, score in keywords:
|
52 |
st.write(f"- **{kw}** (Score: {score:.4f})")
|
53 |
|
54 |
-
#
|
55 |
avg_sentiment = sum(sentiment_results.values()) / len(sentiment_results)
|
56 |
st.subheader("Composite Score with Keywords")
|
57 |
st.write(f"Average Sentiment Score: {avg_sentiment:.4f}")
|
58 |
st.write("Keywords used for this score:")
|
59 |
-
st.write(', '.join([kw for kw, _ in keywords]))
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
import streamlit as st
|
3 |
+
from huggingface_hub import login
|
4 |
from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification
|
5 |
from keybert import KeyBERT
|
6 |
|
7 |
+
# βββ Cached resource: Sentiment Analysis Pipeline ββββββββββββββββββββββββββββ
|
8 |
@st.cache_resource
|
9 |
def load_sentiment_pipeline():
|
10 |
model_name = "mayf/amazon_reviews_bert_ft"
|
11 |
+
tokenizer = AutoTokenizer.from_pretrained(
|
12 |
+
model_name,
|
13 |
+
use_auth_token=True
|
14 |
+
)
|
15 |
+
model = AutoModelForSequenceClassification.from_pretrained(
|
16 |
+
model_name,
|
17 |
+
use_auth_token=True
|
18 |
+
)
|
19 |
return pipeline(
|
20 |
"sentiment-analysis",
|
21 |
model=model,
|
|
|
23 |
return_all_scores=True
|
24 |
)
|
25 |
|
26 |
+
# βββ Cached resource: KeyBERT Model βββββββββββββββββββββββββββββββββββββββββ
|
27 |
@st.cache_resource
|
28 |
def load_keybert_model():
|
29 |
return KeyBERT(model="all-MiniLM-L6-v2")
|
30 |
|
31 |
+
# βββ Main Application βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
32 |
+
def main():
|
33 |
+
sentiment_pipeline = load_sentiment_pipeline()
|
34 |
+
kw_model = load_keybert_model()
|
35 |
|
36 |
+
st.set_page_config(page_title="Review Analyzer", layout="wide")
|
37 |
+
st.title("π Review Sentiment & Keyword Analyzer")
|
|
|
38 |
|
39 |
+
review = st.text_area("Enter your review:")
|
40 |
+
|
41 |
+
if st.button("Analyze Review"):
|
42 |
+
if not review:
|
43 |
+
st.warning("Please enter a review to analyze.")
|
44 |
+
return
|
45 |
|
|
|
|
|
|
|
|
|
46 |
# Sentiment Analysis
|
47 |
scores = sentiment_pipeline(review)[0]
|
|
|
48 |
sentiment_results = {item['label']: round(item['score'], 4) for item in scores}
|
49 |
st.subheader("Sentiment Scores")
|
50 |
st.json(sentiment_results)
|
|
|
60 |
for kw, score in keywords:
|
61 |
st.write(f"- **{kw}** (Score: {score:.4f})")
|
62 |
|
63 |
+
# Composite Score
|
64 |
avg_sentiment = sum(sentiment_results.values()) / len(sentiment_results)
|
65 |
st.subheader("Composite Score with Keywords")
|
66 |
st.write(f"Average Sentiment Score: {avg_sentiment:.4f}")
|
67 |
st.write("Keywords used for this score:")
|
68 |
+
st.write(', '.join([kw for kw, _ in keywords]))
|
69 |
+
|
70 |
+
if __name__ == "__main__":
|
71 |
+
main()
|