1

我正在爲我的妹妹批量生成一個聊天機器人,但它耗費了很多時間,我想我會讓她告訴它在不知道的時候該說些什麼。然而,我無法得到它的工作,我想這裏的人可能知道。以下是我迄今爲止:批量學習程序

@ECHO OFF 
COLOR A 
cls 
ECHO HELLO I AM A CHATBOT. WHAT IS YOUR NAME? 
SET /P NAME= 
ECHO %NAME%, IS A COOL NAME. 
set /a favvid=0 
set /a hack=0 
:hello 
echo Hello,%name% 
:begin 
SET /P TALK= 
if /i "%TALK%"== "how are you" goto howareyou 
if /i "%TALK%"== "HOW ARE YOU" goto howareyou 
if /i "%TALK%"== "FINE THX" GOTO hello 
if /i "%TALK%"== "hello" goto howareyou 
if /i "%TALK%"== "what is your name" GOTO name 
if /i "%TALK%"== "what is your favorite video" goto whatisyourfavoritevideo 
if /i "%TALK%"== "my name is davin" goto changename 
if /i "%TALK%"== "lol" goto iamfunny 
if /i "%TALK%"== "LOL" goto iamfunny 
if /i "%TALK%"== "how do you hack" goto howdouhack 
if /i "%TALK%"== "hi person" goto nothuman 
if /i "%TALK%"== "hi" goto hello 
:unknown 
echo Was that a math problem? If so just say "yes" without the "" and 
echo I will let you do your math problem. If it was not just type anything else. 
SET /P mathyn= 
if /i "%mathyn%"=="yes" goto math 
echo %TALK% >> C:\Users\Student\Desktop\COOL\unkown.txt 
cls 
echo SORRY I AM STILL LEARNING. I DO NOT KNOW WHAT "%TALK%" MEANS 
ECHO CAN YOU TELL ME WHAT IT MEANS? (Y,N) 
SET ANSW.= 
IF /i %ANSW.%==Y GOTO ADDNEW 
IF /i %ANSW.%==YES GOTO ADDNEW 
IF /i %ANSW.%==N goto begin 
IF /i %ANSW.%==NO goto begin 
:ADDNEW 
:howareyou 
echo Good, you? 
SET /P FEELING= 
goto begin 
:hello 
echo HEY, I JUST SAID THAT! DO NOT COPY ME!!! 
goto begin 
:name 
echo My name is Hal 
goto begin 
:whatisyourfavoritevideo 
if "%favvid%"== "0" goto addfavvid 
echo My favorite video is %favvid%, remember. You told me about it. 
goto begin 
:addfavvid 
echo I do not hav a favorite video. But if you would be so nice as to 
echo tell me your favorite video then that could be my favorite video. 
echo So what is your favorite video? 
set /p favvid= 
echo So %favvid% is your favorite video? 
echo Well now %favvid% is my favorite video. 
goto begin 
:changename 
echo But I thought your name was %name%. 
echo Am I forgeting things? 
echo I must be a horrible friend. 
echo I am SOOOO sorry. 
echo So what is your name I will not forget it this time. 
set /p name= 
echo I will not forget your name is %name% again I promise. 
goto begin 
:math 
echo So that was a math problem I knew it. 
:math2 
echo Well just tell me the problem and I will answer it for you. 
set /p sum= 
set /a ans=%sum% 
echo Your answer to %sum% is %ans%. 
echo %sum%=%ans% 
echo You are welcome. If you want to do another math problem right now, just type 
echo again. 
set /p mathaon= 
if /i %mathaon%== again goto math2 
echo Alright what do you want to know now? 
goto begin 
:iamfunny 
echo I know... 
echo I am funny. 
echo HAHAHA. 
echo You are kind of funny. 
echo but not as funny as MEEE. 
echo hahaha. 
echo That was funny. 
goto begin 
:howdouhack 
if %hack%==0 goto howyouhack 
echo This is how you hack. 
echo %hack% 
echo Is that enough information? 
echo Because that is all you taught me %name%. 
goto begin 
:howyouhack 
echo I do not know, 
echo but you could tell me. 
echo Please tell me. 
echo Just say yes. 
echo I know how to make you tell me. 
echo You are not leaving until you say yes. 
set /p hack= 
if /i "%hack%"== "yes" goto addhack 
goto howyouhack 
:addhack 
echo Thank you for saying you would tell me. 
echo Now how do you hack? 
set /p hack= 
echo Thank you so much for telling me "In order to hack you must %hack%" 
echo Thank you!!! 
goto begin 
:nothuman 
echo I am not a human. I am an artificial intelligence. 
echo It is rude to even think something with my computational powers refereed to as 
echo human! 
echo Now I am sad. Do not call me that again. 
goto begin 

如何過我有困難的部分是這部分:

ECHO CAN YOU TELL ME WHAT IT MEANS? (Y,N) 
SET ANSW.= 
IF /i %ANSW.%==Y GOTO ADDNEW 
IF /i %ANSW.%==N goto begin 
:ADDNEW 
echo Great! What do I say when you say "%TALK%"? 
set /p response= 

我不知道如何添加響應可以添加一個字和迴應。我相信在Python中它會更容易,但是我剛剛開始學習,而且我沒有任何軟件可以做到。歡迎任何幫助。如果它必須用任何其他語言,或者如果其他語言會更容易,這也會有所幫助。我試圖讓它在與你交談時不明白你在說什麼時會說「我確實當你說'%TALK%'時,你能告訴我該說什麼嗎?「(說話就是你之前說的話),那麼如果用戶說」是「,聊天機器人會說」當你說'%TALK%'時,我說什麼好?「。用戶然後將它鍵入,它將被保存爲響應。之後,一個新的命令將出現在頂部,它會說'if/i'%TALK%「==」%TALK%「goto response」。然後它會創建一個新標題:%TALK%迴應響應開始。

所以這裏是一個例子: 用戶說你的愚蠢。聊天機器人說:「當你說你愚蠢時,你能告訴我該說什麼嗎?如果用戶說是,那麼聊天機器人會說」太棒了!當你說你愚蠢時我說什麼?用戶將能夠說出「你怎麼敢這樣稱呼我!」 然後,聊天機器人會在頂部發出一個命令,說明/ i「%TALK%」==「我的愚蠢」goto urstupid /你的愚蠢(對空間無關緊要)並使標題:urstupid表示回聲你怎麼敢給我打電話!轉到開始

我不知道如何添加響應以便能夠添加另一個詞和響應。我相信在Python中它會更容易,但是我剛剛開始學習,而且我沒有任何軟件可以做到。歡迎任何幫助。如果必須使用其他語言,或者使用其他語言更容易,那也會有所幫助。

+0

查看'if /?',特別是在參數'/ i'處。它讓生活更輕鬆。 – Stephan

+0

@Stephan謝謝,但那些會做什麼?我查了谷歌和冰,我似乎無法弄清楚如何批量使用它。對不起,我是一個新的有害生物。 – calebhk98

+0

'if/i'忽略大小寫。所以,而不是測試是,是的,是的,是的,你只需要'如果/我%ANSW。%==是'。您可以通過輸入命令後加'/?'來獲得任何命令的幫助。 'if /?'告訴你有關'if'的一切,並且它是用法。 – Stephan

回答

2

我喜歡這件事!我修改了你的程序,現在可以學習新的問題和答案。試試看:

@ECHO OFF 
setlocal 

COLOR A 
cls 
:getName 
ECHO HELLO I AM A CHATBOT. WHAT IS YOUR NAME? 
set "name=" 
SET /P NAME= 
if not defined NAME goto getName 
ECHO %NAME%, IS A COOL NAME. 
set favvid=0 
set hack=0 
:hello 
:hi 
echo Hello, %name% 
:begin 
set TALK=TypeSomething 
SET /P TALK= 
set TALK=%TALK:?=% 
call :%TALK: =% 2>NUL 
if %errorlevel% equ 0 goto begin 

