📄 linearclassifier.java
字号:
package edu.stanford.nlp.classify;import java.util.*;import java.text.*;import edu.stanford.nlp.util.*;import edu.stanford.nlp.dbm.*;/** @author Dan Klein */public class LinearClassifier implements Classifier { Counter weights = null; Set labels = null; Set labels() { return labels; } Set features() { Set features = new HashSet(); for (Iterator i=weights.seenSet().iterator(); i.hasNext();) { Pair p = (Pair)i.next(); features.add(p.first()); } return features; } public double weight(Object feature, Object label) { Pair p = new Pair(feature, label); return weights.countOf(p); } public Counter scoresOf(Datum example) { Counter scores = new Counter(); for (Iterator i=labels().iterator(); i.hasNext();) { Object l = i.next(); double score = 0.0; for (Iterator j=example.asFeatures().iterator(); j.hasNext();) { Object f = j.next(); score += weight(f, l); } scores.setCount(l, score); } return scores; } public void dump() { Datum allFeatures = new BasicDatum(features(), new String("")); justificationOf(allFeatures); } public void justificationOf(Datum example) { int featureLength = 0; int labelLength = 6; NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMinimumFractionDigits(2); nf.setMaximumFractionDigits(2); if (nf instanceof DecimalFormat) ((DecimalFormat)nf).setPositivePrefix(" "); for (Iterator j=example.asFeatures().iterator(); j.hasNext();) { Object f = j.next(); featureLength = Math.max(featureLength, f.toString().length()); } for (Iterator i=labels().iterator(); i.hasNext();) { Object l = i.next(); labelLength = Math.max(labelLength, l.toString().length()); } StringBuffer header = new StringBuffer(""); for (int s=0; s<featureLength; s++) { header.append(' '); } for (Iterator i=labels().iterator(); i.hasNext();) { Object l = i.next(); header.append(' '); String str = l.toString(); header.append(str); for (int s=str.length(); s<labelLength; s++) header.append(' '); } System.out.println(header); for (Iterator j=example.asFeatures().iterator(); j.hasNext();) { Object f = j.next(); String fStr = f.toString(); StringBuffer line = new StringBuffer(fStr); for (int s=fStr.length(); s<featureLength; s++) { line.append(' '); } for (Iterator i=labels().iterator(); i.hasNext();) { Object l = i.next(); String lStr = nf.format(weight(f, l)); line.append(' '); line.append(lStr); for (int s=lStr.length(); s<labelLength; s++) { line.append(' '); } } System.out.println(line); } Counter scores = scoresOf(example); StringBuffer footer = new StringBuffer("Total:"); for (int s=footer.length(); s<featureLength; s++) { footer.append(' '); } for (Iterator i=labels().iterator(); i.hasNext();) { Object l = i.next(); footer.append(' '); String str = nf.format(scores.countOf(l)); footer.append(str); for (int s=str.length(); s<labelLength; s++) footer.append(' '); } System.out.println(footer); } public Object classOf(Datum example) { Counter scores = scoresOf(example); return scores.argmax(); } Set extractLabels(Counter c) { Set s = new HashSet(); for (Iterator i=c.seenSet().iterator(); i.hasNext();) { Pair p = (Pair)i.next(); Object l = p.second(); s.add(l); } return s; } public LinearClassifier(Counter weights) { this.weights = weights; this.labels = extractLabels(weights); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -