⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 featurevector.java

📁 MSTParser是以最大生成树理论为基础的判别式依存句法分析器。它将一科依存树的得分看作是 所有依存关系的得分的总和
💻 JAVA
字号:
package mstparser;import gnu.trove.*;import java.util.*;public class FeatureVector {    public int index;    public double value;    public FeatureVector next;	    public FeatureVector(int i, double v, FeatureVector n) {	index = i;	value = v;	next = n;    }    public static FeatureVector cat(FeatureVector fv1, FeatureVector fv2) {	FeatureVector result = new FeatureVector(-1,-1.0,null);	for(FeatureVector curr = fv1; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    result = new FeatureVector(curr.index,curr.value,result);	}	for(FeatureVector curr = fv2; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    result = new FeatureVector(curr.index,curr.value,result);	}	return result;		    }    // fv1 - fv2    public static FeatureVector getDistVector(FeatureVector fv1, FeatureVector fv2) {	FeatureVector result = new FeatureVector(-1,-1.0,null);	for(FeatureVector curr = fv1; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    result = new FeatureVector(curr.index,curr.value,result);	}	for(FeatureVector curr = fv2; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    result = new FeatureVector(curr.index,-curr.value,result);	}	return result;    }	    public static double dotProduct(FeatureVector fv1, FeatureVector fv2) {	double result = 0.0;	TIntDoubleHashMap hm1 = new TIntDoubleHashMap();	TIntDoubleHashMap hm2 = new TIntDoubleHashMap();	for(FeatureVector curr = fv1; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    hm1.put(curr.index,hm1.get(curr.index)+curr.value);	}	for(FeatureVector curr = fv2; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    hm2.put(curr.index,hm2.get(curr.index)+curr.value);	}	int[] keys = hm1.keys();	for(int i = 0; i < keys.length; i++) {	    double v1 = hm1.get(keys[i]);	    double v2 = hm2.get(keys[i]);	    result += v1*v2;	}			return result;		    }    public static double oneNorm(FeatureVector fv1) {	double sum = 0.0;	for(FeatureVector curr = fv1; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    sum += curr.value;	}	return sum;    }	    public static double twoNorm(FeatureVector fv1) {	TIntDoubleHashMap hm = new TIntDoubleHashMap();	double sum = 0.0;	for(FeatureVector curr = fv1; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    hm.put(curr.index,hm.get(curr.index)+curr.value);	}	int[] keys = hm.keys();	for(int i = 0; i < keys.length; i++)	    sum += Math.pow(hm.get(keys[i]),2.0);			return Math.sqrt(sum);    }    public static FeatureVector twoNormalize(FeatureVector fv1) {	double norm = twoNorm(fv1);	FeatureVector result = new FeatureVector(-1,-1.0,null);	for(FeatureVector curr = fv1; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    result = new FeatureVector(curr.index,curr.value/norm,result);	}	return result;    }    public String toString() {	if(next == null)	    return ""+index;	return index + " " + next.toString();    }    public int sum() {	if(next == null)	    return index >= 0 ? 1 : 0;	return (index >= 0 ? 1 : 0) + next.sum();    }    public void sort() {	int[] feats = new int[sum()];	int j = 0;	for(FeatureVector curr = this; curr.next != null; curr = curr.next) {	    if(curr.index < 0)		continue;	    feats[j] = curr.index;	    j++;	}	Arrays.sort(feats);	FeatureVector result = new FeatureVector(-1,-1.0,null);	for(int i = feats.length-1; i >= 0; i--)	    result = new FeatureVector(feats[i],1.0,result);	this.index = result.index; this.value = result.value; this.next = result.next;    }	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -