C# 使用AIML 弄 聊天机器人
2016-12-21 21:46
816 查看
孙广东 2016.12.21 http://blog.csdn.net/u010019717
确实有人问在Unity中怎么使用:
http://answers.unity3d.com/questions/826590/does-anyone-know-how-to-embed-aiml.html
答案: https://code.google.com/p/aimlbot-for-unity/
类似的 插件 AssetStore : Chatbot
来自 <https://www.assetstore.unity3d.com/en/#!/content/40404>
最容易理解的就是聊天机器人, 可以看看百度百科的介绍.: AIML
一、
现在看看C# 中该怎么使用?
新建一个 C# 的类库项目, 命名为 Chatbot
先做 准备工作, 下载类库 并导入:
下载 AIMLbot.dll http://sourceforge.net/projects/aimlbot/files/aimlbot/2.5/AIMLbot2.5.zip/download 到项目中
下载 aiml and config http://sourceforge.net/projects/aimlbot/files/aimlbot/2.5/ConsoleBot2.5.zip/download 两个文件夹,并导入到项目中
下载到是压缩包, 内容在
把上面的下载解压的文件拷贝到 我们新建的 库项目 Chatbot 中:
添加 文件
using AIMLbot;
using System;
namespace Chatbot
{
public class Chatbot
{
const string UserId ="CityU.Scm.David";
private Bot AimlBot;
private User myUser;
public Chatbot()
{
AimlBot = new Bot();
myUser = new User(UserId, AimlBot);
Initialize();
}
// Loads all the AIML files in the\AIML folder
public void Initialize()
{
AimlBot.loadSettings();
AimlBot.isAcceptingUserInput =false;
AimlBot.loadAIMLFromFiles();
AimlBot.isAcceptingUserInput =true;
}
// Given an input string, finds aresponse using AIMLbot lib
public String getOutput(String input)
{
Request r = new Request(input,myUser, AimlBot);
Result res = AimlBot.Chat(r);
return (res.Output);
}
}
}
然后在 当前解决方案 中 添加 新建项目 C# 控制台项目, 命名为ChatbotConsole , 并添加引用之前 的库项目 Chatbot
class Program
{
static Chatbot.Chatbot bot;
static void Main(string[] args)
{
bot = new Chatbot.Chatbot();
string input = "Hello, what isyour name";
var output = bot.getOutput(input);
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey();
}
}
http://blog.csdn.net/u010019717
运行的时候会报异常:
就是没有加载到配置文件
将 aiml and config 两个文件夹 拷贝到 控制台项目的 bin 下
现在 机器人不知道 自己是什么名字? 怎么办 ?
二 、
更改 控制台项目 下的配置:
改为 :
保存 然后执行, OK ! 已经改变了
三、
如果 问一个问题, 没有找打答案, 会出现卡死现象。
解决办法是 设置超时时间
settings.xml 文件中 修改 :
把值改为 "10" .
在测试, 提示的是:
ERROR: The request has timed out.
更优雅的处理提示方式:
var output= bot.getOutput(input);
if(!string.IsNullOrEmpty(output))
{
if(output.StartsWith("ERROR:"))
HistoryListBox.Items.Add("Robot:\t" + "I don't understand what you mean.");
else
HistoryListBox.Items.Add("Robot:\t" + output);
}
四、 配置你的机器人
我们在 问这样的问题, 可以得出这样的答案, 怎么弄?
Q: Whereis City University of Hong Kong?
A: Itis located in Tat Chee Avenue, Kowloon, Hong Kong SAR.
在 AIML 中 , 问题或输入 在Pattern 标签中 , 回答或输出 在 Template 标签中, Q-A 对 在 category 标签下
因为 主要是要 弄聊天机器人, 更改
Chatbot\ChatbotConsole\bin\Debug\aiml 路径下的 : Bot.aiml
如果 把问题 改变一点呢?
怎么让他模糊 匹配之前的问题呢?
使用 一个特殊的标记<srai>: 解决这样的需求
http://blog.csdn.net/u010019717
确实有人问在Unity中怎么使用:
http://answers.unity3d.com/questions/826590/does-anyone-know-how-to-embed-aiml.html
答案: https://code.google.com/p/aimlbot-for-unity/
类似的 插件 AssetStore : Chatbot
来自 <https://www.assetstore.unity3d.com/en/#!/content/40404>
最容易理解的就是聊天机器人, 可以看看百度百科的介绍.: AIML
一、
现在看看C# 中该怎么使用?
新建一个 C# 的类库项目, 命名为 Chatbot
先做 准备工作, 下载类库 并导入:
下载 AIMLbot.dll http://sourceforge.net/projects/aimlbot/files/aimlbot/2.5/AIMLbot2.5.zip/download 到项目中
下载 aiml and config http://sourceforge.net/projects/aimlbot/files/aimlbot/2.5/ConsoleBot2.5.zip/download 两个文件夹,并导入到项目中
下载到是压缩包, 内容在
把上面的下载解压的文件拷贝到 我们新建的 库项目 Chatbot 中:
添加 文件
using AIMLbot;
using System;
namespace Chatbot
{
public class Chatbot
{
const string UserId ="CityU.Scm.David";
private Bot AimlBot;
private User myUser;
public Chatbot()
{
AimlBot = new Bot();
myUser = new User(UserId, AimlBot);
Initialize();
}
// Loads all the AIML files in the\AIML folder
public void Initialize()
{
AimlBot.loadSettings();
AimlBot.isAcceptingUserInput =false;
AimlBot.loadAIMLFromFiles();
AimlBot.isAcceptingUserInput =true;
}
// Given an input string, finds aresponse using AIMLbot lib
public String getOutput(String input)
{
Request r = new Request(input,myUser, AimlBot);
Result res = AimlBot.Chat(r);
return (res.Output);
}
}
}
然后在 当前解决方案 中 添加 新建项目 C# 控制台项目, 命名为ChatbotConsole , 并添加引用之前 的库项目 Chatbot
class Program
{
static Chatbot.Chatbot bot;
static void Main(string[] args)
{
bot = new Chatbot.Chatbot();
string input = "Hello, what isyour name";
var output = bot.getOutput(input);
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey();
}
}
http://blog.csdn.net/u010019717
运行的时候会报异常:
就是没有加载到配置文件
将 aiml and config 两个文件夹 拷贝到 控制台项目的 bin 下
现在 机器人不知道 自己是什么名字? 怎么办 ?
二 、
更改 控制台项目 下的配置:
改为 :
保存 然后执行, OK ! 已经改变了
三、
如果 问一个问题, 没有找打答案, 会出现卡死现象。
解决办法是 设置超时时间
settings.xml 文件中 修改 :
把值改为 "10" .
在测试, 提示的是:
ERROR: The request has timed out.
更优雅的处理提示方式:
var output= bot.getOutput(input);
if(!string.IsNullOrEmpty(output))
{
if(output.StartsWith("ERROR:"))
HistoryListBox.Items.Add("Robot:\t" + "I don't understand what you mean.");
else
HistoryListBox.Items.Add("Robot:\t" + output);
}
四、 配置你的机器人
我们在 问这样的问题, 可以得出这样的答案, 怎么弄?
Q: Whereis City University of Hong Kong?
A: Itis located in Tat Chee Avenue, Kowloon, Hong Kong SAR.
在 AIML 中 , 问题或输入 在Pattern 标签中 , 回答或输出 在 Template 标签中, Q-A 对 在 category 标签下
因为 主要是要 弄聊天机器人, 更改
Chatbot\ChatbotConsole\bin\Debug\aiml 路径下的 : Bot.aiml
如果 把问题 改变一点呢?
怎么让他模糊 匹配之前的问题呢?
使用 一个特殊的标记<srai>: 解决这样的需求
http://blog.csdn.net/u010019717
相关文章推荐
- 10分钟构建人人都能学会的个性化聊天机器人-使用AIML(王小草博客)
- 使用Python AIML搭建聊天机器人的方法示例
- Python使用AIML搭建聊天机器人
- 基于Python如何使用AIML搭建聊天机器人
- 基于Python如何使用AIML搭建聊天机器人
- 你还在为使用P/Invoke时,写不出win32 api对应的C#声明而犯愁吗?
- C#中事件的使用
- 如何在C#中使用 Win32和其他库
- 开始使用C#
- 磁盘配额的WMI版本(还是使用C#)
- C# Builder 使用心得
- 源码推荐:一个使用C#绘制图形引擎的Framework
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#) skyover [原作]
- C#中使用Property Grid 控件 学习笔记(一)
- 使用C#+ASP.NET来进行RSA(非对称)加密.
- 使用C#开发一个简单的P2P应用
- 使用C#制作的更换桌面背景程序
- 如何使用C#创建一个三层的数据库应用程序
- C# Builder 使用心得
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)