Spaces:
Running
Running
File size: 4,818 Bytes
b0503ee 1fb0b90 84669bc b7577da 7feda08 7fc55d1 6d0ac04 1fb0b90 7fc55d1 51568dc 6ba2176 1fb0b90 6ba2176 c163eb2 6ba2176 7feda08 1fb0b90 f036c05 1fb0b90 f036c05 15f7e94 e00f367 1fb0b90 e00f367 1fb0b90 e00f367 a456e86 e00f367 1fb0b90 e00f367 de007f1 a456e86 de007f1 a456e86 e00f367 a456e86 1fb0b90 a456e86 847e3e1 e5063d8 1fb0b90 2f3beab e5063d8 1fb0b90 c163eb2 51568dc 1fb0b90 d35a2d1 51568dc d35a2d1 51568dc a456e86 d35a2d1 1fb0b90 aed9390 1fb0b90 2f3beab |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import os
import subprocess
import gradio as gr
from transformers import pipeline
import spacy
import nltk
from nltk.corpus import wordnet
# Ensure necessary NLTK data is downloaded
nltk.download('wordnet')
nltk.download('omw-1.4')
# Ensure the SpaCy model is installed
try:
nlp = spacy.load("en_core_web_sm")
except OSError:
subprocess.run(["python", "-m", "spacy", "download", "en_core_web_sm"])
nlp = spacy.load("en_core_web_sm")
# Initialize the English text classification pipeline for AI detection
pipeline_en = pipeline(task="text-classification", model="Hello-SimpleAI/chatgpt-detector-roberta")
def predict_en(text):
""" Function to predict the label and score for English text (AI Detection) """
res = pipeline_en(text)[0]
return res['label'], res['score']
def get_synonyms_nltk(word, pos):
""" Function to get synonyms using NLTK WordNet """
synsets = wordnet.synsets(word, pos=pos)
if synsets:
lemmas = synsets[0].lemmas()
return [lemma.name() for lemma in lemmas]
return []
def capitalize_sentences_and_nouns(text):
""" Function to capitalize the first letter of sentences and proper nouns """
doc = nlp(text)
corrected_text = []
for sent in doc.sents:
sentence = []
for token in sent:
if token.i == sent.start: # First word of the sentence
sentence.append(token.text.capitalize())
elif token.pos_ == "PROPN": # Proper noun
sentence.append(token.text.capitalize())
else:
sentence.append(token.text)
corrected_text.append(' '.join(sentence))
return ' '.join(corrected_text)
def correct_tense_errors(text):
""" Function to correct tense errors in a sentence """
doc = nlp(text)
corrected_text = []
for token in doc:
if token.pos_ == "VERB" and token.dep_ in {"aux", "auxpass"}:
lemma = wordnet.morphy(token.text, wordnet.VERB) or token.text
corrected_text.append(lemma)
else:
corrected_text.append(token.text)
return ' '.join(corrected_text)
def correct_singular_plural_errors(text):
""" Function to correct singular/plural errors """
doc = nlp(text)
corrected_text = []
for token in doc:
if token.pos_ == "NOUN":
if token.tag_ == "NN": # Singular noun
if any(child.text.lower() in ['many', 'several', 'few'] for child in token.head.children):
corrected_text.append(token.lemma_ + 's')
else:
corrected_text.append(token.text)
elif token.tag_ == "NNS": # Plural noun
if any(child.text.lower() in ['a', 'one'] for child in token.head.children):
corrected_text.append(token.lemma_)
else:
corrected_text.append(token.text)
else:
corrected_text.append(token.text)
return ' '.join(corrected_text)
def correct_article_errors(text):
""" Function to check and correct article errors """
doc = nlp(text)
corrected_text = []
for token in doc:
if token.text in ['a', 'an']:
next_token = token.nbor(1)
if token.text == "a" and next_token.text[0].lower() in "aeiou":
corrected_text.append("an")
elif token.text == "an" and next_token.text[0].lower() not in "aeiou":
corrected_text.append("a")
else:
corrected_text.append(token.text)
else:
corrected_text.append(token.text)
return ' '.join(corrected_text)
def paraphrase_and_correct(text):
""" Function to paraphrase and correct grammar """
paraphrased_text = capitalize_sentences_and_nouns(text) # Capitalize first to ensure proper noun capitalization
# Apply grammatical corrections
paraphrased_text = correct_article_errors(paraphrased_text)
paraphrased_text = correct_singular_plural_errors(paraphrased_text)
paraphrased_text = correct_tense_errors(paraphrased_text)
return paraphrased_text
# Setup Gradio interface
with gr.Blocks() as demo:
with gr.Tab("AI Detection"):
t1 = gr.Textbox(lines=5, label='Text')
button1 = gr.Button("🤖 Predict!")
label1 = gr.Textbox(lines=1, label='Predicted Label')
score1 = gr.Textbox(lines=1, label='Score')
button1.click(predict_en, inputs=[t1], outputs=[label1, score1])
with gr.Tab("Humanifier"):
text_input = gr.Textbox(lines=5, label="Input Text")
paraphrase_button = gr.Button("Paraphrase & Correct")
output_text = gr.Textbox(label="Paraphrased Text")
paraphrase_button.click(paraphrase_and_correct, inputs=[text_input], outputs=[output_text])
# Launch the app
demo.launch()
|