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

📄 operator.java

📁 一个很好的LIBSVM的JAVA源码。对于要研究和改进SVM算法的学者。可以参考。来自数据挖掘工具YALE工具包。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
     *    <li><b>$$</b> with $</li>
     *  </ul>
     *  Returns null if str is null.
     */
    private String expandString(String str) {
	if (str == null) return null;
	StringBuffer result = new StringBuffer();
	int start = 0;
	int end = 0;
	while ((end = str.indexOf('%', start)) >= 0) {
	    result.append(str.substring(start, end));
	    if (end+1 < str.length()) {
		switch (str.charAt(end+1)) {
		case 'n': result.append(getName()); break;
		case 'c': result.append(getClass().getName()); break;
		case 'a': result.append(applyCount); break;
		case 'b': result.append(applyCount + 1); break;
		case 't': result.append(java.text.DateFormat.getDateTimeInstance().format(new java.util.Date())); break;
		case '%': result.append('%'); break;
		default: result.append(str.charAt(end+1)); break;
		}
	    }
	    start = end+2;
	}
	result.append(str.substring(start));
	return result.toString();
    }

    // --------------------------------------------------------------------------------

    /** Returns a list of <tt>ParameterTypes</tt> describing the parameters of this operator. 
     *  The default implementation returns an empty list. */
    public List getParameterTypes() { return new ArrayList(); }

    /** Writes the XML representation of this operator. */
    public void writeXML(PrintWriter out, String indent) throws IOException {
	out.println(getXML(indent));
    }

    /** Returns the XML representation of this operator. */
    public String getXML(String indent) {	
	StringBuffer result = new StringBuffer();
	String breakpointString = "";
	if (breakPoint[BREAKPOINT_BEFORE] && breakPoint[BREAKPOINT_AFTER]) breakpointString = " breakpoints=\"both\"";
	else if (breakPoint[BREAKPOINT_BEFORE]) breakpointString = " breakpoints=\"before\"";
	else if (breakPoint[BREAKPOINT_AFTER]) breakpointString = " breakpoints=\"after\"";
	result.append(indent + "<operator "+
		      "name=\""+name+"\" "+
		      "class=\""+OperatorService.getOperatorClassName(this.getClass())+"\""+
		      breakpointString +
		      (!enabled ? " activated=\"no\"" : "") + 
		      ">\n");
	if ((userDescription != null) && (userDescription.length() != 0))
	    result.append(indent + "  <description text=\"" + userDescription + "\"/>\n");
	result.append(parameters.getXML(indent+"  "));
	result.append(getInnerOperatorsXML(indent+"  "));
	result.append(indent + "</operator>\n");
	return result.toString();
    }

    /** Writes the XML representation of the inner operators. Since an Operator does not have any
     *  inner operators, the default implementation does nothing. Implemented by <tt>OperatorChain</tt>. */
    protected String getInnerOperatorsXML(String indent) { return ""; }
	
    /** Sets or clears a breakpoint at the given position. 
     *  @param position One out of BREAKPOINT_BEFORE and BREAKPOINT_AFTER */
    public void setBreakpoint(int position, boolean on) {
	breakPoint[position] = on;
    }

    /** Returns true iff a breakpoint is set at the given position
     *  @param position One out of BREAKPOINT_BEFORE and BREAKPOINT_AFTER */
    public boolean hasBreakpoint(int position) {
	return breakPoint[position];
    }

    /** Clears the list of errors. 
     *  @see #addError(String) */
    public void clearErrorList() {
	errorList.clear();
    }

    /** Adds an error message. 
     *  @see #getErrorList() */
    public void addError(String message) {
	LogService.logMessage(this.getName()+": " + message, LogService.ERROR);
	errorList.add(message);
    }

    /** Returns a List of Strings containing error messages.
     *  @see #addError(String) */
    public List getErrorList() {
	return errorList;
    }

    /** Returns the system time when the operator was started. */
    public long getStartTime() {
	return startTime;
    }

    /** Convenience method for logging a message prefixed by the operator name. 
     *  @see LogService */
    public void logMessage(String message, int verbosityLevel) {
	LogService.logMessage(getName()+": "+message, verbosityLevel);
    }

    private static String createDescriptionFromXML(Element element) throws XMLException {
	Attr textAttr = element.getAttributeNode("text");
	if (textAttr == null) throw new XMLException("Attribute 'text' of <description> tag is not set.");
	if (element.getChildNodes().getLength() > 0) throw new XMLException("No inner tags allowed for <description>");
	return textAttr.getValue();
    }

    private static Object[] createParameterFromXML(Element element) throws XMLException {
	Attr keyAttr = element.getAttributeNode("key");
	Attr valueAttr = element.getAttributeNode("value");
	if (keyAttr == null) throw new XMLException("Attribute 'key' of <parameter> tag is not set.");
	if (valueAttr == null) throw new XMLException("Attribute 'value' of <parameter> tag is not set.");
	if (element.getChildNodes().getLength() > 0) throw new XMLException("No inner tags allowed for <parameter>");
	return new Object[] { keyAttr.getValue(), valueAttr.getValue() };
    }

    private static Object[] createParameterListFromXML(Element element) throws XMLException {
	LinkedList values = new LinkedList();
	Attr keyAttr = element.getAttributeNode("key");
	if (keyAttr == null) throw new XMLException("Attribute 'key' of <list> tag is not set.");
	NodeList children = element.getChildNodes();
	for (int i = 0; i < children.getLength(); i++) {
	    Node node = children.item(i);
	    if (node instanceof Element) {
		Element inner = (Element)node;
		if (inner.getTagName().toLowerCase().equals("parameter")) {
		    values.add(createParameterFromXML(inner));
		} else if (inner.getTagName().toLowerCase().equals("list")) {
		    values.add(createParameterListFromXML(inner));
		} else {
		    throw new XMLException("Ilegal inner tag for <list>: "+inner.getTagName());
		}
	    }
	}
	return new Object[] { keyAttr.getValue(), values };
    }

    public static Operator createFromXML(Element element, Experiment experiment) throws XMLException {
	if (!element.getTagName().toLowerCase().equals("operator")) {
	    throw new XMLException("<operator> expected!"); 
	}

	String className        = null;
	String name             = null;
	String breakpointString = null;
	String activationString = null;

	Attr classAttr = element.getAttributeNode("class");
	if (classAttr != null) {
	    className = classAttr.getValue();
	} else {
	    throw new XMLException("Attribute 'class' of <operator> tag is not defined! ");
	}
	Attr nameAttr = element.getAttributeNode("name");
	if (nameAttr != null) {
	    name = nameAttr.getValue();
	} else {
	    throw new XMLException("Attribute 'name' of <operator> tag is not defined! ");
	}
	Attr breakpointAttr = element.getAttributeNode("breakpoints");
	if (breakpointAttr != null) {
	    breakpointString = breakpointAttr.getValue();
	}
	Attr activationAttr = element.getAttributeNode("activated");
	if (activationAttr != null) {
	    activationString = activationAttr.getValue();
	} 

	Class  opClass = (Class)OperatorService.getOperatorClass(className);
	if (opClass == null)  throw new XMLException("Unknown operator class: '" + className + "'!");
	Operator operator = null;
	try {
	    operator = (Operator)opClass.newInstance();
	} catch (InstantiationException e) {
	    throw new XMLException("Cannot instantiate '"+className+"'!", e);
	} catch (IllegalAccessException e) {
	    throw new XMLException("Cannot access '"+className+"'!", e);
	}

	if (breakpointString != null) {
	    if (breakpointString.equals("both")) {
		operator.setBreakpoint(BREAKPOINT_BEFORE, true);
		operator.setBreakpoint(BREAKPOINT_AFTER, true);
	    } else if (breakpointString.equals("before")) {
		operator.setBreakpoint(BREAKPOINT_BEFORE, true);
	    } else if (breakpointString.equals("after")) {
		operator.setBreakpoint(BREAKPOINT_AFTER, true);
	    } else {
		throw new XMLException("Breakpoint `"+breakpointString+"` is not defined!");
	    }
	}

	if (activationString != null) {
	    if (activationString.equals("no")) operator.setEnabled(false);
	    else if (activationString.equals("yes")) operator.setEnabled(true);
	    else {
		throw new XMLException("Activation mode `"+activationString+"` is not defined!");
	    }
	}

 	operator.register(experiment, name);


	NodeList innerTags = element.getChildNodes();
	for (int i = 0; i < innerTags.getLength(); i++) {
	    Node node = innerTags.item(i);
	    if (node instanceof Element) {
		Element inner = (Element)node;
		if (inner.getTagName().toLowerCase().equals("parameter")) {
		    Object[] parameter = createParameterFromXML(inner);
		    operator.getParameters().setParameter((String)parameter[0], parameter[1]);
		} else if (inner.getTagName().toLowerCase().equals("list")) {
		    Object[] parameter = createParameterListFromXML(inner);
		    operator.getParameters().setParameter((String)parameter[0], parameter[1]);
		} else if (inner.getTagName().toLowerCase().equals("operator")) {
		    if (operator instanceof OperatorChain) {
			((OperatorChain)operator).addOperator(createFromXML(inner, experiment));
		    } else {
			throw new XMLException("No inner operators allowed for '"+className+"'");
		    }
		} else if (inner.getTagName().toLowerCase().equals("description")) {
		    String description = createDescriptionFromXML(inner);
		    operator.setUserDescription(description);
		} else {
		    throw new XMLException("Ilegal inner tag for <operator>: "+inner.getTagName());
		}
	    }
	}

	if (operator instanceof OperatorChain) {
	    OperatorChain chain = (OperatorChain)operator;
	    if (chain.getNumberOfOperators() < chain.getMinNumberOfInnerOperators()) {
		LogService.logMessage("Less than " + chain.getMinNumberOfInnerOperators() + " inner operators for " + chain.getName() + "!",
				      LogService.WARNING);
	    }
	    if (chain.getNumberOfOperators() > chain.getMaxNumberOfInnerOperators()) {
		LogService.logMessage("More than " + chain.getMaxNumberOfInnerOperators() + " inner operators for " + chain.getName() + "!",
				      LogService.WARNING);
	    }
	}
	return operator;
    }

    /** Returns true iff <code>o</code> is an operator of equal class and its name, parameters,
     *  and inner operators are equal to the ones of this operator. */
    public boolean configurationEquals(Object o) {
	if (!this.getClass().equals(o.getClass())) {
	    return false;
	}
	Operator op = (Operator)o;
	return 
	    this.name.equals(op.name) &&
	    this.parameters.equals(op.parameters);
    }
}

⌨️ 快捷键说明

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