RapidMiner在Java应用中的集成
我在RapidMiner中有一个文本分类过程。它从指定的excel ssheet中读取测试数据并进行分类。我还有一个小型Java应用程序正在运行这个过程。现在我想在我的应用程序中使用文件输入部分,这样每次我都可以从我的应用程序(而不是RapidMiner)中指定excel文件。 有什么提示吗 代码如下:RapidMiner在Java应用中的集成,java,rapidminer,Java,Rapidminer,我在RapidMiner中有一个文本分类过程。它从指定的excel ssheet中读取测试数据并进行分类。我还有一个小型Java应用程序正在运行这个过程。现在我想在我的应用程序中使用文件输入部分,这样每次我都可以从我的应用程序(而不是RapidMiner)中指定excel文件。 有什么提示吗 代码如下: import com.rapidminer.RapidMiner; import com.rapidminer.Process; import com.rapidminer.example.At
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();
}
}
}
致意
阿门我认为有两种方法可以做到这一点 第一种方法是以编程方式更改流程的XML定义。Rapidminer进程由扩展名为
.rmp
的XML文件指定。在该文件中,您将找到要更改的运算符的定义。这是一个简单过程的摘录,该过程指定了Read Excel运算符:
<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>
找到正确的运算符后,您可以通过运算符#setParameter(字符串键、字符串值)
修改路径
这段代码适用于我的RapidMiner 5.3:(该过程只是一个读取Excel操作符和一个写入CSV操作符)
试试这个:
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脚本发布图像,我可以将其发送到电子邮件。对我来说很好:
- (并解压缩文件)
- 在“lib”目录中,您需要:
- rapidminer.jar
- launcher.jar
- “/lib/freehep”目录中的所有jar
- 将libs1、2和3放入类路径java项目(库)
- 复制此代码并运行:
我希望能帮助您,在找到答案之前我搜索了很多。我试图通过指定键和值来处理第二个选项,但它显示运算符对象为空。我正在为ReadExcel运算符提供参数,但仍然得到一个错误:必须为参数“excel\u文件”指定一个值!代码:operator.setParameter(ExcelExampleSource.PARAMETER\u EXCEL\u文件,“C:\\Users\\MP-TEST\\Desktop\\Rapid\u TEST\\HANDleratings\u neu.xls”);运算符.setParameter(ExcelExampleSource.PARAMETER_导入的单元格_范围,“A1:A2000”);我添加了一个适用于我的代码示例。我不确定你有什么问题。在设置参数并检查运算符的parameters.keyToValueMap变量的内容后,是否可以设置断点?excel\u文件应该有一个条目,如“excel\u文件=>d:\excel.xls”一个问题:如果我将参数excel\u文件保留为空(在rapidMiner中)是否正确?如果从java应用程序运行该进程并设置参数,它会起作用。但是,如果不先选择文件路径,您将无法从rapidminer运行相同的进程。
com.rapidminer.operator.io.ExcelExampleSource
com.rapidminer.operator.nio.ExcelExampleSource
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();
}
}
}
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;
}
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();
}
}
}