java - 在java中使用Stanford postagger,得到java.lang.InknownClassChangeError

标签 java stanford-nlp pos-tagger

我正在尝试初始化斯坦福 NLP 语音标注器,但我不断收到 java.lang.InknownClassChangeError 错误。当我打印错误原因时,我得到 null,当我打印消息时,我得到 Implementing Class。

这是我的代码:

    try {
        MaxentTagger tagger = new MaxentTagger(path+"left3words-wsj-0-18.tagger");
        Reader reader = new BufferedReader(new InputStreamReader(System.in));
        List<Sentence<? extends HasWord>> sentences = MaxentTagger.tokenizeText(reader);
        for (Sentence<? extends HasWord> sentence : sentences) {
            Sentence<TaggedWord> tSentence = MaxentTagger.tagSentence(sentence);
            System.out.println(tSentence.toString(false));
        }

    } catch (IOException e) {
        System.err.println("READ ERROR");
        e.printStackTrace();
    } catch (Exception e) {
        System.err.println("TAGGER ERROR");
        e.getMessage();
    } catch(java.lang.IncompatibleClassChangeError e){
        e.getStackTrace();
    }

}

有人知道如何解决这个问题吗?

最佳答案

当某个类X针对其他类Y的一个版本进行编译,然后尝试使用类 Y 的不同(不兼容)版本加载它。如果您收到此错误而不是子类型,则可能意味着 Y 已从 interface 更改为 class,反之亦然,或者其继承的接口(interface)和实现的类发生了变化。

您没有看到任何 getMessage() 输出的原因是 IncompleteClassChangeErrorlava.lang.Error 的子类型,而不是 java.lang.Exception。因此,Exceptioncatch 没有捕获它。只需将 println(e.getMessage()) 行复制到下一个 catch block 即可解决此问题。

当您打印异常消息时,它应该告诉您有关导致问题的更多信息。但根本原因是您需要重新编译和/或确保在编译时和运行时使用相同的库 JAR 文件。

关于java - 在java中使用Stanford postagger,得到java.lang.InknownClassChangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2040206/

相关文章:

java - JSF 2 - 从二进制数据生成图像

nlp - 将中文文档拆分成句子

java - 在扩展名为 org.eclipse.plugin.menus 的默认菜单上插入项目

java - 如何手动设置每个 "page"的哈希值

java - 斯坦福 POS 标记器 : How to preserve newlines in the output?

python - NLTK CoreNLPDependencyParser : Failed to establish connection

python - 如何有效地将 pos_tag_sents() 应用于 pandas 数据框

python - POS-Tagger 非常慢

java - 使用斯坦福大学的词性标记器标记大文件

java - Android:基于两个微调器选择组合的操作