AI-Rewriter / app.py
imseldrith's picture
Update app.py
17cb555
raw
history blame contribute delete
No virus
6.19 kB
import streamlit as st
from bs4 import BeautifulSoup
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet
import random
import nltk
nltk.download('punkt')
nltk.download('wordnet')
import streamlit as st
from bs4 import BeautifulSoup
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet
from transformers import pipeline
# Text analytics
from textblob import TextBlob
from textatistic import Textatistic
# Integration with other tools
from grammarbot import GrammarBotClient
# Error handling and logging
import logging
def paraphrase_text(text, synonyms_num=5, random_synonym=True):
# Tokenize the text
tokens = word_tokenize(text)
# Create a list to hold the paraphrased words
paraphrased_tokens = []
for token in tokens:
# Check if the token is a word
if token.isalpha():
# Get the synonyms of the word
synonyms = []
for syn in wordnet.synsets(token):
for lemma in syn.lemmas():
if lemma.name() != token:
synonyms.append(lemma.name())
# If there are synonyms available, choose a random one
if synonyms:
if random_synonym:
paraphrased_word = random.choice(synonyms)
else:
paraphrased_word = ", ".join(synonyms[:synonyms_num])
# If no synonyms are available, use the original word
else:
paraphrased_word = token
# If the token is not a word, use it as-is
else:
paraphrased_word = token
# Add the paraphrased word to the list
paraphrased_tokens.append(paraphrased_word)
# Join the paraphrased tokens back into a string
paraphrased_text = ' '.join(paraphrased_tokens)
return paraphrased_text
def paraphrase_html(html_text, synonyms_num, random_synonym):
# Parse the HTML using BeautifulSoup
soup = BeautifulSoup(html_text, 'html.parser')
# Find all the text nodes in the HTML
text_nodes = soup.find_all(text=True)
# Paraphrase the text nodes
for node in text_nodes:
node.replace_with(paraphrase_text(node.string, synonyms_num, random_synonym))
# Return the paraphrased HTML
paraphrased_html = str(soup)
return paraphrased_html
def analyze_text(text):
# Text analytics using textblob and textatistic
blob = TextBlob(text)
sentiment = blob.sentiment.polarity
subjectivity = blob.sentiment.subjectivity
text_stats = Textatistic(text)
readability_score = text_stats.flesch_score
return sentiment, subjectivity, readability_score
def grammar_check(text):
# Integration with grammarbot tool
client = GrammarBotClient()
response = client.check(text)
matches = response['matches']
if not matches:
return "No grammar errors found."
else:
message = "Grammar errors found:\n"
for match in matches:
message += f"{match['message']} at line {match['replacements'][0]['startLine']}\n"
return message
def paraphrase_with_model(text, model):
# Advanced paraphrasing using pre-trained models
paraphrase_pipeline = pipeline("text2text-generation", model=model, tokenizer=model, device=0 if st.config.experimental.get_query_params()['device'] == 'cpu' else -1)
paraphrased_text = paraphrase_pipeline(text, max_length=50, do_sample=True, temperature=0.9)[0]['generated_text']
return paraphrased_text
st.set_page_config(page_title="HTML Paraphraser and Analyzer", page_icon=":pencil2:")
st.sidebar.title("HTML Paraphraser and Analyzer")
st.title("HTML Paraphraser and Analyzer")
html_input = st.text_area("Enter HTML to paraphrase", height=250)
synonyms_num = st.slider("Number of synonyms per word", min_value=1, max_value=10, value=5, step=1)
random_synonym = st.checkbox("Use random synonym", value=True)
#Add a button to paraphrase the HTML
if st.button("Paraphrase HTML"):
try:
paraphrased_html = paraphrase_html(html_input, synonyms_num, random_synonym)
st.write(paraphrased_html, unsafe_allow_html=True)
except Exception as e:
logging.exception("Error occurred while paraphrasing HTML")
st.error("An error occurred while paraphrasing the HTML. Please try again.")
#Add a text area for the user to input the text to analyze
text_input = st.text_area("Enter text to analyze")
#Add a button to analyze the text
if st.button("Analyze Text"):
try:
sentiment, subjectivity, readability_score = analyze_text(text_input)
st.write(f"Sentiment: {sentiment:.2f}")
st.write(f"Subjectivity: {subjectivity:.2f}")
st.write(f"Readability Score: {readability_score:.2f}")
except Exception as e:
logging.exception("Error occurred while analyzing text")
st.error("An error occurred while analyzing the text. Please try again.")
#Add a button to check grammar using GrammarBot
if st.button("Check Grammar"):
try:
grammar_check_result = grammar_check(text_input)
st.write(grammar_check_result)
except Exception as e:
logging.exception("Error occurred while checking grammar")
st.error("An error occurred while checking grammar. Please try again.")
#Add a selectbox for choosing the pre-trained model for advanced paraphrasing
models = {
"GPT-2": "gpt2",
"GPT-Neo": "EleutherAI/gpt-neo-1.3B",
"T5": "t5-base",
"Pegasus": "google/pegasus-large",
}
model_name = st.selectbox("Choose a pre-trained model for advanced paraphrasing", options=list(models.keys()))
#Add a button to paraphrase the text using the selected model
if st.button("Advanced Paraphrasing"):
try:
model = models[model_name]
paraphrased_text = paraphrase_with_model(text_input, model)
st.write(paraphrased_text)
except Exception as e:
logging.exception("Error occurred while performing advanced paraphrasing")
st.error("An error occurred while performing advanced paraphrasing. Please try again.")
#Set up logging to capture any errors
logging.basicConfig(filename='error.log', level=logging.ERROR, format='%(asctime)s %(message)s')