RapidMiner Integration in Java Application

I have a text classification process in RapidMiner. It reads the test data from the specified excel table and performs the classification. I also have a small Java application that just launches this process. Now I want to do part of the file input in my application, so every time I could specify the excel file from my application (and not from RapidMiner). Any clues?

This is the code:

import com.rapidminer.RapidMiner; import com.rapidminer.Process; import com.rapidminer.example.Attribute; import com.rapidminer.example.Example; import com.rapidminer.example.ExampleSet; import com.rapidminer.operator.IOContainer; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorException; import java.io.File; import java.io.IOException; import java.util.Iterator; import com.rapidminer.operator.io.ExcelExampleSource; import com.rapidminer.tools.XMLException; public class Classification { public static void main(String [] args) throws Exception{ ExampleSet resultSet1 = null; IOContainer ioInput = null; IOContainer ioResult; try { RapidMiner.setExecutionMode(RapidMiner.ExecutionMode.COMMAND_LINE); RapidMiner.init(); Process pr = new Process(new File("C:\\Users\\MP-TEST\\Desktop\\Rapid_Test\\Wieder_Model.rmp")); Operator op = pr.getOperator("Read Excel"); op.setParameter(ExcelExampleSource.PARAMETER_EXCEL_FILE, "C:\\Users\\MP-TEST\\Desktop\\Rapid_Test\\HaendlerRatings_neu.xls"); ioResult = pr.run(ioInput); if (ioResult.getElementAt(0) instanceof ExampleSet) { resultSet1 = (ExampleSet)ioResult.getElementAt(0); for (Example example : resultSet1) { Iterator<Attribute> allAtts = example.getAttributes().allAttributes(); while(allAtts.hasNext()) { Attribute a = allAtts.next(); if (a.isNumerical()) { double value = example.getValue(a); System.out.println(value); } else { String value = example.getValueAsString(a); System.out.println(value); } } } } } catch (IOException | XMLException | OperatorException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

This is mistake:

 Apr 09, 2013 9:06:05 AM com.rapidminer.Process run INFO: Process C:\Users\MP-TEST\Desktop\Rapid_Test\Wieder_Model.rmp starts com.rapidminer.operator.UserError: A value for the parameter 'excel_file' must be specified! at com.rapidminer.operator.nio.model.ExcelResultSetConfiguration.makeDataResultSet(ExcelResultSetConfiguration.java:316) at com.rapidminer.operator.nio.model.AbstractDataResultSetReader.createExampleSet(AbstractDataResultSetReader.java:127) at com.rapidminer.operator.io.AbstractExampleSource.read(AbstractExampleSource.java:52) at com.rapidminer.operator.io.AbstractExampleSource.read(AbstractExampleSource.java:1) at com.rapidminer.operator.io.AbstractReader.doWork(AbstractReader.java:126) at com.rapidminer.operator.Operator.execute(Operator.java:855) at com.rapidminer.operator.execution.SimpleUnitExecutor.execute(SimpleUnitExecutor.java:51) at com.rapidminer.operator.ExecutionUnit.execute(ExecutionUnit.java:711) at com.rapidminer.operator.OperatorChain.doWork(OperatorChain.java:379) at com.rapidminer.operator.Operator.execute(Operator.java:855) at com.rapidminer.Process.run(Process.java:949) at com.rapidminer.Process.run(Process.java:873) at com.rapidminer.Process.run(Process.java:832) at com.rapidminer.Process.run(Process.java:827) at Classification.main(Classification.java:29) 

Best wishes

Armen

+4
source share
3 answers

I see two ways to do this.

The first would be to programmatically change the XML definition of your process. Rapidminer processes are defined by an XML file with the extension .rmp . In the file you will find the definition of the operator that you want to change. This is an excerpt from a simple process that defines the Read Excel statement:

 <operator activated="true" class="read_excel" compatibility="5.3.005" expanded="true" height="60" name="Read Excel" width="90" x="313" y="75"> <parameter key="excel_file" value="D:\file.xls"/> <!-- HERE IS THE FILE PATH --> <parameter key="sheet_number" value="1"/> <parameter key="imported_cell_range" value="A1"/> <parameter key="encoding" value="SYSTEM"/> <parameter key="first_row_as_names" value="true"/> <list key="annotations"/> <parameter key="date_format" value=""/> <parameter key="time_zone" value="SYSTEM"/> <parameter key="locale" value="English (United States)"/> <list key="data_set_meta_data_information"/> <parameter key="read_not_matching_values_as_missings" value="true"/> <parameter key="datamanagement" value="double_array"/> </operator> 

I highlighted the part in which the path to the excel file. You can overwrite this in your application. Just be careful not to break the XML file.


Another way is to change the statement after loading the process into your Java application. You can get a link to your operator on Process#getOperator(String name) or Process#getAllOperators() . I assume this should be one of these classes:

 com.rapidminer.operator.io.ExcelExampleSource com.rapidminer.operator.nio.ExcelExampleSource 

When you find the correct operator, you change the path to Operator#setParameter(String key, String Value) .

This code works for me with RapidMiner 5.3: (the process is just an Excel read statement and a CSV burn statement)

 package sorapid; import com.rapidminer.Process; import com.rapidminer.RapidMiner; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorException; import com.rapidminer.operator.io.ExcelExampleSource; import com.rapidminer.tools.XMLException; import java.io.File; import java.io.IOException; public class SOrapid { public static void main(String[] args) { try { RapidMiner.setExecutionMode(RapidMiner.ExecutionMode.COMMAND_LINE); RapidMiner.init(); Process process = new Process(new File("c:\\Users\\Matlab\\.RapidMiner5\\repositories\\Local Repository\\processes\\test.rmp")); Operator op = process.getOperator("Read Excel"); op.setParameter(ExcelExampleSource.PARAMETER_EXCEL_FILE, "d:\\excel.xls"); process.run(); } catch (IOException | XMLException | OperatorException ex) { ex.printStackTrace(); } } } 
+1
source

Works great for me:

  • Download Rapidminer (and unzip the file)
  • In the "lib" directory you need:
    • rapidminer.jar
    • launcher.jar
    • All jar in the directory "/ lib / freehep".
  • Put libs 1, 2, and 3 in your java classpath library project
  • Copy this code and run:
 import com.rapidminer.Process; import com.rapidminer.RapidMiner; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorException; import com.rapidminer.operator.io.ExcelExampleSource; import com.rapidminer.tools.XMLException; import java.io.File; import java.io.IOException; import java.lang.Object; public class ReadRapidminerProcess { public static void main(String[] args) { try { RapidMiner.setExecutionMode(RapidMiner.ExecutionMode.COMMAND_LINE); RapidMiner.init(); Process process = new Process(new File("/your_path/your_file.rmp")); process.run(); } catch (IOException | XMLException | OperatorException ex) { ex.printStackTrace(); } } } 

I hope to help you, I searched a lot before finding an answer.

+4
source

Try the following:

 private SimpleExampleSet ReadExcel( File processXMLFile_, File excelFile_ ) throws IOException, XMLException, OperatorException { IOContainer outParameters = null; Process readExcel = new Process( processXMLFile_ ); IOObject inObject = new SimpleFileObject( excelFile_ ); IOContainer inParameters = new IOContainer( inObject ); outParameters = readExcel.run( inParameters ); SimpleExampleSet result = (SimpleExampleSet) outParameters.getElementAt( 0 ); return result; } 

Sorry, I can not send the image with the RapidMiner script, if you need, I can send it by email.

0
source

All Articles