-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchatbot.py
More file actions
54 lines (48 loc) · 1.61 KB
/
chatbot.py
File metadata and controls
54 lines (48 loc) · 1.61 KB
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
import random
import json
import pickle
import nltk
import numpy as np
from tensorflow.python.keras.models import load_model
from nltk.stem import wordnet
lemmatizer=wordnet.WordNetLemmatizer()
intenciones=json.loads(open("intents.json").read())
palabras=pickle.load(open("palabras.pkl", "rb"))
clases=pickle.load(open("clases.pkl", "rb"))
modelo= load_model("chatbot_modelo.h5")
def limpiar_frase(frase):
palabras_frase= nltk.wordpunct_tokenize(frase)
palabras_frase=[lemmatizer.lemmatize(palabra) for palabra in palabras_frase]
return palabras_frase
def bag_of_words(frase):
palabras_frase=limpiar_frase(frase)
bag=[0]*len(palabras)
for p in palabras_frase:
for i, palabra in enumerate(palabras):
if palabra==p:
bag[i]=1
return np.array(bag)
def predcit_class(frase):
bow=bag_of_words(frase)
res=modelo.predict(np.array([bow]))[0]
ERROR_THRESHOLD= 0.25
resultado=[[i,r] for i, r in enumerate (res) if r> ERROR_THRESHOLD]
resultado.sort(key=lambda x: x[1], reverse=True)
return_lista=[]
for r in resultado:
return_lista.append({"intenciones": clases[r[0]], "probability": str(r[1])})
return return_lista
def chatear(lista_intenciones, intenciones_json):
tag= lista_intenciones[0]["intenciones"]
l_intenciones= intenciones_json["intenciones"]
for i in l_intenciones:
if i["tag"] == tag:
res=random.choice(i["respuestas"])
break
return res
print("Estas chateando! Di algo!")
while True:
message= input("")
inst= predcit_class(message)
res=chatear(inst, intenciones)
print (res)