sashtech's picture
Update app.py
c163eb2 verified
raw
history blame
2.18 kB
import os
import gradio as gr
import spacy
import nltk
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer
from collections import defaultdict
# Ensure necessary NLTK data is downloaded
nltk.download('wordnet')
nltk.download('averaged_perceptron_tagger')
nltk.download('punkt')
# Ensure the SpaCy model is installed for POS tagging
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 lemmatizer
lemmatizer = WordNetLemmatizer()
# Helper function to map nltk POS tags to wordnet POS tags
def get_wordnet_pos(treebank_tag):
if treebank_tag.startswith('J'):
return wordnet.ADJ
elif treebank_tag.startswith('V'):
return wordnet.VERB
elif treebank_tag.startswith('N'):
return wordnet.NOUN
elif treebank_tag.startswith('R'):
return wordnet.ADV
else:
return None
# Function to correct tense, singular/plural, and verb forms
def grammar_correction(text):
words = nltk.word_tokenize(text)
tagged = nltk.pos_tag(words)
corrected_text = []
for word, tag in tagged:
wordnet_pos = get_wordnet_pos(tag) or wordnet.NOUN
lemma = lemmatizer.lemmatize(word, pos=wordnet_pos)
# Apply basic rules for common errors
if tag.startswith('VB') and word.lower() != lemma: # Verb tense correction
corrected_text.append(lemma)
elif tag.startswith('NNS') and word.lower() == lemma: # Singular/plural correction
corrected_text.append(word + 's')
else:
corrected_text.append(word)
return ' '.join(corrected_text)
# Gradio app setup
with gr.Blocks() as demo:
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 grammar correction function to the button
grammar_button.click(grammar_correction, inputs=grammar_input, outputs=grammar_output)
# Launch the app
demo.launch()