Qu'est-ce que Dieu? Créez un chatbot simple avec python

Les chatbots sont souvent utilisés. Cet article est un mémo d'un chatbot que j'ai réalisé en lisant un article sur Medium. L'article original est ici:

https://medium.com/analytics-vidhya/building-a-simple-chatbot-in-python-using-nltk-7c8c8215ac6e


Qu'est-ce qu'un chatbot?

Chatbots are used in a variety of fields for different purposes, such as i) Support bots, designed to solve customer requests related to the delivery of a service or use of a product, and ii) Financial bots, aimed to resolve inquiries about financial services. Chatbots may have some constraints regarding the requests that they can respond and the vocabulary that they can employ, which depends on the specific domain where they are serving on. Furthermore, according to the Hype Cycle for emerging technologies by Gartner [2], conversational AI platforms remain in the phases of “innovation trigger” and “peak of inflated expectations”, meaning that they are getting substantial attention from the industry.

Besides the aforementioned use cases for chatbots, cybersecurity is one of the newest where to apply this technology. Thus, there exist chatbots focused on training end-users [3] or cyber analysts [4] in security awareness and incident response. Further, there are also malicious chatbots devoted to malware distribution through a human-machine conversation [5]. In addition, there is software designed to guide the user in terms of security and privacy, such as Artemis [6], a conversational interface to perform precision-guided analytics on endpoint data. Most of these security chatbots are implemented in a question-answering context [7] using a post-reply technique. As far as we know, the use of chatbots to profile suspects in an active way of child pornography has been little investigated, existing few approaches [8, 9] employing a chatbot to emulate a victim such as a child or a teenager. Likewise, our investigation aims to emulate a vulnerable person while the suspect offers him/her illegal content.

chatbot.png


Building the chatbot

In this section, we'll cover NLP and NLG in this project.

First, we'll need to import the relevant libraries:

import io
import random
import string # to process standard python strings
import warnings
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import warnings
warnings.filterwarnings('ignore')
import nltk
from nltk.corpus import gutenberg
from nltk.stem import WordNetLemmatizer
nltk.download('popular', quiet=True) # for downloading packages

If this is your first time using nltk, don't forget to run the following line and use the GUI to download all the packages.

nltk.download()

Preprocessing

raw = gutenberg.raw('bible-kjv.txt')
#Tokenisation
sent_tokens = nltk.sent_tokenize(raw)# converts to list of sentences 
word_tokens = nltk.word_tokenize(raw)# converts to list of words

# Preprocessing
lemmer = 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)))

It doesn't really matter which corpus you use. Here I use the bible from gutenberg.

Keyword Matching

GREETING_INPUTS = ("hello", "hi", "greetings", "sup", "what's up","hey")
GREETING_RESPONSES = ["hi", "hey", "*nods*", "hi there", "hello", "I am glad! You are talking to me"]

def greeting(sentence):
    """If user's input is a greeting, return a greeting response"""
    for word in sentence.split():
        if word.lower() in GREETING_INPUTS:
            return random.choice(GREETING_RESPONSES)

Generating Response TfidfVectorizer and cosine_similarity will be used to find the similarity between words entered by the user and the words in the corpus. This is the simplest possible implementation of a chatbot.

def response(user_response):
    robo_response=''
    sent_tokens.append(user_response)
    TfidfVec = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english')
    tfidf = TfidfVec.fit_transform(sent_tokens)
    vals = cosine_similarity(tfidf[-1], tfidf)
    idx=vals.argsort()[0][-2]
    flat = vals.flatten()
    flat.sort()
    req_tfidf = flat[-2]
    if(req_tfidf==0):
        robo_response=robo_response+"I am sorry! I don't understand you"
        return robo_response
    else:
        robo_response = robo_response+sent_tokens[idx]
        return robo_response

Start and end of the conversation

flag=True
print("ROBO: My name is Robo. I will answer your queries about Chatbots. If you want to exit, type Bye!")
while(flag==True):
    user_response = input()
    user_response=user_response.lower()
    if(user_response!='bye'):
        if(user_response=='thanks' or user_response=='thank you' ):
            flag=False
            print("ROBO: You are welcome..")
        else:
            if(greeting(user_response)!=None):
                print("ROBO: "+greeting(user_response))
            else:
                print("ROBO: ",end="")
                print(response(user_response))
                sent_tokens.remove(user_response)
    else:
        flag=False
        print("ROBO: Bye! take care..")

This approach is very basic for a chatbot as the response from the bot is simply based on keywords matching.

Recommended Posts

Qu'est-ce que Dieu? Créez un chatbot simple avec python
[Python] Qu'est-ce qu'une instruction with?
Faites une loterie avec Python
Créez un Slackbot simple avec un bouton interactif en python
Essayez de créer un jeu simple avec Python 3 et iPhone
[Python] Qu'est-ce qu'une fonction zip?
Faisons une interface graphique avec python.
Créer un système de recommandation avec python
Créer un fichier power simple avec Python
Faisons un jeu de shiritori avec Python
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
Créez un simple OMR (lecteur de feuille de marque) avec Python et OpenCV
Faisons la voix lentement avec Python
Faisons un langage simple avec PLY 1
Qu'est-ce qu'un chien? Volume d'installation Python
Qu'est-ce que python
Créez un framework Web avec Python! (1)
Créez une application de bureau avec Python avec Electron
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
J'ai fait un simple blackjack avec Python
Qu'est-ce que Python
order_by ('-created_at') ← Qu'est-ce que "ー"? ?? ?? [Le débutant apprend le python avec un livre de référence]
Créer un bot Twitter Trend avec heroku + Python
Je veux faire un jeu avec Python
Démarrez un serveur Web Python simple avec Docker
Essayez de créer un code de "décryptage" en Python
Que comparez-vous avec Python et ==?
Essayez de créer un groupe de dièdre avec Python
Liste de tâches simple créée avec Python + Django
Dites-moi ce qu'est une cartographie équiangulaire, Python!
Qu'est-ce qu'une distribution?
[Python] Qu'est-ce que Pipeline ...
Qu'est-ce qu'un terminal?
Qu'est-ce qu'un hacker?
Qu'est-ce qu'un pointeur?
[Python] Qu'est-ce que virtualenv
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Faisons un outil de veille de commande avec python
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
[Jouons avec Python] Créer un livre de comptes de ménage
Faire un point d'arrêt sur la couche c avec python
Créer un outil de formatage CSV avec Python Pandas Py Installer
[Super facile] Faisons un LINE BOT avec Python.
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
[Vagrant] Configurer un serveur API simple avec python
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Qu'est-ce qu'un arbre de décision?
La liste Python n'est pas une liste
Créer un bookmarklet en Python
Qu'est-ce qu'un changement de contexte?
[Python] Python et sécurité-① Qu'est-ce que Python?
Qu'est-ce qu'un super utilisateur?