"Code error: Could not call com.rapidminer.example.SimpleAttributes.readResolve()"

ml_guy
ml_guy New Altair Community Member
edited November 5 in Community Q&A
Hi Everyone,

I have written a java code for text classification in netbeans. When I run the code, I get following error.

2011-03-15 02:34:55 INFO: Process starts (Process.run())
Could not read file 'C:/oneill_scripts/models/Medical_NonMedical.mod': java.io.IOException: Cannot read from XML stream, wrong format: Could not call com.rapidminer.example.SimpleAttributes.readResolve() : Duplicate attribute name: ?
---- Debugging information ----
message             : Could not call com.rapidminer.example.SimpleAttributes.readResolve() : Duplicate attribute name: ?
cause-exception     : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
cause-message       : Could not call com.rapidminer.example.SimpleAttributes.readResolve() : Duplicate attribute name: ?
class               : com.rapidminer.operator.learner.functions.kernel.JMySVMModel
required-type       : com.rapidminer.example.SimpleAttributes
line number         : 642097
-------------------------------.
I have added all the libraries (including rapidminer.jar and text plugin) to project. I can verify that the model file exists. Surprisingly, when I save the output from the process using process.getRootOperator().getXML(true) (Given in the code below), and run the output .rmp file, it runs smoothly in rapidminer IDE, and gives out the classification result.

Can someone please help me. I have to submit the code and would really appreciate quick help.

The code is given below.
Thanks in advance :)

public String classifyText(String modelPath, String category) {
       String result = "";
       try {
           // Create a process
           final Process process = new Process();

           // all operators from "left to right"

           Operator readModel = OperatorService.createOperator(ModelLoader.class);
           readModel.setParameter("model_file", modelPath);

           Operator applyModel = OperatorService.createOperator(ModelApplier.class);

           Operator document = OperatorService.createOperator(SingleDocumentInputOperator.class);
           System.out.println(document.getOutputPorts().toString());
           document.setParameter("text", this.TextString);

           Operator document2data = OperatorService.createOperator(Document2ExampleSet.class);
           document2data.setParameter("text_attribute", "text");

           // add operators to the main process and connect them
           process.getRootOperator().getSubprocess(0).addOperator(readModel);
           process.getRootOperator().getSubprocess(0).addOperator(document);
           process.getRootOperator().getSubprocess(0).addOperator(document2data);
           process.getRootOperator().getSubprocess(0).addOperator(applyModel);

           document.getOutputPorts().getPortByName("output").connectTo(
                   document2data.getInputPorts().getPortByIndex(0));//.getPortByName("documents 1"));
           //connect(document, "output", document2data, "documents 1");
           connect(document2data, "example set", applyModel, "unlabelled data");
           connect(readModel, "output", applyModel, "model");

           // print process setup
           System.out.println(process.getRootOperator().createProcessTree(0));
           //System.out.println(process.getRootOperator().getXML(true));
           this.processAndWriteResults(process.getRootOperator().getXML(true));

           String a = applyModel.getOutputPorts().getPortByIndex(0).toString();
           System.out.println(a);
           // perform process
           process.run();
           ExampleSet obj = applyModel.getOutputPorts().getPortByIndex(0).getData();
           //obj.write(new FileOutputStream("/home/naurang/Desktop/output-text.txt"));
           //obj.write(System.out);
           ExampleTable et = obj.getExampleTable();
           DataRowReader drr = et.getDataRowReader();

           System.out.println(obj.getAttributes().toString());
           Attribute aid = obj.getAttributes().get("prediction(label)");
           Attribute pred = obj.getAttributes().get("prediction");

           while (drr.hasNext()) {
               DataRow rw = (DataRow) drr.next();
               System.out.println(rw.get(aid) + " " + rw.get(pred));
               result = Double.toString(rw.get(obj.getAttributes().get("prediction(label)")));
           }

           DataRowReader dr = obj.getExampleTable().getDataRowReader();
           while (dr.hasNext()) {
               System.out.println(obj.getAttributes().get("prediction(label)").getValue(dr.next()));
           }

           System.out.println(obj.getAttributes().get("prediction(label)").toString());
           System.out.println(applyModel.getParameter("labelled_data"));
       } catch (Exception ex) {
           System.err.println(ex.getMessage());
       }
       return result;
   }
Tagged:

Answers

  • land
    land New Altair Community Member
    Hi,
    well, I hope you aren't surprised nobody answered your post. Here in a forum for RapidNet...

    Actually I doubt it is still a relevant question to you, so I save the effort of posting an answer.

    Greetings,
    Sebastian
  • murtoza
    murtoza New Altair Community Member
    I got the same error. Couldn't solve it. Please help.