File size: 2,535 Bytes
be90814 |
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 |
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) |