Example usage for weka.core.xml XStream read

List of usage examples for weka.core.xml XStream read

Introduction

In this page you can find the example usage for weka.core.xml XStream read.

Prototype

public static Object read(Reader r) throws Exception 

Source Link

Document

reads the XML-serialized object from the given Reader

Usage

From source file:org.pentaho.di.scoring.WekaScoringData.java

License:Open Source License

/**
 * Loads a serialized model. Models can either be binary serialized Java
 * objects, objects deep-serialized to xml, or PMML.
 *
 * @param modelFile a <code>File</code> value
 * @return the model/*from  w  w  w  . j  a  va 2s.  com*/
 * @throws Exception if there is a problem laoding the model.
 */
public static WekaScoringModel loadSerializedModel(String modelFile, LogChannelInterface log,
        VariableSpace space) throws Exception {

    Object model = null;
    Instances header = null;
    int[] ignoredAttsForClustering = null;

    modelFile = space.environmentSubstitute(modelFile);
    FileObject modelF = KettleVFS.getFileObject(modelFile);
    if (!modelF.exists()) {
        throw new Exception(BaseMessages.getString(WekaScoringMeta.PKG,
                "WekaScoring.Error.NonExistentModelFile", space.environmentSubstitute(modelFile))); //$NON-NLS-1$
    }

    InputStream is = KettleVFS.getInputStream(modelF);
    BufferedInputStream buff = new BufferedInputStream(is);

    if (modelFile.toLowerCase().endsWith(".xml")) { //$NON-NLS-1$
        // assume it is PMML
        model = PMMLFactory.getPMMLModel(buff, null);

        // we will use the mining schema as the instance structure
        header = ((PMMLModel) model).getMiningSchema().getMiningSchemaAsInstances();

        buff.close();
    } else if (modelFile.toLowerCase().endsWith(".xstreammodel")) { //$NON-NLS-1$
        log.logBasic(BaseMessages.getString(WekaScoringMeta.PKG, "WekaScoringData.Log.LoadXMLModel")); //$NON-NLS-1$

        if (XStream.isPresent()) {
            Vector v = (Vector) XStream.read(buff);

            model = v.elementAt(0);
            if (v.size() == 2) {
                // try and grab the header
                header = (Instances) v.elementAt(1);
            }
            buff.close();
        } else {
            buff.close();
            throw new Exception(
                    BaseMessages.getString(WekaScoringMeta.PKG, "WekaScoringData.Error.CantLoadXMLModel")); //$NON-NLS-1$
        }
    } else {
        InputStream stream = buff;
        if (modelFile.toLowerCase().endsWith(".gz")) { //$NON-NLS-1$
            stream = new GZIPInputStream(buff);
        }
        ObjectInputStream oi = new ObjectInputStream(stream);

        model = oi.readObject();

        // try and grab the header
        header = (Instances) oi.readObject();

        if (model instanceof weka.clusterers.Clusterer) {
            // try and grab any attributes to be ignored during clustering
            try {
                ignoredAttsForClustering = (int[]) oi.readObject();
            } catch (Exception ex) {
                // Don't moan if there aren't any :-)
            }
        }
        oi.close();
    }

    WekaScoringModel wsm = WekaScoringModel.createScorer(model);
    wsm.setHeader(header);
    if (wsm instanceof WekaScoringClusterer && ignoredAttsForClustering != null) {
        ((WekaScoringClusterer) wsm).setAttributesToIgnore(ignoredAttsForClustering);
    }

    wsm.setLog(log);
    return wsm;
}

From source file:reactivetechnologies.sentigrade.dto.ClassifiedModel.java

License:Open Source License

@SuppressWarnings("unchecked")
public T readModel(InputStream stream) throws Exception {
    return (T) XStream.read(stream);
}