"Getting Results from Exampleset in Java"
maxfax
New Altair Community Member
Hi,
I created a Process which calculates the Crossdistance between 1 single document and an Excelfile. The Process works fine and is properly executed in my Javaprogramm. Now i would like to get the Results or the Values of the 5 closest Documents to my Document out of the Exampleset. I understood that by the following code I can get the Examplesetresults. But how do i get the Values.
Thank you very much for you Help !
I created a Process which calculates the Crossdistance between 1 single document and an Excelfile. The Process works fine and is properly executed in my Javaprogramm. Now i would like to get the Results or the Values of the 5 closest Documents to my Document out of the Exampleset. I understood that by the following code I can get the Examplesetresults. But how do i get the Values.
I attached a picture of which values i would like to get in my Program.
IOContainer ioResult = rm5.run();
ExampleSet resultSet = (ExampleSet) ioResult.getElementAt(1);
Thank you very much for you Help !
0
Answers
-
This might help: https://github.com/aborg0/rapidminer-integration-knime/blob/master/com.mind_era.knime_rapidminer.knime.nodes.local/src/com/mind_era/knime_rapidminer/knime/nodes/RapidMinerNodeModel.java#L273
Just in case it will move along here is a copy of it:for (Example example : result) {
final DataRow row = example.getDataRow();
++i;
if (i > result.size()) {
break;
}
final Function<Attribute, DataCell> transformFunction = new Function<Attribute, DataCell>() {
@Override
public DataCell apply(final Attribute a) {
final double d = row.get(a);
if (a.isNominal()) {
return Double.isNaN(d) ? DataType.getMissingCell()
: new StringCell(a.getMapping().mapIndex(
(int) d));
}
if (a.getValueType() == Ontology.INTEGER) {
return Double.isNaN(d) ? DataType.getMissingCell()
: new IntCell((int) d);
}
if (a.getValueType() == Ontology.DATE) {
return new DateAndTimeCell((long) d, true, false,
false);
}
if (a.getValueType() == Ontology.DATE_TIME) {
final long utc = (long) d;
final boolean hasDate = utc >= 24L * 3600 * 1000
|| utc < 0;
return new DateAndTimeCell(utc, hasDate, !hasDate,
!hasDate);
}
if (a.getValueType() == Ontology.TIME) {
return new DateAndTimeCell((long) d, false, true,
true);
}
if (a.isNumerical()) {
return new DoubleCell(d);
}
return DataType.getMissingCell();
}
};
dataContainer.addRowToTable(new DefaultRow(attribsEntry
.getValue() == null ? String.valueOf(i)
: ((org.knime.core.data.StringValue) transformFunction
.apply(attribsEntry.getValue()))
.getStringValue(), Iterables.toArray(
Iterables.transform(attribs, transformFunction),
DataCell.class)));
}0 -
Thank you very much ! But is there really now easier way to read Data out of Examplesets ? I know that the values are going to be doubles and i also know the Names of the Attributes . But right know I dont really know how to declare the Attributes correctly,
thank you very much0 -
So Basically what i am trying to get is a working method so i can store the data from the data view in the rapidminer gui into an integer value or string value in my java programm.
I am sure there must be an easy way to do it since its an common idea to further use the results calculated with rapidminer.
Thank you very much for your help !0 -
Hello maxfax,
you can sort ExampleSet by operator "Sort" and that select only the first five by operator "Filter Example Range".
You can get values in java this way:
Best,
ExampleSet es = (ExampleSet) ioResult.getElementAt(1);
Attributes ats = es.getAttributes();
double[] dataRow = new double[ats.size()];
for (Example example : es) {
int i = 0;
for (Attribute attribute : ats) {
dataRow = example.getValue(attribute);
i++;
}
//TODO operation with one dataRow = example
}
Václav0 -
Thank you very much !!
THis was exactly what I needed thx !! ;D0