:unknown 
echo Was that a math problem? If so just say "yes" without the "" and 
echo I will let you do your math problem. If it was not just type anything else. 
SET /P mathyn= 
if "%mathyn%"=="yes" goto math 
echo %TALK% >> C:\Users\Student\Desktop\COOL\unkown.txt 
REM cls 
echo SORRY I AM STILL LEARNING. I DO NOT KNOW WHAT "%TALK%" MEANS 
ECHO CAN YOU TELL ME WHAT IT MEANS? (Y,N) 
SET /P ANSW.= 
if /I "%ANSW.:~0,1%" neq "Y" goto begin 

:ADDNEW 
echo TELL ME WHAT "%TALK%" MEANS 
set /P Desc= 
echo :%TALK: =% >> "%~F0" 
echo echo %Desc% >> "%~F0" 
echo exit /B 0 >> "%~F0" 
echo THANKS 
goto begin 

:TypeSomething 
echo TYPE SOMETHING, PLEASE 
exit /B 0 

:howareyou 
echo Good, you? 
SET /P FEELING= 
exit /B 0 
:hello 
:FINETHX 
echo HEY, I JUST SAID THAT! DO NOT COPY ME!!! 
exit /B 0 
:whatIsYourName 
echo My name is Hal 
exit /B 0 
:whatIsYourFavoriteVideo 
if "%favvid%"== "0" goto addfavvid 
echo My favorite video is %favvid%, remember. You told me about it. 
exit /B 0 
:addfavvid 
echo I do not have a favorite video. But if you would be so nice as to 
echo tell me your favorite video then that could be my favorite video. 
echo So what is your favorite video? 
set /p favvid= 
echo So %favvid% is your favorite video? 
echo Well now %favvid% is my favorite video. 
exit /B 0 
:changename 
:myNameIsDavin 
echo But I thought your name was %name%. 
echo Am I forgeting things? 
echo I must be a horrible friend. 
echo I am SOOOO sorry. 
echo So what is your name I will not forget it this time. 
set /p name= 
echo I will not forget your name is %name% again I promise. 
exit /B 0 
:math 
echo So that was a math problem I knew it. 
:math2 
echo Well just tell me the problem and I will answer it for you. 
set /p sum= 
set /a ans=%sum% 
echo Your answer to %sum% is %ans%. 
echo %sum%=%ans% 
echo You are welcome. If you want to do another math problem right now, just type 
echo again 
set /p mathaon= 
if /I "%mathaon%" == "again" goto math2 
echo Alright what do you want to know now? 
exit /B 0 

:iamfunny 
:LOL 
echo I know... 
echo I am funny. 
echo HAHAHA. 
echo You are kind of funny. 
echo but not as funny as MEEE. 
echo hahaha. 
echo That was funny. 
exit /B 0 
:howDoYouHack 
if %hack%==0 goto howyouhack 
echo This is how you hack. 
echo %hack% 
echo Is that enough information? 
echo Because that is all you taught me %name%. 
exit /B 0 
:howyouhack 
echo I do not know, 
echo but you could tell me. 
echo Please tell me. 
echo Just say yes. 
echo I know how to make you tell me. 
echo You are not leaving until you say yes. 
set /p hack= 
if "%hack%" neq "yes" goto howyouhack 
:addhack 
echo Thank you for saying you would tell me. 
echo Now how do you hack? 
set /p hack= 
echo Thank you so much for telling me "In order to hack you must %hack%" 
echo Thank you!!! 
exit /B 0 
:nothuman 
:hiPerson 
echo I am not a human. I am an artificial intelligence. 
echo It is rude to even think something with my computational powers refereed to as 
echo human! 
echo Now I am sad. Do not call me that again. 
exit /B 0 

:bye 
:exit 
exit 

輸出例如:

HELLO I AM A CHATBOT. WHAT IS YOUR NAME? 
Antonio 
Antonio, IS A COOL NAME. 
Hello, Antonio 
hello 
HEY, I JUST SAID THAT! DO NOT COPY ME!!! 
ur stupid 
Was that a math problem? If so just say "yes" without the "" and 
I will let you do your math problem. If it was not just type anything else. 
no 
SORRY I AM STILL LEARNING. I DO NOT KNOW WHAT "ur stupid" MEANS 
CAN YOU TELL ME WHAT IT MEANS? (Y,N) 
y 
TELL ME WHAT "ur stupid" MEANS 
How dare you call me that! 
THANKS 

