Свободный текст с пользовательской грамматикой на основе SRGS - PullRequest
3 голосов
/ 04 ноября 2011

Я пытаюсь разработать приложение на основе голоса, которое будет принимать пользовательский ввод как речь и выполнять некоторые действия на основе ввода. Это мое первое предприятие в этой технологии, и я учусь, пока его разрабатываю.

Я использую Microsoft SAPI, поставляемый с dotnet 4, для распознавания речи. До сих пор я узнал о двух типах режимов, которые он поддерживает.

Распознавание речи (SR) имеет два режима работы:

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

  • Режим грамматики - сопоставляет произнесенные слова с одной или несколькими конкретными контекстно-свободными грамматиками (CFG). CFG - это структура, которая определяет конкретный набор слов, и сочетание этих слов, которые могут быть используемый. В основных терминах CFG определяет предложения, которые действительны для SR. Грамматика должна поставляться приложением в виде предварительно скомпилированные файлы грамматики или предоставляемые во время выполнения в форме W3C Разметка спецификации грамматики распознавания речи (SRGS) или более старая Спецификация CFG. Windows SDK включает в себя компилятор грамматики: gc.exe.

Так что, по сути, какие бы слова я ни указывал в грамматике, движок распознавал бы только те. Но я также хочу включить текст произвольной формы вместе со структурированной грамматикой. Примером тому могут служить имена людей. Если я хочу записать имя из речи, мне нужно указать это имя в грамматике, но это невозможно, если приложение открыто для любого пользователя.

Есть ли способ извлечь некоторый текст, который уже не является частью грамматики?

Как я могу заставить систему распознавать такие предложения, как «Меня зовут Гари и мне 25 лет». Название может быть абсолютно любым, как я могу определить его в моей грамматике?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Вы можете смешать режим диктовки с режимом грамматики, см. Этот пример в MSDN:

http://msdn.microsoft.com/en-us/library/ms723634(v=vs.85).aspx

<GRAMMAR>
    <!-- command to handle first and last names with semantic properties -->
    <!-- By using semantic properties, the application can ignore all of
        the text returned, except for the text associated with the dictation
        tags' semantic properties "PID_FirstName" and "PID_LastName" -->
    <RULE ID="SubmitName" TOPLEVEL="ACTIVE">
        <P>
            my first name is
            <!-- Note the implicit maximum is only one word -->
            <DICTATION PROPID="PID_FirstName"/>
            and my last name is
            <!-- Note the implicit maximum is two words -->
            <DICTATION PROPID="PID_LastName" MAX="2"/>
        </P>
    </RULE>
</GRAMMAR>
1 голос
/ 07 ноября 2011

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

...