Recursive Descent Parser
public static function generateParseUsingRDP($tagger_array){
$tree = ["cur_node" => 0]; $tree_np = Extractor::extractNPUsingRDP($tagger_array,$tree); $tree = ["cur_node" => $tree_np['cur_node']]; $tree_vp = Extractor::extractVPUsingRDP($tagger_array,$tree); $tree['cur_node'] = $tree_vp['cur_node']; unset($tree_np['cur_node']); unset($tree_vp['cur_node']); $tree['NP'] = $tree_np['NP']; $tree['VP'] = $tree_vp['VP']; array_walk_recursive($tree, 'Extractor::test_print'); print_r($tree);
}
public static function extractNPUsingRDP($tagger_array,$tree){
$NP = $tree['cur_node']; $tree_dt = ['cur_node' => $NP]; $tree_dt = Extractor::extractDTUsingRDP($tagger_array,$tree_dt); $tree_jj = ['cur_node' => $tree_dt['cur_node']]; $tree_jj = Extractor::extractJJUsingRDP($tagger_array,$tree_jj); $tree_nn = ['cur_node' => $tree_jj['cur_node']]; $tree_nn = Extractor::extractNNUsingRDP($tagger_array,$tree_nn); if($NP == $tree_nn['cur_node']){
echo "No NP found"."<br/>";
}else{
$cur_node = $tree_nn['cur_node']; unset($tree_dt['cur_node']); $tree_new_sub['DT'] = $tree_dt; unset($tree_jj['cur_node']); $tree_new_sub['JJ'] = $tree_jj; unset($tree_nn['cur_node']); $tree_new_sub['NN'] = $tree_nn; $tree_new['cur_node'] = $cur_node; $tree_new['NP'] = $tree_new_sub; return $tree_new;
} return $tree;
}
public static function extractDTUsingRDP($tagger_array,$tree){
if("DT" == $tagger_array[$tree['cur_node']]['tag']){
echo "DT Found<br/>"; $tree['DT'] = $tagger_array[$tree['cur_node']]['token']; $tree['cur_node'] = $tree['cur_node'] + 1; return $tree;
} return $tree;
}
public static function extractJJUsingRDP($tagger_array,$tree){
if("JJ" == $tagger_array[$tree['cur_node']]['tag']){
$tree['JJ'] = $tagger_array[$tree['cur_node']]['token']; $tree['cur_node'] = $tree['cur_node'] + 1; return $tree;
} return $tree;
}
public static function extractNNUsingRDP($tagger_array,$tree){
if("NNP" == $tagger_array[$tree['cur_node']]['tag'] || "NN" == $tagger_array[$tree['cur_node']]['tag'] || "PRP" == $tagger_array[$tree['cur_node']]['tag']){
$tree['NNP'] = $tagger_array[$tree['cur_node']]['token']; $tree['cur_node'] = $tree['cur_node'] + 1; return $tree;
} return $tree;
}
public static function extractVPUsingRDP($tagger_array,$tree){
$VP = $tree['cur_node']; $tree_vp = ['cur_node' => $VP]; $tree_vb = ['cur_node' => $tree_vp['cur_node']]; $tree_vb = Extractor::extractVBUsingRDP($tagger_array,$tree_vb); if($VP == $tree_vb['cur_node']){
echo "No VB found"."<br/>";
} $tree_np = ['cur_node' => $tree_vb['cur_node']]; $tree_np = Extractor::extractNPUsingRDP($tagger_array,$tree_np); if($VP == $tree_np['cur_node']){
echo "No VP found"."<br/>";
}else{
$cur_node = $tree_np['cur_node']; unset($tree_vb['cur_node']); unset($tree_np['cur_node']); $tree_new_sub['VB'] = $tree_vb; $tree_new_sub['NP'] = $tree_np['NP']; $tree_new['cur_node'] = $cur_node; $tree_new['VP'] = $tree_new_sub; return $tree_new;
}
return $tree;
}
public static function extractVBUsingRDP($tagger_array,$tree){
if("VB" == $tagger_array[$tree['cur_node']]['tag'] || "VBD" == $tagger_array[$tree['cur_node']]['tag'] || "VBG" == $tagger_array[$tree['cur_node']]['tag'] || "VBN" == $tagger_array[$tree['cur_node']]['tag'] || "VBP" == $tagger_array[$tree['cur_node']]['tag'] || "VBZ" == $tagger_array[$tree['cur_node']]['tag'] ){
$tree['VB'] = $tagger_array[$tree['cur_node']]['token']; $tree['cur_node'] = $tree['cur_node'] + 1; return $tree;
} return $tree;
} |