2013-08-09 2 views
2

У меня есть грамматики, как этотSapi как получить элементы внутри элементов тега

<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" на основе recogniztion

Благодарности

+0

'' недействителен [элемент грамматики SAPI 5.3] (http://msdn.microsoft.com/en-us/library/ms723634%28v=vs.85%29.aspx). Возможно, вы имеете в виду атрибут 'proppid' или атрибут' valstr'? –

+0

Eric am new to sapi, Не так уж и знакомы с проницательностью и valstr. Моя цель - вернуть список пар ключей, когда какой-то текст распознается распознающим. Я думал, что над грамматикой xml поможет мне выполнить это, но не повезло. В какой версии sapi является допустимым элементом грамматики? – Dev

ответ

0

Вы используете W3C грамматики, а не SAPI грамматики , Дурак я.

Эти данные хранятся в SPPHRASE структуре, а не текст, так что вы бы получить его так:

ISpRecoResult* pResult = spevent.RecoResult(); 

SPPHRASE* pphrase; 
hr = pResult->GetPhrase(&pphrase); 
// your code here 
CoTaskMemFree(pphrase); 

Теперь, я не использовал W3C грамматик с C++, так что я не полностью уверен, что он работает так же, как и с SAPI-грамматиками, но при условии, что он делает, данные тега хранятся в виде дерева в pphrase->pProperties.

+0

Спасибо Эрик, мне пришлось сделать pphrase-> pProperties-> pFirstChild-> pszName для "string" и pphrase-> pProperties-> pFirstChild-> pszValue для "one" и pphrase-> pProperties-> pFirstChild-> pNextSibling-> pszName для "Name" и pphrase-> pProperties-> pFirstChild-> pNextSibling-> pszValue для "first" – Dev