Поделиться через


Динамическое изменение списков фраз Кортаны VCD

Предупреждение

Эта функция больше не поддерживается в обновлении Windows 10 мая 2020 г. (версия 2004, имя кода "20H1").

Доступ и обновление списка поддерживаемых фраз (элементов PhraseList ) в файле определения голосовой команды (VCD) во время выполнения с помощью результата распознавания речи.

Примечание.

Голосовая команда — это одно высказывание с определенным намерением, определенным в файле определения голосовой команды (VCD), направленное на установленное приложение через Кортана.

Файл VCD определяет одну или несколько голосовых команд с уникальным намерением.

Определения голосовых команд могут отличаться в сложности. Они могут поддерживать что-нибудь из одного ограниченного речевых фрагментов в коллекцию более гибких, речевых фрагментов естественного языка, все обозначающие одно и то же намерение.

Динамическое изменение списка фраз во время выполнения полезно, если голосовая команда связана с задачей, связанной с определенным пользователем или временными данными приложения.

Например, предположим, что у вас есть приложение для путешествий, в котором пользователи могут ввести назначения, и вы хотите, чтобы пользователи могли запустить приложение, сказав имя приложения, за которым следует "Показать поездку в <место назначения>". В самом элементе ListenFor можно указать примерно следующее: <ListenFor> Show trip to {destination} </ListenFor>где "назначение" является значением атрибута Label для PhraseList.

Обновление списка фраз во время выполнения устраняет необходимость создания отдельного элемента ListenFor для каждого возможного назначения. Вместо этого можно динамически заполнять PhraseList назначениями, указанными пользователем по мере ввода маршрутов.

Дополнительные сведения о PhraseList и других элементах VCD см. в справочнике по элементам и атрибутам VCD версии 1.2.

Совет

Необходимые условия

Если вы не знакомы с разработкой приложений универсальная платформа Windows (UWP), ознакомьтесь с этими разделами, чтобы ознакомиться с технологиями, описанными здесь.

Рекомендации по работе с пользователем

Ознакомьтесь с рекомендациями по проектированию Кортаны, чтобы узнать, как интегрировать приложение с Кортаной и речью , чтобы получить полезные советы по проектированию полезного и привлекательного приложения с поддержкой речи.

Определение команды и обновление списка фраз

Ниже приведен пример VCD-файла, который определяет команду showTripToDestination и Список фраз, определяющий три варианта назначения в нашем приложении Adventure Works для путешествий. Когда пользователь сохраняет и удаляет назначения в приложении, приложение обновляет параметры в Списке фраз.

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="destination">
      <Item> London </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>

  </CommandSet>

<!-- Other CommandSets for other languages -->

</VoiceCommands>

Чтобы обновить элемент PhraseList в файле VCD, получите элемент CommandSet , содержащий список фраз. Используйте атрибут Name этого элемента CommandSet (Имя должно быть уникальным в файле VCD) в качестве ключа для доступа к свойству VoiceCommandManager.InstalledCommandSets и получения ссылки VoiceCommandSet.

После определения набора команд получите ссылку на список фраз, который требуется изменить и вызвать метод SetPhraseListAsync; используйте атрибут Label элемента PhraseList и массив строк в качестве нового содержимого списка фраз.

Примечание.

При изменении списка фраз будет заменен весь список фраз. Если вы хотите вставить новые элементы в список фраз, необходимо указать как существующие, так и новые элементы в вызове SetPhraseListAsync.

В этом примере мы обновим Список фраз, показанный в предыдущем примере, с дополнительным назначением в Phoenix.

Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinition.VoiceCommandSet commandSetEnUs;

if (Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinitionManager.
      InstalledCommandSets.TryGetValue(
        "AdventureWorksCommandSet_en-us", out commandSetEnUs))
{
  await commandSetEnUs.SetPhraseListAsync(
    "destination", new string[] {"London", "Dallas", "New York", "Phoenix"});
}

Замечания

Использование списка фраз для ограничения распознавания подходит для относительно небольшого набора или слов. Если набор слов слишком велик (например, сотни слов) или не должен быть ограничен вообще, используйте элемент PhraseTopic и элемент Subject для уточнения релевантности результатов распознавания речи для повышения масштабируемости.

В нашем примере у нас есть ФразаTopic с сценарием "Поиск", более подробное описание темы "City\State".

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="https://schemas.microsoft.com/voicecommands/1.1">
  <CommandSet xml:lang="en-us" Name="AdventureWorksCommandSet_en-us">
    <AppName> Adventure Works, </AppName>
    <Example> Show trip to London </Example>

    <Command Name="showTripToDestination">
      <Example> show trip to London  </Example>
      <ListenFor> show trip to {destination} </ListenFor>
      <Feedback> Showing trip to {destination} </Feedback>
      <Navigate/>
    </Command>

    <PhraseList Label="destination">
      <Item> London </Item>
      <Item> Dallas </Item>
      <Item> New York </Item>
    </PhraseList>

    <PhraseTopic Label="destination" Scenario="Search">
      <Subject>City/State</Subject>
    </PhraseTopic>

  </CommandSet>