在Java应用程序中集成RapidMiner

我在RapidMiner中有一个文本分类过程。 它从指定的excel ssheet读取测试数据并进行分类。 我还有一个小型Java应用程序,它正在运行此过程。 现在我想在我的应用程序中创建文件输入部分,这样每次我都可以从我的应用程序(而不是RapidMiner)中指定excel文件。 任何提示?

这是代码:

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 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(); } } } 

这是错误:

 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) 

最好的祝福

阿尔钦

我认为有两种方法可以做到这一点。

第一个是以编程方式更改进程的XML定义。 Rapidminer进程由扩展名为.rmp的XML文件指定。 在文件中,您将找到要更改的运算符的定义。 这是一个指定Read Excel运算符的简单过程的摘录:

                

我突出显示了excel文件路径所在的部分。 您可以在应用程序中覆盖它。 小心不要破坏XML文件。


另一种方法是在java应用程序中加载进程后修改运算符。 您可以通过Process#getOperator(String name)Process#getAllOperators()获取对运算符的引用。 我想它应该是这些类中的一个:

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

当您找到正确的运算符时,您可以通过Operator#setParameter(String key, String Value)修改路径。

这段代码适用于RapidMiner 5.3 :(该过程只是一个Read Excel操作符和一个Write CSV操作符)

 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(); } } } 

适合我的工作:

  • 下载Rapidminer (并解压缩文件)
  • 进入“lib”目录,您需要:
    1. rapidminer.jar
    2. launcher.jar
    3. 所有jar都在“/ lib / freehep”目录下。
  • 将libs 1,2和3放在类路径java项目(库)中
  • 复制此代码并运行:
 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(); } } } 

我希望能帮到你,在找到答案之前我搜索了很多。

尝试这个:

 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; } 

抱歉,如果您需要,我无法使用RapidMiner脚本发布图像,我可以将其发送到电子邮件。