int DepPipe::readInstance(FILE *featFile, int length, MultiArray<FeatureVec> &fvs, MultiArray<double> &probs, MultiArray<FeatureVec> &fvs_trips, MultiArray<double> &probs_trips, MultiArray<FeatureVec> &fvs_sibs, MultiArray<double> &probs_sibs, MultiArray<FeatureVec> &nt_fvs, MultiArray<double> &nt_probs, FeatureVec &fv, string &actParseTree, const Parameter ¶ms) { // cerr << "read instance" << endl; // cerr << endl; vector<unsigned int> fvs_dim; unsigned int fvs_pos; MyVector<int> vecKeys; // Get production crap. for(int w1 = 0; w1 < length; w1++) { int w2 = w1 + 1; if (w2 >= length) continue; fvs.setDemisionVal(fvs_dim, w1, w2, 0); fvs.getElement(fvs_dim, fvs_pos); for(; w2 < length; w2++) { for(int ph = 0; ph < 2; ph++) { FeatureVec &prodFV = fvs.getElement(fvs_pos); ::readObject(featFile, vecKeys); // cerr << vecKeys.size() << " "; prodFV.setKeys(vecKeys); probs.getElement(fvs_pos) = params.getScore(prodFV); ++fvs_pos; } } // cerr << endl; } int last; ::readObject(featFile, last); if(last != -1) { cerr << "DepPipe::readInstance() Error reading file. -1" << endl; return -1; } // cerr << endl; if(options.m_isLabeled) { vector<unsigned int> nt_dim(4); unsigned int nt_pos; nt_fvs.setDemisionVal(nt_dim, 0, 0, 0, 0); nt_fvs.getElement(nt_dim, nt_pos); for(int w1 = 0; w1 < length; w1++) { for(int t = 0; t < m_vecTypes.size(); t++) { const string &type = m_vecTypes[t]; for(int ph = 0; ph < 2; ph++) { for(int ch = 0; ch < 2; ch++) { FeatureVec &prodFV = nt_fvs.getElement(nt_pos); ::readObject(featFile, vecKeys); prodFV.setKeys(vecKeys); // cerr << vecKeys.size() << " "; nt_probs.getElement(nt_pos) = params.getScore(prodFV); ++nt_pos; } } } // cerr << endl; } ::readObject(featFile, last); if(last != -2) { cerr << "DepPipe::readInstance() Error reading file.-2 vs. " << last << endl; return -1; } } // exit(0); ::readObject(featFile, vecKeys); fv.setKeys(vecKeys); ::readObject(featFile, last); if(last != -3) { cerr << "DepPipe::readInstance() Error reading file.-3 vs. " << last << endl; return -1; } MyVector<char> my_str; ::readObject(featFile, my_str); actParseTree = my_str.begin(); // cerr << actParseTree << endl; // cerr << actParseTree.size() << endl; ::readObject(featFile, last); if(last != -4) { cerr << "DepPipe::readInstance() Error reading file.-4 vs. " << last << endl; return -1; } return 0; }
void DepPipe::fillFeatureVectors(DepInstance *instance, MultiArray<FeatureVec> &fvs, MultiArray<double> &probs, MultiArray<FeatureVec> &fvs_trips, MultiArray<double> &probs_trips, MultiArray<FeatureVec> &fvs_sibs, MultiArray<double> &probs_sibs, MultiArray<FeatureVec> &nt_fvs, MultiArray<double> &nt_probs, const Parameter ¶ms) { int instanceLength = instance->size(); vector<unsigned int> fvs_dim(3); unsigned int fvs_pos; // Get production crap. int w1 = 0; for(; w1 < instanceLength; w1++) { int w2 = w1+1; if (w2 >= instanceLength) continue; fvs.setDemisionVal(fvs_dim, w1, w2, 0); fvs.getElement(fvs_dim, fvs_pos); for(; w2 < instanceLength; w2++) { int ph = 0; for(; ph < 2; ph++) { bool attR = ph == 0 ? true : false; addArcFeature(instance,w1,w2,attR, fvs.getElement(fvs_pos)); probs.getElement(fvs_pos) = params.getScore(fvs.getElement(fvs_pos)); vector<int> vecKeys; fvs.getElement(fvs_pos).getKeys(vecKeys); // cerr << vecKeys.size() << "\t"; ++fvs_pos; } } // cerr << endl; } if(options.m_isLabeled) { vector<unsigned int> nt_dim(4); unsigned int nt_pos; nt_fvs.setDemisionVal(nt_dim, 0, 0, 0, 0); nt_fvs.getElement(nt_dim, nt_pos); int w1 = 0; for(; w1 < instanceLength; w1++) { int t = 0; for(; t < m_vecTypes.size(); t++) { const string &type = m_vecTypes[t]; int ph = 0; for(; ph < 2; ph++) { bool attR = ph == 0 ? true : false; int ch = 0; for(; ch < 2; ch++) { bool child = ch == 0 ? true : false; addLabelFeature(instance, w1, type, child, attR, nt_fvs.getElement(nt_pos)); nt_probs.getElement(nt_pos) = params.getScore(nt_fvs.getElement(nt_pos)); vector<int> vecKeys; nt_fvs.getElement(nt_pos).getKeys(vecKeys); // cerr << vecKeys.size() << "\t"; ++nt_pos; } } } // cerr << endl; } } }