小编tsc*_*hel的帖子

如何在ProtobufAnnotationSerializer中获取protobuf扩展字段

我是协议缓冲区的新手,并尝试弄清楚如何在斯坦福 CoreNLP 库中扩展消息类型,如下所述: https: //nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/管道/ProtobufAnnotationSerializer.html

问题:我可以设置扩展字段,但无法获取它。我将问题归结为下面的代码。在原始消息中,字段名称被反序列化消息中的[edu.stanford.nlp.pipeline.myNewField]字段编号替换。101

我如何获取 myNewField 的值?

PS:这篇文章/sf/ask/2017065011/建议它应该像调用一样简单getExtension(MyAppProtos.myNewField)

定制原型

syntax = "proto2";

package edu.stanford.nlp.pipeline;

option java_package = "com.example.my.awesome.nlp.app";
option java_outer_classname = "MyAppProtos";

import "CoreNLP.proto";

extend Sentence {
    optional uint32 myNewField = 101;
}
Run Code Online (Sandbox Code Playgroud)

原型测试.java

import com.example.my.awesome.nlp.app.MyAppProtos;
import com.google.protobuf.ExtensionRegistry;
import com.google.protobuf.InvalidProtocolBufferException;

import edu.stanford.nlp.pipeline.CoreNLPProtos;
import edu.stanford.nlp.pipeline.CoreNLPProtos.Sentence;

public class ProtoTest {

    static {
        ExtensionRegistry registry = ExtensionRegistry.newInstance();
        registry.add(MyAppProtos.myNewField);
        CoreNLPProtos.registerAllExtensions(registry);
    }

    public static void main(String[] args) throws InvalidProtocolBufferException {

        Sentence originalSentence = Sentence.newBuilder()
                .setText("Hello world!")
                .setTokenOffsetBegin(0) …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers stanford-nlp

1
推荐指数
1
解决办法
2356
查看次数

标签 统计

protocol-buffers ×1

stanford-nlp ×1