当前位置: 首页 > 知识库问答 >
问题:

分阶段运行斯坦福NLP管道

岳奇逸
2023-03-14

我试图分多个步骤运行核心管道,以减少昂贵的解析和注释步骤。

我有一个文档集,目前我正在用管道标记和破译它们。这很有效,在一定程度上,我可以利用这些信息做我需要做的事情。

根据我对标记化句子的处理,有些需要解析依赖关系,有些需要解析依赖关系,有些可能被认为不重要而丢弃。

我可以看到依赖关系解析器可以接收一个句子的核心图,然后返回依赖关系图。但在网上阅读时,我发现使用词性标注可以改善句法分析,这当然是有道理的。NER很可能也需要POS?

对我来说,需要NER的句子不需要进行依赖性分析。

然而,POS-tagger似乎无法接受表示标记化句子的CoreMap。

有没有一种方法可以运行词性标记,然后对核心管道中只运行tokenize和ssplit的标记化句子进行NER或依赖项解析?

共有1个答案

姜彬郁
2023-03-14

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

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.其中一个好处是它对注释的惰性计算。所以,你可以这样做:

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();
 类似资料:
  • 试图运行示例,但我一直无法打开“english-left3words-distsim.tagger”文件可能丢失。文件没有丢失,目录指向模型jar文件的位置,路径:edu\stanford\nlp\模型\pos-tagger\english-left3word在jar文件中是正确的。 我使用3.7.0,安装从nuget在视觉工作室2015. 代码如下: 我确实在Stack上看到了一个类似的问题,他

  • 我使用StanfordNLP来标记用智能手机编写的一组消息。这些文本有很多拼写错误,不遵守标点符号规则。通常,空格缺失会影响标记化。 例如,以下句子漏掉了“California.This”和“university,founded”中的空格。 斯坦福大学位于加利福尼亚州,这所大学是一所伟大的大学,创建于1891年。 标记器返回: {“斯坦福”、“大学”、“是”、“位于”、“加利福尼亚州”。这个”、“

  • 我曾使用grep和awk从斯坦福CRF-NER的“内联XML”中提取英语文本中的命名实体,我希望在其他人类语言中使用相同的更大工作流。 我一直在尝试法语(西班牙语似乎给我带来了一个Java错误,这是另一个故事),并使用我得到标准文本输出,每个句子都有各种类型的注释,包括正确组合在一起的多单词实体,如下所示: 我知道解析它是可能的,但当我真的只是想要整个文件中的实体列表时,这似乎浪费了很多处理。 我

  • 我是Java和Stanford NLP工具包的新手,并试图在一个项目中使用它们。具体地说,我尝试使用Stanford Corenlp toolkit来注释文本(使用Netbeans而不是命令行),并尝试使用http://nlp.Stanford.edu/software/Corenlp.shtml#Usage上提供的代码(使用Stanford Corenlp API)。问题是:有人能告诉我如何在文

  • 如果我从主页上举个例子: 斯坦福解析器: 交付下面的树: 我现在想拆分依赖于其结构的树以获取子句。所以在这个例子中,我想拆分树以获得以下部分: 印度有史以来最强的降雨 最强的降雨导致孟买金融中心关闭 最强的雨切断了通讯线路 最强降雨导致机场关闭 大雨迫使数千人睡在办公室 强降雨迫使数千人在夜间步行回家 所以第一个答案是使用递归算法打印所有根到叶的路径。 以下是我尝试过的代码: 当然,这段代码完全不

  • UIMA和StanfordNLP在流水线操作之后生成输出,比如如果我们想做词性标记,那么在输入文本中首先进行标记化,然后进行词性标记。 我想使用UIMA的标记化,并在Stanford CoreNLP的POS标记器中使用该标记。但是Stanford CoreNLP的POS标记器需要在POS标记器之前运行标记器。 那么,是否可以在同一管道中使用不同的API?是否可以同时使用UIMA标记器和Stanfo