Ejemplo n.º 1
0
int
tree_ngram(TreeHist* treeh, int n, int l)
{
    static int stopTermInt = -1;
    if(stopTermInt < 0)
    {
        ECString stopStr("STOP");
        const Term* stopTerm = Term::get(stopStr);
        stopTermInt = stopTerm->toInt();
    }

    int pos = treeh->pos;
    int hp = treeh->hpos;
    int m = pos + (n * l);
    if(m < 0) return stopTermInt;
    InputTree* tree = treeh->tree;
    if(m >= tree->subTrees().size()) return stopTermInt;
    if(m > hp && l > 0) return stopTermInt;
    InputTree  *subTree;
    InputTreesIter  subTreeIter = tree->subTrees().begin();
    int i = 0;
    for( ; subTreeIter != tree->subTrees().end() ; subTreeIter++ )
    {
        if(i == m)
        {
            subTree = *subTreeIter;
            const Term* trm = Term::get(subTree->term());
            return trm->toInt();
        }
        i++;
    }
    assert("should never get here");
    return -1;
}
Ejemplo n.º 2
0
void
addSubFeatureFns()
{
  /*
    0 t  tree_term
    1 l  tree_parent_term
    2 u  tree_pos
    3 h  tree_head
    4 i  tree_parent_head
    5 T  tree_true
    6 v  tree_parent_pos
    7 b  tree_term_before
    8 mE tree_mE
    //8 a  tree_term_after
    9 m  tree_grandparent_term
    10 w tree_grandparent_pos
    11 j tree_ruleHead_third  
    12 c tree_ccparent_term
    13 L1 tree_left1
    14 L2 tree_left2
    15 R1 tree_right1
    16 R2 tree_right2
    17 Qr tree_noopenQr
    18 L0 tree_left0;
    19 L3 tree_left3
    20 R3 tree_right3
    21 Ql tree_noopenQl
    22 Bl tree_Bl
    23 Br tree_Br
    24 vE tree_vE
    //25 E  tree_E
    25 w1 tree_w1
    26 w2 tree_w2
    */
  int (*funs[27])(TreeHist*)
    = {tree_term, tree_parent_term, tree_pos, tree_head, tree_parent_head,
       tree_true, tree_parent_pos, tree_term_before,
       tree_mE, tree_grandparent_term, tree_grandparent_pos,
       tree_ruleHead_third, tree_ccparent_term,
       tree_left1, tree_left2, tree_right1, tree_right2, tree_noopenQr,
       tree_left0, tree_left3, tree_right3,tree_noopenQl,tree_Bl,tree_Br,
       tree_vE, tree_w1, tree_w2 
    };
  int i;
  for(i = 0 ; i < 27 ; i++)
      SubFeature::Funs[i] = funs[i];
  string stopStr("STOP");
  const Term* stopTerm = Term::get(stopStr);
  stopTermInt = stopTerm->toInt();
  ECString wrdm = "^^";
  const WordInfo* wmi = Pst::get(wrdm);
  cout << "wrdm: " << wrdm << endl;
  assert(wmi);
  int ans = wmi->toInt();
  nullWordInt = ans;
}