# -*- coding: iso-8859-1 -*- import random import json import pickle import numpy as np import nltk from nltk.stem import WordNetLemmatizer from tensorflow.keras.models import load_model # Vorlage Code von NeuralNines YT Channel (https://www.youtube.com/watch?v=1lwddP0KUEg&t=1022s) class Osiris_Sprache: """Osiris Sprach Tools Enth�lt alle Funktionen zur Handhabung und Verarbeitung von Input Messages Returns: None """ lematizer: WordNetLemmatizer intents: json words: None classes: None model: None def __init__(self): self.lematizer = WordNetLemmatizer() self.intents = json.loads(open('intents.json').read()) self.words = pickle.load(open('words.pkl', 'rb')) self.classes = pickle.load(open('classes.pkl', 'rb')) self.model = load_model('osiris_sprachmodel.h5') def clean_up_sentence(self, sentence): sentence_words = nltk.word_tokenize(sentence) sentence_words = [self.lematizer.lemmatize( word) for word in sentence_words] return sentence_words def bag_of_words(self, sentence): sentence_words = self.clean_up_sentence(sentence) bag = [0] * len(self.words) for w in sentence_words: for i, word in enumerate(self.words): if word == w: bag[i] = 1 return np.array(bag) def predict_class(self, sentence): bagOfWords = self.bag_of_words(sentence) res = self.model.predict(np.array([bagOfWords]))[0] ERROR_THRESHOLD = 0.25 results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD] results.sort(key=lambda x: x[1], reverse=True) return_list = [] for r in results: return_list.append( {'intent': self.classes[r[0]], 'probability': str(r[1])}) return return_list def get_response(self, intent_list): tag = intent_list[0]['intent'] list_of_intents = self.intents['intents'] for intent in list_of_intents: if intent['tag'] == tag: result = random.choice(i['response']) break return result #print('Du kannst jetzt mit mir Reden!') # while True: # message = input("") # ints = predict_class(message) # res = get_response(ints, intents) # print(res)