Ejemplo n.º 1
0
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 &params)
{
	//	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;
}
Ejemplo n.º 2
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 &params)
{
	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;
		}
	}		
}