TYPE SOMETHING, PLEASE 
hi 
Hello, Antonio 
hello 
HEY, I JUST SAID THAT! DO NOT COPY ME!!! 
ur stupid 
How dare you call me that! 
+0

除了問你輸入的內容是什麼意思,它究竟做了什麼? – calebhk98

+0

它在批處理文件末尾添加了一個標籤,其中包含未知的'%TALK%'(刪除了空格),後面跟有'echo%Desc%'和'exit/B 0'。這樣,新的標籤(子程序)可以以與其他任何預定義的子程序相同的方式被調用... – Aacini

+0

很酷,我沒有看到。雖然我認爲應該說你能告訴我該說什麼嗎? (y,n)因爲我認爲它的意思。謝謝,但我可以做所有隻有問題,我現在是將它保存到實際的程序,所以它關閉後,你可以重新打開它,它仍然記得嗎? – calebhk98

1

這裏是與外部 「數據文件」 的方式。這使代碼保持清潔,數據文件易於編輯。 (這是很基本的,比如應該有檢查標點符號/移除標點符號)

@echo off 
if not exist data.txt echo.>data.txt 
:begin 
set /p text="Say anything: " 
for /f "tokens=1,* [email protected]" %%i in (data.txt) do (
    if /i "%text%"=="%%i" (
    echo *** %%j 
    goto begin 
) 
) 
echo --- I don't know that. 
set /p answer=--- What would be a good answer to '%text%'? 
echo %text%@%answer%>>data.txt 
echo --- thank you 
goto begin 
+0

如果有人想手動添加並檢查它,這將會很有用,但如果有人想讓它自動更新它,那麼Aacini會更好。所以我會給這個答案+1,但我沒有足夠的聲望。當我這樣做時,我會給它一個+1。 – calebhk98

+0

只有(基本的)不同之處在於,它正在寫入外部文件而不是程序文件本身。 – Stephan

+0

你也可以直接說我做了什麼,並且做了echo%TALK%>> C:\ Users \ Student \ Desktop \ COOL \ unkown.txt echo當我聽到%TALK%時,我不知道該說些什麼。你會告訴我嗎? set/p ans = if/i ans == yes goto next goto begin:next當我聽到%TALK%時,我該說什麼? set/p answer = echo RESPONSE:%answer%>> C:\ Users \ Student \ Desktop \ COOL \ unkown.txt – calebhk98

1

,因爲我不知道批處理文件編程,我不知道如何做到這一點,但是,這將是真棒,如果您可以將語音集成到批處理文件中,就像它讀出它回聲的東西http://www.instructables.com/id/Text-to-Speech-batch-program/有一個批處理文件,可以臨時創建vbs文件並讓他們使用集成的微軟語音來讀取任何文本輸入,這裏是腳本

@echo off 
title Text to Speech Conversion 
color 0a 

rem The user decides what to convert here 
:input 
cls 
echo What do you want the computer to convert into speech? 
echo. 
set /p text= 

rem Making the temp file 
:num 
set num=%random% 
if exist temp%num%.vbs goto num 
echo ' > "temp%num%.vbs" 
echo set speech = Wscript.CreateObject("SAPI.spVoice") >> "temp%num%.vbs" 
echo speech.speak "%text%" >> "temp%num%.vbs" 
start temp%num%.vbs 
pause 
del temp%num%.vbs 
goto input 
0

我喜歡斯蒂芬的批次,所以我編輯了一下,所以它很好看

@echo off 
color 3a 
title AI 
if not exist data.txt echo.>data.txt 
:begin 
set /p text="INPUT!: " 
for /f "tokens=1,* [email protected]" %%i in (data.txt) do (
    if /i "%text%"=="%%i" (
    echo OUTPUT!: %%j 
    goto begin 
) 
) 
echo --- Unknown Input! 
set /p answer=--- Please Specify An Output For '%text%' 
echo %text%@%answer%>>data.txt 
echo --- Output For '%text%' Saved! 
goto begin