Spaces:
Runtime error
Runtime error
from model_functions import * | |
from preprocessor import * | |
import streamlit as st | |
import pandas as pd | |
from streamlit.hashing import _CodeHasher | |
# Create a hasher object | |
hasher = _CodeHasher() | |
def load_example_file(file): | |
with open(file, "rb") as f: | |
return f.read() | |
def main(): | |
# Load models | |
tokenizer_sentiment, model_sentiment = load_sentiment_analyzer() | |
tokenizer_summary, model_summary = load_summarizer() | |
pipe_ner = load_NER() | |
st.title("WhatsApp Analysis Tool") | |
st.markdown("This app summarizes Whatsapp chats and provides named entity recognition as well as sentiment analysis for the conversation") | |
st.markdown("**NOTE**: *This app can only receive chats downloaded from IOS as the downloaded chat format is different than from Android.*") | |
st.markdown("Download your whatsapp chat by going to Settings > Chats > Export Chat and there select the chat you want to summarize (download 'Without Media').") | |
st.markdown("**Example Files**: Download example zip files to test the app:") | |
example_files = { | |
"Example 1": "example1.zip", | |
"Example 2": "example2.zip", | |
"Example 3": "example3.zip" | |
} | |
for name, file in example_files.items(): | |
data = load_example_file(file) | |
st.download_button(label=name, data=data, file_name=file, mime="application/zip") | |
# File uploader | |
uploaded_file = st.file_uploader("Choose a file (.zip)", type=['zip']) | |
if uploaded_file is not None: | |
file_type = detect_file_type(uploaded_file.name) | |
if file_type == "zip": | |
# Process the file | |
data = preprocess_whatsapp_messages(uploaded_file, file_type) | |
if data.empty: | |
st.write("No messages found or the file could not be processed.") | |
else: | |
# Date selector | |
date_options = data['date'].dt.strftime('%Y-%m-%d').unique() | |
selected_date = st.selectbox("Select a date for analysis:", date_options) | |
if selected_date: | |
text_for_analysis = get_dated_input(data, selected_date) | |
with st.expander("Show/Hide Original Conversation"): | |
st.markdown(f"```\n{text_for_analysis}\n```", unsafe_allow_html=True) | |
process = st.button('Process') | |
if process: | |
# Perform analysis | |
sentiment = get_sentiment_analysis(text_for_analysis, tokenizer_sentiment, model_sentiment) | |
summary = generate_summary(text_for_analysis, tokenizer_summary, model_summary) | |
ner_results = get_NER(summary, pipe_ner) | |
# Display results | |
st.subheader("Sentiment Analysis") | |
st.write("Sentiment:", sentiment) | |
st.subheader("Summary") | |
st.write("Summary:", summary) | |
st.subheader("Named Entity Recognition") | |
ner_df = pd.DataFrame(ner_results, columns=["Word", "Entity Group"]) | |
st.write(ner_df) | |
else: | |
st.error("Unsupported file type. Please upload a .txt or .zip file.") | |
else: | |
st.info("Please upload a file to proceed.") | |
if __name__ == "__main__": | |
main() |