我是协议缓冲区的新手,并尝试弄清楚如何在斯坦福 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)