-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit ed35df6
Showing
6 changed files
with
406 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
import io | ||
import json | ||
import random | ||
import string | ||
import sys | ||
from sklearn.feature_extraction.text import TfidfVectorizer | ||
from sklearn.metrics.pairwise import cosine_similarity | ||
import sqlite3 | ||
import warnings | ||
warnings.filterwarnings('ignore') | ||
from details import * | ||
from template import * | ||
import nltk | ||
from PyQt5.QtWidgets import QApplication,QMainWindow,QDialog,QMessageBox,QAction | ||
from PyQt5.QtGui import QFont, QIcon | ||
from PyQt5.QtCore import QTime, QDate | ||
from nltk.stem import WordNetLemmatizer | ||
class gui(QMainWindow): | ||
def __init__(self): | ||
super().__init__() | ||
self.setWindowTitle("Chatbot") | ||
self.setWindowIcon(QIcon(r'roboimg.png')) | ||
self.ui=Ui_MainWindow() | ||
self.ui.setupUi(self) | ||
self.operator=project() | ||
reply=self.operator.database() | ||
self.ui.plainTextEdit.setPlainText("Alis: Hello {}, My name is Alis. How can I help you".format(self.operator.name)) | ||
if reply==False: | ||
self.ui.plainTextEdit.appendPlainText("Alis: Sir if you want to save your details Go to File->Change Details") | ||
self.ui.pushButton.clicked.connect(self.maintain) | ||
font1=QFont() | ||
font1.setPointSize(12) | ||
action=QAction(self) | ||
action.setShortcut("Return") | ||
self.addAction(action) | ||
action.triggered.connect(self.maintain) | ||
self.ui.plainTextEdit.setFont(font1) | ||
self.ui.lineEdit.setFocus() | ||
self.ui.actionChange_details.triggered.connect(self.change) | ||
self.show() | ||
def maintain(self): | ||
user_response = self.ui.lineEdit.text() | ||
self.ui.plainTextEdit.appendPlainText("{}: ".format(self.operator.name)+user_response) | ||
user_response = user_response.lower() | ||
response=self.operator.greeting(user_response) | ||
if (user_response != 'exit'): | ||
self.ui.plainTextEdit.appendPlainText("Alis: "+response.replace("tg",self.operator.name)) | ||
else: | ||
self.flag = False | ||
self.ui.plainTextEdit.appendPlainText("Alis: Thanks for conversations,Bye...") | ||
self.destroy() | ||
self.ui.lineEdit.clear() | ||
def change(self): | ||
conn=sqlite3.connect("database.db") | ||
c=conn.cursor() | ||
a=data() | ||
c.execute("SELECT * from data") | ||
datas=c.fetchall()[0] | ||
a.ui.lineEdit.setText(datas[1]) | ||
date=datas[2].split("-") | ||
a.ui.dateEdit.setDate(QDate(int(date[-1]),int(date[-2]),int(date[-3]))) | ||
a.exec() | ||
try: | ||
c.execute("UPDATE data set name='{}' where id=1".format(a.name)) | ||
c.execute("UPDATE data set date='{}' where id=1".format(a.date)) | ||
conn.commit() | ||
self.operator.name=a.name | ||
except: | ||
pass | ||
c.close() | ||
class data(QDialog): | ||
def __init__(self): | ||
super().__init__() | ||
self.ui=Ui_Dialog() | ||
self.ui.setupUi(self) | ||
self.ui.pushButton.clicked.connect(self.enquiry) | ||
self.show() | ||
def enquiry(self): | ||
self.name=self.ui.lineEdit.text() | ||
self.date=self.ui.dateEdit.text() | ||
if self.name==" ": | ||
QMessageBox.warning(self,"Name Error","Please enter you name sir") | ||
else: | ||
QMessageBox.information(self,"Information saved","Thanks to share your information") | ||
Gui.ui.plainTextEdit.appendPlainText("Alis: Thank to share your details {}".format(self.name)) | ||
self.close() | ||
def close(self): | ||
if self.name=="": | ||
self.ui.lineEdit.setText("Sir") | ||
self.name="Sir" | ||
|
||
class project: | ||
def __init__(self): | ||
#nltk.download('popular') | ||
# nltk.download('punkt') | ||
# nltk.download('wordnet') | ||
# Reading in the corpus | ||
#self.TfidfVec1 = TfidfVectorizer(tokenizer=self.LemNormalize,stop_words='english') | ||
#with open('chatbot.txt', 'r', encoding='utf8', errors='ignore') as fin: | ||
#raw = fin.read().lower() | ||
#self.sent_tokens = nltk.sent_tokenize(raw) # converts to list of sentences | ||
#word_tokens = nltk.word_tokenize(raw) # converts to list of words | ||
self.remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation) | ||
self.lemmer = WordNetLemmatizer() | ||
self.dataimport() | ||
self.TfidfVec = TfidfVectorizer(tokenizer=self.LemNormalize) | ||
self.TfidfVec.fit_transform(self.patterns) | ||
def LemTokens(self,tokens): | ||
return [self.lemmer.lemmatize(token) for token in tokens] | ||
def LemNormalize(self,text): | ||
return self.LemTokens(nltk.word_tokenize(text.lower().translate(self.remove_punct_dict))) | ||
def dataimport(self): | ||
file = open(r"jss.json", "r", errors="ignore").read() | ||
data = json.loads(file) | ||
self.patterns = [] | ||
self.response = [] | ||
for i in data['intents']: | ||
self.patterns.extend(i['patterns']) | ||
self.response.extend(i['responses']) | ||
def database(self): | ||
conn=sqlite3.connect("database.db") | ||
c=conn.cursor() | ||
try: | ||
c.execute("SELECT * FROM data") | ||
self.name=c.fetchall()[0][1] | ||
c.close() | ||
return True | ||
except sqlite3.OperationalError: | ||
c.execute("CREATE TABLE data(id INTEGER PRIMARY KEY AUTOINCREMENT,name,date)") | ||
c.execute("INSERT INTO data (name,date) VALUES('Sir','01-01-2001')") | ||
self.name="Sir" | ||
conn.commit() | ||
c.close() | ||
return False | ||
def greeting(self,sentence): | ||
self.patterns.append(sentence) | ||
"""If user's input is a greeting, return a greeting response""" | ||
tfidf = self.TfidfVec.fit_transform(self.patterns) | ||
vals = cosine_similarity(tfidf[-1], tfidf) | ||
idx = vals.argsort()[0][-2] | ||
flat = vals.flatten() | ||
flat.sort() | ||
self.patterns.pop(-1) | ||
req_tfidf = flat[-2] | ||
if (req_tfidf == 0): | ||
robo_response = "I am sorry! I don't understand you" | ||
return robo_response | ||
else: | ||
robo_response = self.response[idx] | ||
return robo_response | ||
if __name__=="__main__": | ||
app=QApplication(sys.argv) | ||
app.setWindowIcon(QIcon(r'roboimg.png')) | ||
Gui=gui() | ||
Gui.show() | ||
app.exec() |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
# Form implementation generated from reading ui file 'details.ui' | ||
# | ||
# Created by: PyQt5 UI code generator 5.15.0 | ||
# | ||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is | ||
# run again. Do not edit this file unless you know what you are doing. | ||
|
||
|
||
from PyQt5 import QtCore, QtGui, QtWidgets | ||
|
||
|
||
class Ui_Dialog(object): | ||
def setupUi(self, Dialog): | ||
Dialog.setObjectName("Dialog") | ||
Dialog.resize(290, 131) | ||
self.label = QtWidgets.QLabel(Dialog) | ||
self.label.setGeometry(QtCore.QRect(40, 20, 47, 13)) | ||
font = QtGui.QFont() | ||
font.setPointSize(11) | ||
self.label.setFont(font) | ||
self.label.setObjectName("label") | ||
self.lineEdit = QtWidgets.QLineEdit(Dialog) | ||
self.lineEdit.setGeometry(QtCore.QRect(90, 20, 171, 20)) | ||
self.lineEdit.setObjectName("lineEdit") | ||
self.label_2 = QtWidgets.QLabel(Dialog) | ||
self.label_2.setGeometry(QtCore.QRect(40, 63, 47, 20)) | ||
font = QtGui.QFont() | ||
font.setPointSize(11) | ||
self.label_2.setFont(font) | ||
self.label_2.setObjectName("label_2") | ||
self.dateEdit = QtWidgets.QDateEdit(Dialog) | ||
self.dateEdit.setGeometry(QtCore.QRect(90, 60, 171, 22)) | ||
self.dateEdit.setObjectName("dateEdit") | ||
self.pushButton = QtWidgets.QPushButton(Dialog) | ||
self.pushButton.setGeometry(QtCore.QRect(100, 100, 75, 23)) | ||
self.pushButton.setObjectName("pushButton") | ||
|
||
self.retranslateUi(Dialog) | ||
QtCore.QMetaObject.connectSlotsByName(Dialog) | ||
|
||
def retranslateUi(self, Dialog): | ||
_translate = QtCore.QCoreApplication.translate | ||
Dialog.setWindowTitle(_translate("Dialog", "Dialog")) | ||
self.label.setText(_translate("Dialog", "Name:")) | ||
self.label_2.setText(_translate("Dialog", "DOB:")) | ||
self.pushButton.setText(_translate("Dialog", "Save")) |
Oops, something went wrong.