import numpy as np import pickle import json from nltk.tokenize import word_tokenize from nltk.stem import WordNetLemmatizer import numpy as np import nltk import onnxruntime as rt from sklearn.metrics.pairwise import cosine_similarity nltk.download("punkt_tab") nltk.download("wordnet") def similar(a,b): return np.linalg.matmul(a,b)/(np.linalg.norm(a)*np.linalg.norm(b)) def pred_next(text,how_many): with open("tokenz_next_word.json") as file: tokenizer=json.load(file) file.close() text=text.lower() model=rt.InferenceSession("next_word.onnx",providers=["CPUExecutionProvider"]) for i in range(how_many): tokens=[tokenizer[token] for token in text.split() if token in tokenizer.keys()] length=len(tokens) if length<=14: paded=np.pad(tokens,(14-length,0)) else: paded=tokens[:14] index=np.argmax(model.run(['dense'],{"input":np.expand_dims(paded.astype(np.int32),axis=0)})) word=list(tokenizer)[index+1] text=text+" "+word return text def give_sentiment(text): model=rt.InferenceSession('sentiment_analysis.onnx',providers=['CPUExecutionProvider']) with open("sentiment_tokens.json") as file: tokenizer=json.load(file) file.close() tokens=word_tokenize(text) lemmatize=WordNetLemmatizer() lemma_tokens=[lemmatize.lemmatize(word) for word in tokens] vector=[tokenizer[word] for word in lemma_tokens if word in tokenizer.keys()] if len(vector)<=100: paded=np.pad(vector,(100-len(vector),0)) else: paded=np.array(vector[:100]) vector=np.expand_dims(paded,axis=0) try: pred=model.run(['dense_32'],{"input":vector}) except Exception as e: return 0 if pred[0][0][0]>0.5: return 1 else: return 0 def ChatWithMe(question): with open("chatbot_tokenizer.pkl","rb") as file: vectorize=pickle.load(file) file.close() sim=[] answers=np.load("answer_bank.npy") X=np.load("question_array.npy") text=vectorize.transform([question]) text=text.toarray() for ques in X: sim.append(cosine_similarity(ques.reshape(1,-1),text)) if max(sim)<0.1: return "I do not know about that" else: index=np.argmax(sim) return answers[index] def tell_vernelable(img): model=rt.InferenceSession("vernelable_detect.onnx",providers=['CPUExecutionProvider']) pred=model.run(['dense_2'],{"input":img}) if pred[0][0][0]>0.5: return 1 else: return 0