У меня есть такая грамматика
<grammar xml:lang="en-US" version="1.0" xmlns="http://www.w3.org/2001/06/grammar" tag format="semantics/1.0" root="number" mode="voice">
<rule id="number" scope="public">
<one-of>
<item>1<tag>out.string="one"</tag><tag>out.Name="first"</tag></item>
<item>2<tag>out.string="two"</tag><tag>out.Name="second"</tag></item>
</one-of>
</rule>
</grammar>
Может кто-нибудь помочь мне, как получить доступ к элементам внутри элементов тега тоже.
Например, если распознаватель распознает 1
тогда он должен дать 1, один и первый.
В настоящее время использую
ISpRecoResult* pResult = spevent.RecoResult();
LPWSTR pszCoMemResultText = NULL;
_hr = pResult->GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE,&pszCoMemResultText,NULL);
pszCoMemResultText дает мне «1» или «2» на основе распознавания
Спасибо
Вы используете грамматику W3C, а не грамматику SAPI. Дурак я.
Эти данные хранятся в SPPHRASE структура, а не текст, поэтому вы должны получить это так:
ISpRecoResult* pResult = spevent.RecoResult();
SPPHRASE* pphrase;
hr = pResult->GetPhrase(&pphrase);
// your code here
CoTaskMemFree(pphrase);
Теперь я не использовал грамматики W3C с C ++, поэтому я не полностью конечно, если он работает так же, как и с грамматикой SAPI, но при условии, это делает, данные тега хранятся в виде дерева в pphrase->pProperties
,
Других решений пока нет …