Spaces:
Running
Running
File size: 6,465 Bytes
b0503ee 84669bc b7577da 7feda08 51568dc 7fc55d1 6d0ac04 e00f367 7fc55d1 51568dc 6ba2176 e00f367 6ba2176 c163eb2 6ba2176 7feda08 f036c05 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 e00f367 15f7e94 cb8dab7 15f7e94 cb8dab7 e00f367 cb8dab7 e00f367 9e251df 15f7e94 e5063d8 cb8dab7 e5063d8 15f7e94 e5063d8 15f7e94 e5063d8 15f7e94 e5063d8 15f7e94 e5063d8 cb8dab7 e5063d8 15f7e94 d35a2d1 e5063d8 15f7e94 e5063d8 e6cd790 e5063d8 463d2eb d2a1a53 e5063d8 e00f367 15f7e94 e00f367 463d2eb e00f367 e5063d8 a4c0f0e c163eb2 51568dc d35a2d1 51568dc d35a2d1 51568dc d35a2d1 73bd89d 51568dc aed9390 a4c0f0e f036c05 |
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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
import os
import gradio as gr
from transformers import pipeline
import spacy
import subprocess
import nltk
from nltk.corpus import wordnet
# Initialize the English text classification pipeline for AI detection
pipeline_en = pipeline(task="text-classification", model="Hello-SimpleAI/chatgpt-detector-roberta")
# Function to predict the label and score for English text (AI Detection)
def predict_en(text):
res = pipeline_en(text)[0]
return res['label'], res['score']
# Ensure necessary NLTK data is downloaded for Humanifier
nltk.download('wordnet')
nltk.download('omw-1.4')
# Ensure the SpaCy model is installed for Humanifier
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")
# Function to get synonyms using NLTK WordNet (Humanifier)
def get_synonyms_nltk(word, pos):
synsets = wordnet.synsets(word, pos=pos)
if synsets:
lemmas = synsets[0].lemmas()
return [lemma.name() for lemma in lemmas]
return []
# Function to capitalize the first letter of sentences and proper nouns (Humanifier)
def capitalize_sentences_and_nouns(text):
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)
# Improved Function to correct tense errors in a sentence (Tense Correction)
def correct_tense_errors(text):
doc = nlp(text)
corrected_text = []
for token in doc:
if token.pos_ == "VERB":
lemma = wordnet.morphy(token.text, wordnet.VERB) or token.text
if token.tag_ in {"VB", "VBP"}: # Present tense verb correction
corrected_text.append(lemma)
elif token.tag_ in {"VBD", "VBN"}: # Past tense correction
corrected_text.append(lemma + "ed")
else:
corrected_text.append(token.text)
else:
corrected_text.append(token.text)
return ' '.join(corrected_text)
# Improved Function to correct singular/plural errors (Singular/Plural Correction)
def correct_singular_plural_errors(text):
doc = nlp(text)
corrected_text = []
for token in doc:
if token.pos_ == "NOUN":
if token.tag_ == "NN" and token.head.pos_ == "VERB" and token.head.tag_ == "VBZ": # Singular noun with singular verb
corrected_text.append(token.text + 's') # Make plural
elif token.tag_ == "NNS" and token.head.pos_ == "VERB" and token.head.tag_ == "VBP": # Plural noun with plural verb
corrected_text.append(token.lemma_) # Correct to singular
else:
corrected_text.append(token.text)
else:
corrected_text.append(token.text)
return ' '.join(corrected_text)
# Improved Function to check and correct article errors
def correct_article_errors(text):
doc = nlp(text)
corrected_text = []
vowels = "aeiou"
for i, token in enumerate(doc):
if token.text.lower() in ['a', 'an']:
next_token = token.nbor(1)
next_word_lemma = next_token.lemma_ if next_token.lemma_ else next_token.text
if token.text == "a" and next_word_lemma[0].lower() in vowels:
corrected_text.append("an")
elif token.text == "an" and next_word_lemma[0].lower() not in vowels:
corrected_text.append("a")
else:
corrected_text.append(token.text)
else:
corrected_text.append(token.text)
return ' '.join(corrected_text)
# Enhanced Paraphrasing function using SpaCy and NLTK (Humanifier)
def paraphrase_with_spacy_nltk(text):
doc = nlp(text)
paraphrased_words = []
for token in doc:
pos = None
if token.pos_ in {"NOUN"}:
pos = wordnet.NOUN
elif token.pos_ in {"VERB"}:
pos = wordnet.VERB
elif token.pos_ in {"ADJ"}:
pos = wordnet.ADJ
elif token.pos_ in {"ADV"}:
pos = wordnet.ADV
synonyms = get_synonyms_nltk(token.text.lower(), pos) if pos else []
# Replace with a synonym only if it makes sense contextually
if synonyms and token.pos_ in {"NOUN", "VERB", "ADJ", "ADV"} and synonyms[0] != token.text.lower():
paraphrased_words.append(synonyms[0])
else:
paraphrased_words.append(token.text)
paraphrased_sentence = ' '.join(paraphrased_words)
return paraphrased_sentence
# Combined function: Paraphrase -> Grammar Correction -> Capitalization (Humanifier)
def paraphrase_and_correct(text):
# Step 1: Paraphrase the text
paraphrased_text = paraphrase_with_spacy_nltk(text)
# Step 2: Apply grammatical corrections on the paraphrased text
corrected_text = correct_article_errors(paraphrased_text)
corrected_text = capitalize_sentences_and_nouns(corrected_text)
corrected_text = correct_singular_plural_errors(corrected_text)
# Step 3: Capitalize sentences and proper nouns (final correction step)
final_text = correct_tense_errors(corrected_text)
return final_text
# Gradio app setup with two tabs
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='Prob')
# Connect the prediction function to the button
button1.click(predict_en, inputs=[t1], outputs=[label1, score1], api_name='predict_en')
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")
# Connect the paraphrasing function to the button
paraphrase_button.click(paraphrase_and_correct, inputs=text_input, outputs=output_text)
# Launch the app with the remaining functionalities
demo.launch()
|