File size: 3,954 Bytes
a1c9b3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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")

# Grammar, Tense, and Singular/Plural Correction Functions

# Correct article errors (e.g., "a apple" -> "an apple")
def check_article_error(text):
    tokens = nltk.pos_tag(nltk.word_tokenize(text))
    corrected_tokens = []
    
    for i, token in enumerate(tokens):
        word, pos = token
        if word.lower() == 'a' and i < len(tokens) - 1 and tokens[i + 1][1] == 'NN':
            corrected_tokens.append('an' if tokens[i + 1][0][0] in 'aeiou' else 'a')
        else:
            corrected_tokens.append(word)
    
    return ' '.join(corrected_tokens)

# Correct tense errors (e.g., "She has go out" -> "She has gone out")
def check_tense_error(text):
    tokens = nltk.pos_tag(nltk.word_tokenize(text))
    corrected_tokens = []
    
    for word, pos in tokens:
        if word == "go" and pos == "VB":
            corrected_tokens.append("gone")
        elif word == "know" and pos == "VB":
            corrected_tokens.append("known")
        else:
            corrected_tokens.append(word)
    
    return ' '.join(corrected_tokens)

# Correct singular/plural errors (e.g., "There are many chocolate" -> "There are many chocolates")
def check_pluralization_error(text):
    tokens = nltk.pos_tag(nltk.word_tokenize(text))
    corrected_tokens = []
    
    for word, pos in tokens:
        if word == "chocolate" and pos == "NN":
            corrected_tokens.append("chocolates")
        elif word == "kids" and pos == "NNS":
            corrected_tokens.append("kid")
        else:
            corrected_tokens.append(word)
    
    return ' '.join(corrected_tokens)

# Combined function to correct grammar, tense, and singular/plural errors
def correct_grammar_tense_plural(text):
    text = check_article_error(text)
    text = check_tense_error(text)
    text = check_pluralization_error(text)
    return text

# Gradio app setup with three 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)
    
    with gr.Tab("Grammar Correction"):
        grammar_input = gr.Textbox(lines=5, label="Input Text")
        grammar_button = gr.Button("Correct Grammar")
        grammar_output = gr.Textbox(label="Corrected Text")

        # Connect the custom grammar, tense, and plural correction function to the button
        grammar_button.click(correct_grammar_tense_plural, inputs=grammar_input, outputs=grammar_output)

# Launch the app with all functionalities
demo.launch()