|
|
|
|
|
|
|
import streamlit as st |
|
from transformers import AlbertTokenizer, AlbertForSequenceClassification |
|
import torch |
|
import trafilatura |
|
import nltk |
|
from nltk.tokenize import sent_tokenize |
|
|
|
|
|
nltk.download('punkt') |
|
|
|
|
|
tokenizer = AlbertTokenizer.from_pretrained("dejanseo/good-vibes") |
|
model = AlbertForSequenceClassification.from_pretrained("dejanseo/good-vibes") |
|
|
|
|
|
st.set_page_config(layout="wide") |
|
|
|
|
|
def classify_and_highlight(text, max_length=512): |
|
sentences = sent_tokenize(text) |
|
|
|
highlighted_text = "" |
|
for sentence in sentences: |
|
|
|
inputs = tokenizer(sentence, return_tensors="pt", truncation=True, padding=True) |
|
outputs = model(**inputs) |
|
softmax_scores = torch.softmax(outputs.logits, dim=-1) |
|
prediction = torch.argmax(softmax_scores, dim=-1).item() |
|
confidence = softmax_scores[0][prediction].item() * 100 |
|
|
|
if prediction == 0: |
|
|
|
opacity = ((confidence - 50) / 100) + 0.1 |
|
highlighted_text += f'<span style="background-color: rgba(0, 255, 0, {opacity});" title="{confidence:.2f}%">{sentence}</span> ' |
|
else: |
|
highlighted_text += f'{sentence} ' |
|
|
|
return highlighted_text.strip() |
|
|
|
|
|
def extract_content_from_url(url): |
|
downloaded = trafilatura.fetch_url(url) |
|
if downloaded: |
|
return trafilatura.extract(downloaded) |
|
else: |
|
return None |
|
|
|
|
|
st.title("Good Vibes Detector - SEO by DEJAN") |
|
st.write("This app detects good vibes on the internet.") |
|
|
|
mode = st.radio("Choose input mode", ("Paste text", "Enter URL")) |
|
|
|
if mode == "Paste text": |
|
user_text = st.text_area("Paste your text here:") |
|
if st.button("Classify"): |
|
if user_text: |
|
result = classify_and_highlight(user_text) |
|
st.markdown(result, unsafe_allow_html=True) |
|
st.markdown("---") |
|
st.write("This is a custom sentiment classification model developed by [Dejan Marketing](https://dejanmarketing.com/). If you'd like to do a large-scale sentiment analysis on your website or discuss your needs with our team, please [book an appointment here](https://dejanmarketing.com/conference/).") |
|
else: |
|
st.write("Please paste some text.") |
|
|
|
elif mode == "Enter URL": |
|
user_url = st.text_input("Enter the URL:") |
|
if st.button("Extract and Classify"): |
|
if user_url: |
|
content = extract_content_from_url(user_url) |
|
if content: |
|
result = classify_and_highlight(content) |
|
st.markdown(result, unsafe_allow_html=True) |
|
st.markdown("---") |
|
st.write("This is a custom sentiment classification model developed by [Dejan Marketing](https://dejanmarketing.com/). If you'd like to do a large-scale sentiment analysis on your website or discuss your needs with our team, please [book an appointment here](https://dejanmarketing.com/conference/).") |
|
else: |
|
st.write("Failed to extract content from the URL.") |
|
else: |
|
st.write("Please enter a URL.") |
|
|