首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分阶段运行斯坦福NLP管道

分阶段运行斯坦福NLP管道
EN

Stack Overflow用户
提问于 2015-08-20 02:45:12
回答 1查看 193关注 0票数 0

我尝试在多个步骤中运行核心流水线,以减少昂贵的解析和注释步骤。

我有一个文档集合,目前我正在使用管道对它们进行标记化和断句。这很有效,在一定程度上,我可以用这些信息做我需要做的事情。

根据我对标记化句子的处理,一些需要依赖解析,一些需要NER,一些可以作为无关紧要的句子丢弃。

我可以看到,依存关系解析器可以接受句子的CoreMap,并返回依存关系图。但是通过在线阅读,我发现使用POS标签可以提高解析效率,这当然是有意义的。NER最有可能也需要POS?

对于我来说,需要NER的句子不需要被依赖关系解析。

但是,词性标记器似乎不能接受表示标记化句子的CoreMap。

有没有一种方法,我可以运行POS标签,然后对核心流水线中的标记化句子运行NER或依存关系解析,只运行tokenize和ssplit?

EN

回答 1

Stack Overflow用户

发布于 2015-08-25 17:42:15

对于你的问题,我可以给出两个答案。在通常的CoreNLP接口中,您可以设置一个只包含某些步骤的注释管道,以及另一个包含后续步骤的注释管道,并在代码中的不同位置通过每个管道传递文本。例如,第一个可以有注释器"tokenize,ssplit,pos“,第二个可以有注释器"ner”。一旦您通过第一个管道传递了一个Annotation,它就可以通过第二个管道运行:

代码语言:javascript
复制
Annotation ann = new Annotation("this is a sentence");
StanfordCoreNLP stage1 = new StanfordCoreNLP(new Properties(){{
  setProperty("annotators", "tokenize,ssplit,pos");
}});
stage1.annotate(ann);
// <DO OTHER THINGS>
StanfordCoreNLP stage1 = new StanfordCoreNLP(new Properties(){{
  setProperty("annotators", "ner");
  setProperty("enforceRequirements", "true");
}});
stage2.annotate(ann);

我还可以厚颜无耻地插入一个我在业余时间一直在做的CoreNLP包装器:https://github.com/stanfordnlp/CoreNLP/tree/master/src/edu/stanford/nlp/simple。其中一个好处就是它对注释的惰性计算。所以,你可以这样做:

代码语言:javascript
复制
import edu.stanford.nlp.simple.*
Sentence s = new Sentence("this is a sentence");
// Loads the POS tagger, but nothing else
String[] tags = s.posTags();
// <DO OTHER THINGS>
// Now, load the NER tagger
String[] nerTags = s.ners();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32103302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档