Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import pipeline | |
from translate import Translator | |
import re | |
# Load models | |
def load_models(): | |
"""Loads the sentiment analysis and summarization models.""" | |
sentiment_analyzer = pipeline("text-classification", model="miltonc/distilbert-base-uncased_ft_5") | |
summarizer = pipeline("summarization", model="FelixChao/T5-Chinese-Summarization") | |
return sentiment_analyzer, summarizer | |
# Max length for models | |
SENTIMENT_MAX_LENGTH = 512 # Maximum input length for DistilBERT sentiment analysis | |
SUMMARIZER_MAX_LENGTH = 512 # Maximum input length for T5 summarization (approximate) | |
def sentiment_analysis(text, sentiment_analyzer): | |
"""Analyzes the sentiment of the input text.""" | |
try: | |
result = sentiment_analyzer(text)[0] | |
return result | |
except Exception as e: | |
print(f"sentiment_analysis error for '{text}': {e}. Returning 'sentiment_analysis Failed'") | |
return {"label": "sentiment_analysis Failed", "score": 0.0} | |
def summarize_news(text, summarizer): | |
"""Summarizes the input news text.""" | |
try: | |
summary = summarizer(text, max_length=30, min_length=10)[0]['summary_text'] | |
return summary | |
except Exception as e: | |
print(f"Summarization error for '{text}': {e}. Returning 'Summarization Failed'") | |
return "Summarization Failed" | |
def translate_text(text, target_language='en', source_language='zh-TW'): | |
"""Translates Chinese text to English.""" | |
translator = Translator(to_lang=target_language, from_lang=source_language) | |
try: | |
translation = translator.translate(text) | |
return translation | |
except Exception as e: | |
print(f"Translation error for '{text}': {e}. Returning 'Translation Failed'") | |
return "Translation Failed" | |
# Check if the input text is Chinese | |
def is_chinese(text): | |
"""Checks if the input text contains Chinese characters.""" | |
return bool(re.search(r'[\u4e00-\u9fff]', text)) | |
# Main Streamlit app | |
def main(): | |
"""Main Streamlit application.""" | |
st.title("AI-Powered Sentiment Analysis and Summarization") | |
sentiment_analyzer, summarizer = load_models() | |
text = st.text_area(f"Enter the Chinese text here (Max {max(SENTIMENT_MAX_LENGTH, SUMMARIZER_MAX_LENGTH)} characters).....", height=200) | |
if st.button("Analyze"): | |
if text: | |
if not is_chinese(text): | |
st.error("Error: Please enter Chinese text.") | |
return | |
if len(text) > SENTIMENT_MAX_LENGTH: | |
st.error(f"Error: Input text for sentiment analysis exceeds the maximum length of {SENTIMENT_MAX_LENGTH} characters. Please shorten your text.") | |
return | |
if len(text) > SUMMARIZER_MAX_LENGTH: | |
st.error(f"Error: Input text for summarization exceeds the maximum length of {SUMMARIZER_MAX_LENGTH} characters. Please shorten your text.") | |
return | |
with st.spinner("Analyzing sentiment..."): | |
text_en = translate_text(text, target_language='en', source_language='zh-TW') | |
sentiment_result = sentiment_analysis(text_en, sentiment_analyzer) | |
label_map = {"LABEL_0": 'negative', "LABEL_1": 'neutral', "LABEL_2": 'positive'} | |
try: | |
sentiment_label = label_map.get(sentiment_result['label'], 'Unknown') | |
sentiment_score = sentiment_result['score'] | |
st.write(f"### Sentiment: {sentiment_label}") | |
st.write(f"Score: {sentiment_score:.4f}") | |
except (KeyError, ValueError): | |
st.write("Error processing sentiment result.") | |
st.write(sentiment_result) | |
with st.spinner("Summarizing News..."): | |
story = summarize_news(text, summarizer) | |
st.write("### Summarized News:") | |
st.write(story) | |
if __name__ == "__main__": | |
main() |