Anis Taluqdar
updated
dfb9bb9
import gradio as gr
import nltk
import re
nltk.download('punkt')
nltk.download('wordnet')
from nltk.corpus import wordnet
nltk.download("averaged_perceptron_tagger")
nltk.download('wordnet')
def find_antonyms(word, tag):
if tag.startswith('JJ') or (tag.startswith('RB') and word not in ["not", "no"]) or (tag.startswith('VB') and word not in ["be", "have", "do", "will", "shall", "are", "is", "was", "were"]):
antonyms = []
for syn in wordnet.synsets(word):
for lemma in syn.lemmas():
if lemma.antonyms():
antonyms.append(lemma.antonyms()[0].name())
return antonyms
return []
def insert_not(sentence):
words = nltk.word_tokenize(sentence)
pos_tags = nltk.pos_tag(words)
aux_verbs = ["be", "have", "do", "will", "shall", "are", "is", "was", "were", "am", "does", "has", "had", "can", "could", "may", "might", "must", "should", "would"]
new_words = []
#skip_next = False
flag = False
for i, (word, tag) in enumerate (pos_tags):
new_words.append(word)
if word.lower() in aux_verbs:
if i + 1 < len(words) and words[i+1].lower() != 'not' and not flag:
new_words.append("not")
flag = True
return " ".join(new_words)
def modify_sentence(sentence):
words = nltk.word_tokenize(sentence)
pos_tagger = nltk.pos_tag(words)
new_sentence = insert_not(sentence)
if len(new_sentence) != len(sentence):
return new_sentence
else:
new_words = []
for word, tag in pos_tagger:
antonyms = find_antonyms(word, tag)
if antonyms:
new_word = antonyms[0]
else:
new_word = word
new_words.append(new_word)
new_sentence = " ".join(new_words)
# print(sentence)
# print(new_sentence)
if new_sentence == sentence:
new_sentence = insert_not(sentence)
return new_sentence
def remove_no_not(sentence):
words_to_remove = ['no', 'not', "n't"]
pattern = r'\b(' + '|'.join(words_to_remove) + r')\b'
cleaned_sentence = re.sub(pattern, '', sentence)
cleaned_sentence = re.sub(r'\s+', ' ', cleaned_sentence).strip()
# print(cleaned_sentence)
return cleaned_sentence
def transform_contractions(sentence):
contractions_mapping = {
"don't": "do",
"doesn't": "does",
"won't": "will",
"isn't": "is",
"aren't": "are",
"wasn't": "was",
"weren't": "were",
"haven't": "have",
"hasn't": "has",
"hadn't": "had",
"can't": "can",
"couldn't": "could",
"shouldn't": "should",
"mightn't": "might",
"mustn't": "must"
# Add any other contractions you need to handle
}
for contraction, replacement in contractions_mapping.items():
pattern = r'\b' + contraction + r'\b'
sentence = re.sub(pattern, replacement, sentence)
return sentence
def clean_text(text):
text = re.sub(r'[^\w\s]', '', text)
text = text.strip()
return text
def main_func(sentence):
# sentence = clean_text(sentence)
sentence = sentence.lower()
removed_dont = transform_contractions(sentence)
if len(removed_dont) != len(sentence):
return removed_dont
else:
removed_no_sentence = remove_no_not(sentence)
# print(removed_no_sentence)
if len(removed_no_sentence) != len(sentence):
return removed_no_sentence
else:
modified_sentence = modify_sentence(sentence)
return modified_sentence
demo = gr.Interface(title="POS/NEG Sentence APP", fn=main_func, inputs="text", outputs="text", css="footer {visibility: hidden}", examples=[
["I hate football"],
["Don't I like that food?"],
["I can't Swim"],
["Onion price is increasing"]])
if __name__ == "__main__":
demo.launch(show_api=False)