Моя интерпретация документов такова, что вам нужно будет накапливать и работать в любом сложном состоянии самостоятельно. Вы предоставляете NSSpeechRecognizer набор отдельных слов / фраз, которые он должен распознавать как «команды», и он сообщает вам, когда распознает их.
Для примера, который вы привели, я думаю, что вы столкнетесь с проблемами, когда перейдете к части "Адам и Джон" - это не произвольный механизм диктовки. Но, для забавы, давайте попробуем представить, как мы можем это сделать:
Вы можете сказать, что хотите распознать следующие фразы как «команды»:
- "график а"
- «встреча» (и, возможно, «встреча», «playdate» и т. Д.)
- "с"
- "Адам и Иоанн"
- «завтра» (и, возможно, другие связанные вещи, такие как «сегодня», «через два дня», все дни недели и т. Д.)
- «десять часов»
Поскольку слова / фразы распознаются, вы можете создать стек семантически связанных слов / фраз на основе ранее распознанных слов / фраз. Так, например, он распознает фразу «планировать», и вы знаете, что должно быть больше информации для заполнения семантического контекста, поэтому вы помещаете эту фразу в стек. Далее он распознает «встречу». Ваше приложение говорит «конечно, встреча - это то, что может быть запланировано» и помещает ее в стек. Если следующее слово, которое оно распознало, не было уместным для ранее распознанной команды «планировать a», то оно очистило бы стек. Если в какой-то момент элементы в стеке удовлетворяют некоторым предварительно определенным критериям для полностью сформированного выражения семантического намерения, тогда ваше приложение может предпринять соответствующее действие на основе этого намерения. Очевидно, в этом есть и временной элемент. Если следующая вещь, необходимая для установления семантического контекста, не приходит в разумные сроки, стек семантического контекста должен быть очищен.
Концептуально похожей системой является система распознавания жестов сенсорной панели / трекпада iOS / MacOS. Когда происходит касание касания, ОС должна распознать одно касание и подтвердить возможность того, что это все намерение пользователя, но она также должна управлять возможностью того, что она может получить еще одно касание очень быстро, превращая одно касание в двойное нажатие. Это должно будет накапливать это состояние с течением времени и выводить намерения пользователя, просматривая комбинацию дискретных событий.
Вы не собираетесь получать такую функциональность от NSSpeechRecognizer бесплатно, и, поскольку это не механизм диктовки, вы также не получите от него произвольные «токены» (например, «Адам и Джон», если вы не регистрировать какой-то гигантский список имен, все как потенциальные команды.) Но даже в этом случае это не означает, что нельзя было бы использовать некоторые изящные вещи, используя механизм, как я описал. Просто тебе придется написать это самому.
Удачи!