在Java中使用RapidMiner Textprocessing插件 - 无法使用' Document'代码中的对象

时间:2015-03-11 08:55:17

标签: java groovy rapidminer

我正在使用RapidMiner 5.我想制作一个文本预处理模块,用于分类系统。我使用这些步骤在RapidMiner中创建了一个过程。

  1. 标记化
  2. 转换案例
  3. 词干
  4. 过滤停用词
  5. 生成n-gram
  6. 我想编写一个脚本来对这些单词进行拼写校正。所以,我使用了'Execute Script'操作符并编写了一个groovy脚本来执行此操作(从此处raelcunha)。这是我在快速矿工的执行脚本操作符中编写的代码(由RapidMiner社区帮助)。

    Document doc=input[0]
    
    List<Token> newTokens = new LinkedList<Token>();
    nWords=train("set2.txt")
    for (Token token : doc.getTokenSequence()) {
    
        //String output=correct((String)token.getToken(),nWords) 
        println token.getToken();
        Token nToken = new Token(correct("garbge",nWords), token);
        newTokens.add(nToken);
    
    }
    doc.setTokenSequence(newTokens);
    return doc;
    

    这是拼写纠正的代码。 (感谢Norvig。)

        import com.rapidminer.operator.text.Document;
    import com.rapidminer.operator.text.Token;
    
    import java.util.List;
    import java.util.LinkedList;
    def train(f){
        def n = [:]
        new File(f).eachLine{it.toLowerCase().eachMatch(/\w+/){n[it]=n[it]?n[it]+1:1}}
        n
    }
    
    def edits(word) {
        def result = [], n = word.length()-1
        for(i in 0..n) result.add(word[0..<i] + word.substring(i+1))
        for(i in 0..n-1) result.add(word[0..<i] + word[i+1] + word[i, i+1] + word.substring(i+2))
        for(i in 0..n) for(c in 'a'..'z') result.add(word[0..<i] + c + word.substring(i+1))
        for(i in 0..n) for(c in 'a'..'z') result.add(word[0..<i] + c + word.substring(i))
        result
    }
    
    def correct(word, nWords) {
        if(nWords[word]) return word
        def list = edits(word), candidates = [:]
        for(s in list) if(nWords[s]) candidates[nWords[s]] = s
        if(candidates.size() > 0) return candidates[candidates.keySet().max()]
        for(s in list) for(w in edits(s)) if(nWords[w]) candidates[nWords[w]] = w
        return candidates.size() > 0 ? candidates[candidates.keySet().max()] : word
    }
    

    我在调用edits方法时遇到String index out of bounds异常。 并且,我不知道如何调试这个,因为rapidminer只是告诉我Execute Script运算符中存在一个问题,而不是说哪个脚本行导致了这个问题。

    所以,我打算通过在Java中创建一个运算符来做同样的事情 - How to extend RapidMiner

    我做的事情:

    1. 将RapidMiner Lib文件夹中的所有jar文件(C:\ Program Files(x86)\ Rapid-I \ RapidMiner5 \ lib)包含到我的java项目的构建路径中。

    2. 使用上面给出的链接使用相同的指南开始编码。

    3. 我的运算符的输入是一个Document(com.rapidminer.operator.text.Document) 如在脚本中。

    4. 但是,我无法在此代码中使用此Document对象。你能告诉我为什么吗?文本处理罐位于何处?

      对于使用插件jar,我们是否应该向BuildPath添加一些其他位置?

0 个答案:

没有答案