📄 okcsaver.java
字号:
package chen.macroweka.core.converters;
import weka.core.*;
import chen.macroweka.filters.unsupervised.instance.RemoveMissingValues;
import weka.filters.Filter;
import java.io.*;
/**
* Implementation of class
*
*/
public class OKCSaver extends AbstractSaver
{
private String m_fileStem;
private File m_destMetaFile;
private BufferedWriter m_metaWriter;
private File m_destDataFile;
private BufferedWriter m_dataWriter;
private boolean m_isStructureWritten = false;
/**
* Default implementation throws an IOException.
*
* @param file the File
* @throws java.io.IOException always
*/
public void setDestination(File file) throws IOException
{
if ( file == null ) {
throw new IOException( "Destination file object is null!" );
}
String fname = file.getName();
String fileStem;
String path = file.getParent();
if ( path != null ) {
path += File.separator;
} else {
path = "";
}
if ( fname.indexOf( '.' ) < 0 ) {
fileStem = fname;
fname += ".meta";
} else {
fileStem = fname.substring( 0, fname.indexOf( '.' ) );
fname = fileStem + ".meta";
}
m_fileStem = fileStem;
file = new File( path + fname );
m_destMetaFile = file;
try {
BufferedWriter bw = new BufferedWriter( new FileWriter( m_destMetaFile ) );
m_metaWriter = bw;
} catch (FileNotFoundException ex) {
throw new IOException( "File not found : " + ( path + fname ) );
}
m_destDataFile = new File( path + fileStem + ".okc" );
try {
BufferedWriter bw = new BufferedWriter( new FileWriter( m_destDataFile ) );
m_dataWriter = bw;
} catch (FileNotFoundException ex) {
throw new IOException( "File not found : " + ( path + fname ) );
}
}
/**
* Saves the structure (internally the header) of the data set.
*
* @param instances the set of Instances
* @throws java.io.IOException if there is no source or saving fails
*/
public void saveStructure(Instances structure) throws IOException
{
if ( m_destDataFile == null ) {
throw new IOException( "No destination has been specified" );
}
if ( m_metaWriter != null ) {
writeHeaderToMeta(structure);
}
writeHeaderToOKC(structure);
m_isStructureWritten = true;
}
private void writeHeaderToOKC(Instances structure) throws IOException
{
m_dataWriter.write(structure.numAttributes() + " " +
structure.numInstances() + "\n");
for (int i=0; i<structure.numAttributes(); ++i) {
Attribute attr = structure.attribute( i );
m_dataWriter.write(attr.name() + "\n");
}
for (int i=0; i<structure.numAttributes(); ++i) {
AttributeStats as = structure.attributeStats( i );
if (as.numericStats != null) {
m_dataWriter.write(Utils.doubleToString( as.numericStats.min, 3 ) + " " +
Utils.doubleToString( as.numericStats.max, 3 ) + " " +
"1\n");
} else {
m_dataWriter.write(Utils.doubleToString( 0, 3 ) + " " +
Utils.doubleToString( as.distinctCount-1, 3 ) + " " +
"1\n");
}
}
}
private void writeHeaderToMeta(Instances structure) throws IOException
{
m_metaWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
m_metaWriter.write("<okcmeta>\n");
m_metaWriter.write("\t<dimensions value=\"" + structure.numAttributes() +
"\" />\n");
m_metaWriter.write("\t<datapoints value=\"" + structure.numInstances() +
"\" />\n");
for (int i=0; i<structure.numAttributes(); ++i)
{
Attribute attr = structure.attribute( i );
m_metaWriter.write("\t<dimension name=\"" + attr.name() +
"\" type=");
switch (attr.type()) {
case Attribute.NUMERIC:
m_metaWriter.write("\"real\" />\n");
break;
case Attribute.NOMINAL:
m_metaWriter.write("\"word\" >\n");
for (int v=0; v<attr.numValues(); ++v)
{
m_metaWriter.write( "\t\t<value scale=\"" + v + "\">\n" );
m_metaWriter.write( "\t\t" + attr.value(v) + "\n" );
m_metaWriter.write( "\t\t</value>\n" );
}
m_metaWriter.write("\t</dimension>\n");
break;
case Attribute.STRING:
m_metaWriter.write("\"string\" >\n");
for (int v=0; v<attr.numValues(); ++v)
{
m_metaWriter.write( "\t\t<value scale=\"" + v + "\">\n" );
m_metaWriter.write( "\t\t" + attr.value(v) + "\n" );
m_metaWriter.write( "\t\t</value>\n" );
}
m_metaWriter.write("\t</dimension>\n");
break;
default:
throw new IllegalStateException("Cannot save to this attribute type");
}
m_metaWriter.write("\n");
}
m_metaWriter.write("</okcmeta>\n");
}
/**
* Save the full data set.
*
* @param instances the full data set as an Instances object
* @throws java.io.IOException if there is an error during saving
*/
public void saveDataSet(Instances instances) throws Exception
{
if ( m_destDataFile == null ) {
throw new IOException( "No source has been specified" );
}
RemoveMissingValues remMissFilter = new RemoveMissingValues();
remMissFilter.setInputFormat( instances );
try {
instances = Filter.useFilter( instances, remMissFilter );
} catch (Exception e) {
e.printStackTrace();
throw e;
}
if ( !m_isStructureWritten ) {
saveStructure(instances);
}
// save instances
StringBuffer text = new StringBuffer();
for (int i=0; i<instances.numInstances(); ++i)
{
Instance inst = instances.instance( i );
for (int j = 0; j < instances.numAttributes(); ++j)
{
if (j > 0) text.append(" ");
text.append(inst.value(j));
}
text.append("\n");
}
m_dataWriter.write(text.toString());
}
public void endSave() throws IOException
{
if (m_dataWriter != null)
m_dataWriter.close();
if (m_metaWriter != null)
m_metaWriter.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -