如何发言。除了一个关键词外,除了一切

时间:2014-12-23 15:00:23

标签: c# speech-recognition

我知道如何

if(speech.Contains("this"))
query = speech.replace("this", "");

但是,如何更换除了一个词之外的所有内容....例如。

如果演讲中包含“什么”“是”我想让它做一个IF声明......但如果我说“你能告诉我什么是狗”

我做了语音替换,是的,它会删除那些,但它仍然使我的演讲包含我说的其他所有内容。

实施例*

if(speech.Contains("What") || (speech.Contains("are")))
{

 query = speech.Replace("what are", "");

}

但我如何摆脱我可能会说的其他一切,“你能告诉我”,但仍然保留我在演讲中说的最后一句话,即“狗”

1 个答案:

答案 0 :(得分:2)

您只需使用白名单即可解决此问题:

string[] allowedWords = { "what", "are", "dogs" };

var speech = "Can you tell me what are dogs?";

var words = speech.split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

var cleanSpeech = "";

Regex rgx = new Regex("[^a-zA-Z0-9]");

foreach(var word in words)
{
    var cleanWord = rgx.Replace(word , "").ToLower();

    if(allowedWords.Contains(cleanWord))
       cleanSpeech += word + " ";
}

cleanSpeech.Trim();

以小写形式定义所有可接受的单词,因为函数执行ToLower()以避免套管问题,它还会处理标点符号(点,感叹号,逗号,问题等)。