richardorama's picture
Update app.py
09b31e8 verified
raw
history blame
4.62 kB
# Natural Language Tools
# Richard Orama - September 2024
#x = st.slider('Select a value')
#st.write(x, 'squared is', x * x)
import streamlit as st
from transformers import pipeline
import ast
st.title("Assorted Language Tools - Orama's")
################ CHAT BOT #################
# Load the GPT model
generator = pipeline("text-generation", model="EleutherAI/gpt-neo-2.7B")
# Streamlit chat UI
#st.title("GPT-3 Chatbox")
# user_input = st.text_input("You: ", "Hello, how are you?")
# if user_input:
# response = generator(user_input, max_length=100, num_return_sequences=1)[0]['generated_text']
# st.write(f"GPT-3: {response}")
# Define the summarization function
def chat(txt):
st.write('\n\n')
#st.write(txt[:100]) # Display the first 100 characters of the article
#st.write('--------------------------------------------------------------')
#summary = summarizer(txt, max_length=500, min_length=30, do_sample=False)
#st.write(summary[0]['summary_text'])
response = generator(txt, max_length=500, num_return_sequences=1)[0]['generated_text']
st.write(f"GPT-3: {response}")
DEFAULT_CHAT = ""
# Create a text area for user input
CHAT = st.sidebar.text_area('Enter Chat (String)', DEFAULT_CHAT, height=150)
# Enable the button only if there is text in the CHAT variable
if CHAT:
if st.sidebar.button('Chat Statement'):
# Call your Summarize function here
chat(CHAT) # Directly pass the your
else:
st.sidebar.button('Chat Statement', disabled=True)
st.warning('πŸ‘ˆ Please enter Chat!')
################ STATEMENT SUMMARIZATION #################
# Load the summarization model
#summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6") # smaller version of the model
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
# Define the summarization function
def summarize_statement(txt):
st.write('\n\n')
#st.write(txt[:100]) # Display the first 100 characters of the article
#st.write('--------------------------------------------------------------')
summary = summarizer(txt, max_length=500, min_length=30, do_sample=False)
st.write(summary[0]['summary_text'])
DEFAULT_STATEMENT = ""
# Create a text area for user input
STATEMENT = st.sidebar.text_area('Enter Statement (String)', DEFAULT_STATEMENT, height=150)
# Enable the button only if there is text in the SENTIMENT variable
if STATEMENT:
if st.sidebar.button('Summarize Statement'):
# Call your Summarize function here
summarize_statement(STATEMENT) # Directly pass the STATEMENT
else:
st.sidebar.button('Summarize Statement', disabled=True)
st.warning('πŸ‘ˆ Please enter Statement!')
################ SENTIMENT ANALYSIS #################
# Initialize the sentiment analysis pipeline
# No model was supplied, defaulted to distilbert-base-uncased-finetuned-sst-2-english
sentiment_pipeline = pipeline("sentiment-analysis")
def is_valid_list_string(string):
try:
result = ast.literal_eval(string)
return isinstance(result, list)
except (ValueError, SyntaxError):
return False
# Define the summarization function
def analyze_sentiment(txt):
st.write('\n\n')
#st.write(txt[:100]) # Display the first 100 characters of the article
#st.write('--------------------------------------------------------------')
# Display the results
if is_valid_list_string(txt):
txt_converted = ast.literal_eval(txt) #convert string to actual content, e.g. list
# Perform Hugging sentiment analysis on multiple texts
results = sentiment_pipeline(txt_converted)
for i, text in enumerate(txt_converted):
st.write(f"Text: {text}")
st.write(f"Sentiment: {results[i]['label']}, Score: {results[i]['score']:.2f}\n")
else:
# Perform Hugging sentiment analysis on multiple texts
results = sentiment_pipeline(txt)
st.write(f"Text: {txt}")
st.write(f"Sentiment: {results[0]['label']}, Score: {results[0]['score']:.2f}\n")
DEFAULT_SENTIMENT = ""
# Create a text area for user input
SENTIMENT = st.sidebar.text_area('Enter Sentiment (String or List of Strings)', DEFAULT_SENTIMENT, height=150)
# Enable the button only if there is text in the SENTIMENT variable
if SENTIMENT:
if st.sidebar.button('Analyze Sentiment'):
analyze_sentiment(SENTIMENT) # Directly pass the SENTIMENT
else:
st.sidebar.button('Analyze Sentiment', disabled=True)
st.warning('πŸ‘ˆ Please enter Sentiment!')