检测数组中字符串对象的组合是否与任何命令匹配

时间:2014-01-17 03:24:06

标签: ios objective-c ios7 pattern-matching string-matching

请耐心等待并阅读我当前的情景。我的问题如下。

我的应用程序接受语音输入,并成功地将匹配在一起的单词组合成一个单词或一组单词 - 称为短语;无论是nameactionpet还是time框架。

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

每次用户停止发言时都会返回一个新的短语数组。

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

知道可以使用以下组合来创建命令:

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

问题

我最好的方法是解析所输入的短语并确定哪些组合短语能满足我的命令列表?

可能的解决方案我想出了 一种方法是逐步执行数组并使用if和else语句检查前面的短语,看看它们是否满足列表中的任何有效命令模式,但是我的解决方案不是动态的,我将不得不添加一组新的if和我创建的每个新命令排列的else语句。

我的解决方案效率不高。关于我如何能够创建这样的东西的任何想法,无论我是否添加一个新的短语组合命令序列,它都是有效的吗?

1 个答案:

答案 0 :(得分:0)

我认为我要做的是为每个类别的语音(宠物,命令等)制作一个数组。那些数组显然会将字符串作为元素。然后,您可以使用

对每个简单数组测试每个单词
[simpleWordListOfPets containsObject:word]

哪会返回BOOL结果。你可以在案例陈述中做到这一点。之后的逻辑取决于你,但我会继续使用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);

你可以用你想要的任何逻辑继续它(你会搜索空间而不是","。