A ParseTree represents a sentence diagram of SRE output, according to the SRGS grammar that was matched. Information about the tree is accessed through iterators.
The function call LVCA_GetParseTreeHandle retrieves a pointer of type H_PARSE_TREE.
BOOL LVCA_GetParseTreeHandle(HANDLE hCA, LONG ParseIndex, void ** Tree) ;
All functions using the H_PARSE_TREE can be found in the header <LV_SRE_ParseTree.h>. The help documentation can be found in the LumenVox Speech Rec API help document.
Cast the void pointer to a H_PARSE_TREE Variable Type.
void* Tree;
LONG count;
LVCA_GetNumberOfSRGSParses(hCA, &count);
for(int i = 0; i < count; i++)
{
LVCA_GetParseTreeHandle(hCA, 1, tree)
H_PARSE_TREE ptree = (H_PARSE_TREE) Tree
PrintTags(ptree);
PrintTree(ptree);
LVParseTree_Release(ptree);
}
For the examples below the active grammar will be:
#ABNF 1.0;
language en-US;
mode voice;
tag-format <XML>; //a made up tag format.
root $PhoneNumber;
$Digit = one {1} | two {2} | three {3} | four {4} | five {5} |
six {6} | seven {7} | eight {8} | nine {9} | (zero | oh) {0};
$AreaCode = [area code | one] {<AREA_CODE>} $Digit<3> {</AREA_CODE>};
$PhoneNumber = [$AreaCode] {<PHONE>} $Digit<7> {</PHONE>};
And the decoded sentence will be "area code eight five eight seven oh seven oh seven oh seven"
void PrintTags(H_PARSE_TREE Tree)
{
H_PARSE_TREE_NODE N;
H_PARSE_TREE_ITR Itr;
char buffer[1024];
Itr = LVParseTree_CreateIteratorBegin(Tree);
for (; !LVParseTree_Iterator_IsPastEnd(Itr); LVParseTree_Iterator_Advance(Itr))
{
N = LVParseTree_Iterator_GetNode(Itr);
if(LVParseTree_Node_IsTag(N))
{
printf("%s ", LVParseTree_Node_GetLabel(N));
}
}
LVParseTree_Iterator_Release(Itr);
}
"<AREA_CODE> 8 5 8 </AREA_CODE> <PHONE> 7 0 7 0 7 0 7 </PHONE>"
void PrintNode(H_PARSE_TREE_NODE N)
{
H_PARSE_TREE_CHILDREN_ITR I;
int i;
for (i = 0; i < LVParseTree_Node_GetLevel(N); ++i)
printf(" ");
if (LVParseTree_Node_IsTerminal(N))
printf("\"%s\"\n",LVParseTree_Node_GetText(N));
if (LVParseTree_Node_IsTag(N))
printf("{ %s }\n",LVParseTree_Node_GetText(N));
if (LVParseTree_Node_IsRule(N))
{
printf("$%s:\n",LVParseTree_Node_GetRuleName(N));
I = LVParseTree_Node_CreateChildrenIterator(N);
while (!LVParseTree_ChildrenIterator_IsPastEnd(I))
{
PrintNode(LVParseTree_ChildrenIterator_GetNode(I));
LVParseTree_ChildrenIterator_Advance(I);
}
LVParseTree_ChildrenIterator_Release(I);
}
}
void PrintTree(H_PARSE_TREE Tree)
{
PrintNode(LVParseTree_GetRoot(Tree));
}
$PhoneNumber:
$AreaCode:
"AREA"
"CODE"
{ <AREA_CODE> }
$Digit:
"EIGHT"
{ 8 }
$Digit:
"FIVE"
{ 5 }
$Digit:
"EIGHT"
{ 8 }
{ </AREA_CODE> }
{ <PHONE> }
$Digit:
"SEVEN"
{ 7 }
$Digit:
"OH"
{ 0 }
$Digit:
"SEVEN"
{ 7 }
$Digit:
"OH"
{ 0 }
$Digit:
"SEVEN"
{ 7 }
$Digit:
"OH"
{ 0 }
$Digit:
"SEVEN"
{ 7 }
{ </PHONE> }
LumenVox Speech Rec API
LVParseTree C API Functions
LVParseTree_Node C API
Complete Help Topic List | Speech Platform Product Information