You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stanford CoreNLP 3.9.0:如何加载prettyprint标注文件替代annotate方法?

解决Stanford CoreNLP 3.9.0加载已标注文件的问题

我之前也碰到过类似的困扰,在3.9.0版本里,确实没办法直接加载prettyprint输出的文件——因为那个格式是专门给人类阅读设计的,没有严格的机器可读结构,CoreNLP官方也没有提供对应的解析API。不过咱们可以换个思路,用CoreNLP原生支持的结构化序列化格式来保存和加载标注结果,下面是具体的实现方案:

一、先换用可序列化的格式保存标注结果

如果还能重新生成标注文件,建议放弃prettyprint,改用XMI或JSON格式保存,这两种格式CoreNLP都支持直接加载:

方案1:使用XMI格式(CoreNLP推荐的序列化格式)

保存标注结果:

// 假设你已经完成标注,得到了Annotation对象 ann
XmiSerializer serializer = new XmiSerializer();
try (OutputStream os = new FileOutputStream("annotated_output.xmi")) {
    serializer.serialize(ann, os);
} catch (IOException e) {
    e.printStackTrace();
}

加载已标注的XMI文件:

XmiSerializer serializer = new XmiSerializer();
Annotation loadedAnnotation;
try (InputStream is = new FileInputStream("annotated_output.xmi")) {
    loadedAnnotation = serializer.deserialize(is);
} catch (IOException e) {
    e.printStackTrace();
    return;
}
// 现在loadedAnnotation就是完整的标注对象,无需再调用annotate方法

方案2:使用JSON格式

保存标注结果:

// 定义和标注时一致的Properties(确保标注器列表匹配)
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner"); // 替换成你实际使用的标注器
props.setProperty("outputFormat", "json");

// 将Annotation对象序列化为JSON并写入文件
try (PrintWriter pw = new PrintWriter(new File("annotated_output.json"))) {
    pw.println(AnnotationJsonSerializer.toJson(ann, props));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

加载已标注的JSON文件:

Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner"); // 和保存时一致的标注器列表

Annotation loadedAnnotation;
try (BufferedReader br = new BufferedReader(new FileReader("annotated_output.json"))) {
    StringBuilder jsonContent = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        jsonContent.append(line);
    }
    loadedAnnotation = AnnotationJsonSerializer.fromJson(jsonContent.toString(), props);
} catch (IOException e) {
    e.printStackTrace();
    return;
}
// 加载完成,直接使用loadedAnnotation即可

二、如果已经有了prettyprint的文件怎么办?

很遗憾,3.9.0版本没有内置的解析器来处理prettyprint输出的文本——因为它的格式没有严格的机器可读规范,结构会随标注内容变化,手动解析不仅麻烦还容易出错。如果必须使用这份文件,只能自己编写正则表达式或文本解析逻辑来提取标注信息,但非常不推荐这种做法,建议还是重新用上面的序列化格式生成一次标注文件。

内容的提问来源于stack exchange,提问作者Gaëtan SCHMIDT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:51:52