arminapr
update all
0535dd8
import gradio as gr
import torch
from transformers import BertTokenizerFast, BertForSequenceClassification
from bs4 import BeautifulSoup
import requests
device = torch.device('mps' if torch.backends.mps.is_available() else 'cpu')
model_save_path = "./saved_model2"
tokenizer_save_path = "./saved_tokenizer2"
model = BertForSequenceClassification.from_pretrained(model_save_path).to(device)
tokenizer = BertTokenizerFast.from_pretrained(tokenizer_save_path)
sentiment_mapping = {0: 'neutral', 1: 'negative', 2: 'positive'}
# function to predict the sentiment of the text
def predict_sentiment(text):
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512).to(device)
outputs = model(**inputs)
predictions = torch.argmax(outputs.logits, dim=-1).cpu().numpy()
return sentiment_mapping[predictions[0]]
# function to scrape headlines and predict their sentiment
def scrape_and_predict():
url = "https://finance.yahoo.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
headlines = []
h3_tags = soup.find_all('h3', class_='clamp yf-1044anq')
for h3 in h3_tags:
headline = h3.get_text(strip=True)
if headline:
sentiment = predict_sentiment(headline)
headlines.append({'headline': headline, 'sentiment': sentiment})
return headlines
def sentiment_interface(text):
return predict_sentiment(text)
def scrape_interface():
return scrape_and_predict()
# gradio app
with gr.Blocks() as demo:
gr.Markdown("# Sentiment Analysis and News Scraping")
with gr.Tab("Predict Sentiment"):
text_input = gr.Textbox(label="Input Text")
sentiment_output = gr.Textbox(label="Sentiment")
predict_button = gr.Button("Predict Sentiment")
predict_button.click(sentiment_interface, inputs=text_input, outputs=sentiment_output)
with gr.Tab("Scrape Yahoo Finance"):
scrape_button = gr.Button("Scrape and Predict Sentiment")
headlines_output = gr.JSON(label="Headlines and Sentiment")
scrape_button.click(scrape_interface, outputs=headlines_output)
if __name__ == "__main__":
demo.launch(share=True)