|
|
|
import streamlit as st |
|
import requests |
|
from PyPDF2 import PdfReader |
|
import io |
|
|
|
API_URL = "http://localhost:5000/upload" |
|
|
|
|
|
def main(): |
|
st.title("Sentiment Analysis on Call Transcripts") |
|
|
|
uploaded_file = st.file_uploader("Upload your call transcript", type=["txt", "pdf"]) |
|
|
|
if uploaded_file: |
|
try: |
|
|
|
if uploaded_file.name.endswith(".txt"): |
|
transcript = uploaded_file.read().decode('utf-8') |
|
elif uploaded_file.name.endswith(".pdf"): |
|
reader = PdfReader(uploaded_file) |
|
transcript = "" |
|
for page in reader.pages: |
|
transcript += page.extract_text() |
|
|
|
|
|
st.text_area("Uploaded Transcript", transcript, height=300) |
|
|
|
|
|
if st.button("Analyze Sentiment"): |
|
with st.spinner("Analyzing sentiment..."): |
|
try: |
|
|
|
response = requests.post( |
|
API_URL, |
|
data={'transcript': transcript}, |
|
timeout=120 |
|
) |
|
|
|
if response.status_code == 200: |
|
sentiment = response.json().get('sentiment', []) |
|
st.success("Analysis complete!") |
|
|
|
|
|
st.subheader("Sentiment Results") |
|
for result in sentiment: |
|
score = result['score'] |
|
label = result['label'] |
|
|
|
|
|
st.write(f"{label}:") |
|
st.progress(score) |
|
st.write(f"Score: {score:.2f}") |
|
|
|
|
|
if label == 'Overall Sentiment': |
|
if score > 0.6: |
|
st.info("π This text is predominantly positive") |
|
elif score < 0.4: |
|
st.info("π This text is predominantly negative") |
|
else: |
|
st.info("π This text is relatively neutral") |
|
elif label == 'Confidence': |
|
if score > 0.8: |
|
st.info("β¨ High confidence in this analysis") |
|
elif score < 0.5: |
|
st.warning("β οΈ Take this analysis with a grain of salt") |
|
else: |
|
st.error(f"Error: {response.json().get('error', 'Unknown error')}") |
|
|
|
except requests.exceptions.ConnectionError: |
|
st.error("Could not connect to the server. Please make sure the Flask backend is running.") |
|
except requests.exceptions.Timeout: |
|
st.error("Request timed out. Please try again.") |
|
except Exception as e: |
|
st.error(f"An error occurred: {str(e)}") |
|
|
|
except Exception as e: |
|
st.error(f"Error processing file: {str(e)}") |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|