نوشتن یه چت بات(chat bot) سخنگو!!!

نوشتن یه چت بات(chat bot) سخنگو!!!

با سلام !در این نوشته من می خوام از چت بات سخنگویی که در پایتون نوشتم رونمایی کنم.خب اولا منظورم از یه چت بات سخنگو چیه؟حدود یک سال پیش من به فکرم زد که یه نرم افزاریو بنویسم که هم بتونه بفهمه چی میگم و هم بتونه جوابمو بده.تقریبا میشه گفت تا 60% موفق بودم. چون انجامش دادم و موفق شدم با رباتی که نوشتم یه سلام و عیک کوتاهی داشته باشم و 60% کار انجام شد ولی بعد از این دیگه نمی دونستم باید چیکار کنم و چجوری این برنامه رو توسعه بدم یعنی کاری کنم که مکالممون طولانی تر بشه پس ولش کردم.ولی خیلی ناگهانی امروز با یه کتابخونه توی پایتون آشنا شدم که دقیقا 40% بود که نیاز داشتم و یه جرقه تو ذهنم زد که این ربات رو تکمیل کنم. پس خیلی وقتتون رو نمی گیرم و سریع میریر سراغ کار اصلی.اولین کاری که باید انجام بدیم تبدیل کردن صدامون به متن و دومین کار برعکسش تبدیل متن به صدا.تبدیل صدا به متن:برای تبدیل صدا به متن من از پکیج SpeechRecognition ِاستفاده می کنم و میتونید برای نصبش عبارت زیر رو وارد کنید.pip install SpeechRecognition https://pypi.org/project/SpeechRecognition/ و میریم سراغ تبدیل متن به صدا.برای تبدیل متن به صدا میتونید از پکیج pyttx3 استفاده کنید و برای نصبش باید عبارت زیر رو در خط فرمان وارد کنید.pip install pyttsx3حالا باید با استفاده از پکیج هایی که نصب کردیم یه کد ساده بزنیم که هرچی شما میگید رو خودش دوباره بگه..کد:import speech_recognition as srimport pyttsx3r = sr.Recognizer()def SpeakText(command): engine = pyttsx3.init() engine.say(command) engine.runAndWait()while(1): try: with sr.Microphone() as source2: r.adjust_for_ambient_noise(source2, duration=0.2) audio2 = r.listen(source2) MyText = r.recognize_google(audio2) MyText = MyText.lower() print(&quotDid you say &quot+MyText) SpeakText(MyText) except sr.RequestError as e: print(&quotCould not request results; {0}&quot.format(e)) except sr.UnknownValueError: print(&quotunknown error occured&quot)چون اینجا نمی شه بتون نشون بدم که دارم با این برنامه حرف میزنم و اون هم داره هر چی من میگم رو تکرار میکنه شما خودتون میتونید این کد رو تو سیستم خودتون ران کنید و من این حس خوبو ازتون نمیگیرم😂راستی بخواطر اینکه پکیج تبدیل صدا به متن از api گوگل استفاده میکنه شما نیاز به اینترنت دارید و باید اینترنتتون تا زمانی که این کد رو اجرا میکنید روشن باشه.خب این همون 60% درصدی بود که میگفتم. ولی یکم بیشتر مثلا یه شرط گذاشتم اگه سلام کردم اونم سلام کنه و خودشو معرفی و….ولی خب این کار کافی نبود پس اینجا بود که ناگهان یک کتابخونه ی مشکل گشا سر راه من قرار گرفت و مشکل من رو حل کرد اما این کتابخونه چی بود؟اما این کتابخونه چیه؟کتابخونه ی NLTK که اختصاری برای عبارت «کیت ابزار زبان طبیعی» (Natural Language Toolkit) است یک پلتفرم پیشرو برای ساخت برنامه‌های پایتون با داده‌های زبان انسانی محسوب می‌شود. این پلتفرم اینترفیس‌های سهل‌الاستفاده‌ای برای بیش از 50 منبع متنی و واژگانی مانند WordNet ارائه می‌کند و مجموعه‌ای از کتابخانه‌های پردازش متن برای طبقه‌بندی، توکن سازی، «ریشه‌یابی» (stemming)، تگ گذاری، تجزیه و استدلال احساسی و پوشش‌هایی برای کتابخانه‌های NLP قدرتمند ارائه می‌کند.در اصل NLTK به نام «یک ابزار شگفت‌انگیز برای یادگیری و کار در زمینه زبان‌شناسی رایانشی در پایتون» و «یک کتابخانه عالی برای کار با زبان طبیعی» توصیف شده است.اما نحوه ی نصب این کتابخونه چجوریه؟ بازم عبارت زیر رو……😄pip install nltk https://pypi.org/project/nltk/ بعد از اینکه ntlk نصب شد به پایتون برید و این کتابخونه رو ایمپورت کنید.import nltkو وقتی ایمپورت کردید عبارت زیر رو وارد کنید.nltk.download()و اما ابزار دوم چیزی نیست جز scikit-learn اما این چیه؟سایکیت لِرن (scikit-learn) یک کتابخانه پایتون «نرم‌افزار آزاد» (free software) برای یادگیری ماشین است که بر مبنای SciPy ،NumPy و matplotlib ساخته شده است. این ماژول ابزارهای ساده و موثری برای (Data Mining) و «تحلیل داده» فراهم می‌کند. SKLearn برای همه در دسترس و قابل استفاده مجدد در زمینه‌های گوناگون است.اما کاری که ما قراره بکنیم چیه ؟قبل از اینکه ادامه ی متن رو بخونید اول به لینک زیر برید و نوشته ِ در لینک رو بخونید چون در ادامه بهشون نیاز داریم. https://blog.faradars.org/building-a-simple-chatbot-in-python-using-nltk/ اما کاری که الان می خوام بکنم شبیه نوشته ی قبلیمه (keylogger و ارسال آن به ایمیل)و این کار چیزی نیست جز درست کردن آش…😅یعنی قراره کدی که بالا زدیم رو با کدی که در لینک بالا نوشته شده مخلوط کنیم و یه آش درست کنیم و حاصل این آش یک chatbot هست که هم میتونه حرف بزنه و هم شما میتونید باش حرف بزنید.کد:import nltk
import warnings
warnings.filterwarnings(&quotignore&quot)
import numpy as np
import random
import string
import speech_recognition as sr
import pyttsx3
r = sr.Recognizer()
def SpeakText(command):
engine = pyttsx3.init()
engine.say(command)
engine.runAndWait()
def lisen():
while(1):
try:
with sr.Microphone() as source2:
r.adjust_for_ambient_noise(source2, duration=0.2)
audio2 = r.listen(source2)
MyText = r.recognize_google(audio2)
MyText = MyText.lower()
print(&quotDid you say &quot+MyText)
return MyText
except sr.RequestError as e:
print(&quotCould not request results; {0}&quot.format(e))
except sr.UnknownValueError:
print(&quotunknown error occured&quot)
f=open(‘chatbot.txt’,’r’,errors = ‘ignore’)
raw=f.read()
raw=raw.lower()
sent_tokens = nltk.sent_tokenize(raw)
word_tokens = nltk.word_tokenize(raw)
sent_tokens[:2]
word_tokens[:5]
lemmer = nltk.stem.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)))
GREETING_INPUTS = (&quothello&quot, &quothi&quot, &quotgreetings&quot, &quotsup&quot, &quotwhat’s up&quot,&quothey&quot,)
GREETING_RESPONSES = [&quothi&quot, &quothey&quot, &quot*nods*&quot, &quothi there&quot, &quothello&quot, &quotI am glad! You are talking to me&quot]
def greeting(sentence)
for word in sentence.split()
if word.lower() in GREETING_INPUTS:
return random.choice(GREETING_RESPONSES)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
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+&quotI am sorry! I don’t understand you&quot
return robo_response
else:
robo_response = robo_response+sent_tokens[idx]
return robo_response
flag=True
print(&quotROBO: My name is Robo. I will answer your queries about Chatbots. If you want to exit, type Bye!&quot)
while(flag==True):
user_response = lisen()
user_response=user_response.lower()
if(user_response!=’bye’):
if(user_response==’thanks’ or user_response==’thank you’ ):
flag=False
SpeakText(&quotYou are welcome..&quot)
print(&quotROBO: You are welcome..&quot)
else:
if(greeting(user_response)!=None):
SpeakText(greeting(user_response))
print(&quotROBO: &quot+greeting(user_response))
else:
a = response(user_response)
print(&quotROBO: &quot,end=&quot&quot)
SpeakText(a)
print(a)
sent_tokens.remove(user_response)
else:
flag=False
SpeakText(&quotBye take care..&quot) خب این کد یکم از 40% بشتر و متاسفانه به دلیل اینکه خیلی طولانیه نمیتونم توضیحش بدم اما در لینکی که بالا گذاشتم این کد توضیح داده شده… اما شاید بپرسید chatbot.txt چیه؟خب اگه در لینک بالا رفته برید و به کد بالا یه نگاه بندازید متوجه یه نکته میشدید و اون فایل chatbot.txt(اسم فایل با خودتونه) هست اما این فایل چیه؟ شما یه فایل کنار لوکیشن کدتون میسازین و توی این فایل اطلاعاتی راحب هر چیزی که می خواین می نویسین راجب هرچی مثلا من از سایت ویکی پدیا یه مطلب راجب پایتون کپی کردم توی این فایل و حالا می خوام با روباتی که ساختم یه مکالمه داشته باشم و ازش راجب پایتون سوال بپرسم همونطور که گفتم من نمی تونم به شما نشون بدم که من واقعا درام با رباتم حرف میزنم و اون هم داره جوابمو میده ولی اگه به کد نگاه کنید هیچ input توی کد که من بخوام چیزی بنویسم نیست و تصویر زیر یک بخش از مکالمه ی بین من و رباتم هست.(هشدار: نیاز به روشن بودن اینترنت😐)دیدگاه ربات من از پایتونXDهمونطور که میبینید وقتی من از رباتم پرسیدم پایتون چیه اون هم جوابمو داد و تونستیم با هم حرف بزنیم و این برای من جذاب بود و وقتی هم بهش میگید bye خود روبات برنامه رو میبنده.همونطور که میبینید من خیلی با این ربات حرف نزدم ولی هر چقد که میخواین مکالمه ی طولانی تری داشته باشید میتونید اطلاعات بیشتری در chatbot.txt پر کنید.ایده های زیادی برای این chatbot دارم و امیدوارم chatbot سخنگوی 2 هم منتشر بشه😅امیدوارم این نوشته به شما کمک کرده باشه.و بازم ممنون از اینکه از نوشته ی من بازدید کردید❤.

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *