从完整的文本字符串中获取用户名

时间:2018-06-12 21:33:06

标签: c# chatbot

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”)

2 个答案:

答案 0 :(得分:1)

简而言之,请使用Name Finder工具。

如果您认真考虑开发聊天机器人擦除用户文本响应,那么您很快就会讨厌这个项目。我建议使用Natural Language Processing (NLP)并使用像SharpNLP这样的Parts of Speech (POS)标记库。

  

我的名字是John Doe

将分解为部分语言。主语和谓语。它将进一步分为主题名词,动词,形容词和谓词名词,甚至是你想要的专有名词。以下是SharpNLP中的工具列表。

  • 句子分割器
  • 一个标记器
  • 词性标注器
  • a chunker(用于“查找非递归句法注释,如名词短语块”)
  • 解析器
  • 名称查找器
  • 参考工具
  • WordNet词汇数据库的接口

一只罕见的黑松鼠已成为郊区花园的常客 A rare black squirrel has become a regular visitor to a suburban garden

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