Spaces:
Runtime error
Runtime error
import pyjokes | |
import gradio as gr | |
import numpy as np | |
from nltk.corpus import wordnet as wn | |
from sentence_transformers import SentenceTransformer | |
from sklearn.metrics.pairwise import cosine_similarity | |
import nltk | |
nltk.download('all') | |
import string | |
from sklearn.feature_extraction.text import TfidfVectorizer | |
import random | |
# import fastai | |
def similarity(input, joke): | |
return cosine_similarity(input, joke) | |
def get_best(input): | |
model = SentenceTransformer('bert-base-nli-mean-tokens') | |
max_similarity = -1 | |
max_idx = 0 | |
jokes = pyjokes.get_jokes(language='en', category='all') | |
jokes_embedding = model.encode(jokes) | |
input_embedding = model.encode(input) | |
for idx, joke_embedding in enumerate(jokes_embedding): | |
sim = similarity(joke_embedding.reshape(-1, 1), | |
input_embedding.reshape(-1, 1)) | |
if(np.sum(sim) > np.sum(max_similarity)): | |
max_idx = idx | |
max_similarity = sim | |
if(np.sum(max_similarity) != -1): | |
return jokes[max_idx]+'ππ€£' | |
else: | |
return None | |
def generate_list(input): | |
result = [] | |
n = len(input) | |
for Len in range(2, n + 1): | |
for i in range(n - Len + 1): | |
j = i + Len - 1 | |
tem = "" | |
for k in range(i, j + 1): | |
tem += input[k] | |
result.append(tem) | |
return result | |
def pattern(input): | |
response = input | |
for substr in generate_list(input): | |
try: | |
syn = wn.synsets(substr)[1].hypernyms()[0].hyponyms()[ | |
0].hyponyms()[0].lemmas()[0].name() | |
except: | |
continue | |
if(syn != None): | |
response = response.replace(substr, syn.upper()) | |
break | |
if(input == response): | |
return None | |
else: | |
return response+'??ππ€£' | |
lemmer = nltk.stem.WordNetLemmatizer() | |
def LemTokens(tokens): | |
return [lemmer.lemmatize(token) for token in tokens] | |
remove_punct_dict= dict((ord(punct), None) for punct in string.punctuation) | |
def LemNormalize(text): | |
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict))) | |
def NLTK(input): | |
f = open('corpus.txt', errors='strict') | |
data = f.read() | |
data = data.lower() | |
data = data + input.lower() | |
sent_tokens = nltk.sent_tokenize(data) | |
return bot(sent_tokens, input) | |
def bot(sent_tokens, input): | |
robo1_response = '' | |
TfidfVec = TfidfVectorizer(tokenizer = LemNormalize, stop_words='english') | |
tfidf = TfidfVec.fit_transform(sent_tokens) | |
vals = cosine_similarity(tfidf[-1], tfidf) | |
idx = random.randint(0, len(vals.argsort()[0])) | |
flat = vals.flatten() | |
flat.sort() | |
req_tfidf = flat[-1] | |
if (req_tfidf == 0): | |
robo1_response= robo1_response+"I could not answer this right now but you can contact the head of our dept (PUSPHA RAJ)." # add the dept recommendation engine and contact details | |
return robo1_response | |
else: | |
robo1_response = robo1_response+sent_tokens[idx] | |
return robo1_response | |
def generator(input=None): | |
response = [] | |
if input: | |
out1 = NLTK(input) | |
if(out1): | |
response.append(out1) | |
out2 = pattern(input) | |
if(out2): | |
response.append(out2) | |
out3 = get_best(input) | |
if(out3): | |
response.append(out3) | |
else: | |
out1 = NLTK("Hi, what's the matter") | |
if(out1): | |
response.append(out1) | |
out2 = pyjokes.get_joke(language='en', category='all') | |
if(out2): | |
response.append(out2) | |
return response # think of doing this | |
iface = gr.Interface(fn=generator, inputs="text", outputs="text") | |
iface.launch() | |