siddhantuniyal's picture
Update app.py
95c55d3 verified
raw
history blame contribute delete
No virus
2.54 kB
from transformers import pipeline
import gradio as gr
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk
import numpy as np
nltk.download('vader_lexicon')
from deep_translator import (GoogleTranslator)
from langdetect import detect
zero_shot_classifier = pipeline("zero-shot-classification" , model='roberta-large-mnli')
spam_detector = pipeline("text-classification", model="madhurjindal/autonlp-Gibberish-Detector-492513457")
issues = ["Misconduct" , "Negligence" , "Discrimination" , "Corruption" , "Violation of Rights" , "Inefficiency" ,
"Unprofessional Conduct", "Response Time" , "Use of Firearms" , "Property Damage"]
apprecn = ["Tech-Savvy Staff" , "Co-operative Staff" , "Well-Maintained Premises" , "Responsive Staff"]
def translate(input_text):
source_lang = detect(input_text)
translated = GoogleTranslator(source=source_lang, target='en').translate(text=input_text)
return translated
def spam_detection(input_text):
return spam_detector(input_text)[0]['label'] == 'clean'
def sentiment_analysis(input_text):
score = SentimentIntensityAnalyzer().polarity_scores(input_text)
del score['compound']
label = list(filter(lambda x: score[x] == max(score.values()), score))[0]
if label == 'neg':
return ["Negative Feedback" , score['neg']]
elif label == 'pos':
return ["Positive Feedback" , -1]
else:
return ["Neutral Feedback" , -1]
def positive_zero_shot(input_text):
return zero_shot_classifier(input_text , candidate_labels = apprecn , multi_label = False)['labels'][0]
def negative_zero_shot(input_text):
return zero_shot_classifier(input_text , candidate_labels = issues , multi_label = False)['labels'][0]
def pipeline(input_text):
input_text = translate(input_text)
if spam_detection(input_text):
if sentiment_analysis(input_text)[0] == "Positive Feedback":
return "Positive Feedback" , -1 , positive_zero_shot(input_text)
elif sentiment_analysis(input_text)[0] == "Negative Feedback":
return "Negative Feedback" , sentiment_analysis(input_text)[1] , negative_zero_shot(input_text)
else:
return "Neutral Feedback" , -1 , ""
else:
return "Spam" , ""
iface = gr.Interface(fn = pipeline , inputs=['text'] , outputs=['text' , 'text' , 'text'])
iface.launch(share=True)