检测数组中的string对象是否与任何命令相匹配

请耐心等待,阅读我目前的情况。 我的问题在下面。

我的应用程序需要语音input,并成功地将单词匹配在一起形成一个单词或一组单词 – 称为短语; 无论是nameactionpet还是time

我有一个允许的短语的主列表,并存储在各自的数组中。 所以我有以下数组validNamesArrayvalidActionsArrayvalidPetsArrayvalidTimeFramesArray

每当用户停止说话时,都会返回一组新的短语。

 NSArray *phrasesBeingFedIn = @[@"CHARLIE", @"EAT", @"AT TEN O CLOCK", @"CAT", @"DOG", "URINATE", @"CHILDREN", @"ITS TIME TO", @"PLAY"]; 

知道它可以有以下组合创build一个命令:

 COMMAND 1: NAME + ACTION + TIME FRAME COMMAND 2: PET + ACTION COMMAND n: n + n, .. + n //In the example above, only the groups of phrases 'Charlie eat at ten o clock' and 'dog urinate' //would be valid commands, the phrase 'cat' would not qualify any of the commands //and will therefor be ignored 

什么是最好的方式来parsing通过短语喂食,并确定哪些组合短语将满足我的命令列表?

可能的解决scheme我想出了一种方法是通过数组,并有if和else语句,检查前面的短语,看看他们是否满足从列表中的任何有效的命令模式,但是我的解决scheme是不dynamic的,我会为我创build的每个新命令排列添加一组新的if和else语句。

我的解决scheme效率不高。 任何关于如何创build类似这样的东西的想法都可以工作,而且是dynamic的,不pipe我是否添加了一个新的短语组合命令序列?

我想我会做的是为每个类别的语音(宠物,命令等)做一个数组。 那些数组显然会有string作为元素。 然后,您可以使用每个简单数组testing每个单词

 [simpleWordListOfPets containsObject:word] 

这将返回一个布尔结果。 你可以在案件陈述中这样做。 之后的逻辑是由你决定的,但是我会一直使用NSScanner来扫描这个句子,直到你完成了每个部分的评估。

我用了一些类似的概念来分析一个段落,它是这样开始的:

 while ([scanner scanUpToString:@"," intoString:&word]) { processedWordCount++; NSLog(@"%i total words processed", processedWordCount); // Does word exist in the simple list? if ([simpleWordList containsObject:word]) { //NSLog(@"Word already exists: %@", word); 

你可以用你想要的任何逻辑来继续它(你会寻找一个空间,而不是一个“,”)。