Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("BubbleBot: Hello! What's your name?");
Console.WriteLine("");
Console.ResetColor();
while (!shutdown)
{
foundResponse = false;
Console.Write("You: ");
inputValue = Console.ReadLine().ToLower();
Console.WriteLine("");
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("BubbleBot: ");
switch(inputValue)
{
case "My name is ":
foundResponse = true;
outputValue = "Hello,";
break;
我正在尝试制作一个聊天机器人,我想确保聊天机器人只看到文本作为用户的名字,如果“我的名字是”字样在它之前。我不确定这是否可行,如果是的话,我该如何实现呢? (基本上我试图说明“我的名字是”之后的任何单词应该被设置为字符串,“userName”)
答案 0 :(得分:1)
简而言之,请使用Name Finder
工具。
如果您认真考虑开发聊天机器人擦除用户文本响应,那么您很快就会讨厌这个项目。我建议使用Natural Language Processing (NLP)
并使用像SharpNLP这样的Parts of Speech (POS)
标记库。
我的名字是John Doe
将分解为部分语言。主语和谓语。它将进一步分为主题名词,动词,形容词和谓词名词,甚至是你想要的专有名词。以下是SharpNLP中的工具列表。
https://archive.codeplex.com/?p=sharpnlp
更好的是,如果这是一次学习练习,我会研究微软,谷歌和亚马逊AI已经做过什么并学会使用他们的API。
答案 1 :(得分:0)
这可以帮助您解决当前的问题。
var nameIndicator = "my name is ";
var index = inputValue.ToLower().IndexOf(nameIndicator);
if (index == -1)
{
// Not found
}
else
{
var name = inputValue.Substring(index + nameIndicator.Length);
}
变量name
将提取&#34之后的所有内容;我的名字是"正如名字一样。
但是我强烈建议您在此重新考虑您的方法,因为非常容易出错。如果用户打错了怎么办?此外,从用户体验的角度来看,没有人愿意输入"我的名字是XYZ"当被问到姓名时,你只需输入你的名字即可。
您可以做的只是询问名称并将用户输入作为名称。
当您发布代码示例时,请发布完整的样本,无需编辑即可运行。 如果时间过长,请参阅此处如何发布Minimal, Complete, and Verifiable example。