使用斯坦福 CoreNLP 进行共指解析

2023-12-08

我是斯坦福 CoreNLP 工具包的新手,并尝试将其用于解决新闻文本中的共指问题的项目。为了使用斯坦福 CoreNLP 共指系统,我们通常会创建一个管道,这需要标记化、句子分割、词性标记、词形还原、命名实体识别和解析。例如:

Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

// read some text in the text variable
String text = "As competition heats up in Spain's crowded bank market, Banco Exterior de Espana is seeking to shed its image of a state-owned bank and move into new activities.";

// create an empty Annotation just with the given text
Annotation document = new Annotation(text);

// run all Annotators on this text
pipeline.annotate(document);

然后我们可以很容易地得到句子注释:

List<CoreMap> sentences = document.get(SentencesAnnotation.class);

但是,我正在使用其他工具进行预处理,只需要一个独立的共指解析系统。创建标记和解析树注释并将它们设置为注释非常容易:

// create new annotation
Annotation annotation = new Annotation();

// create token annotations for each sentence from the input file
List<CoreLabel> tokens = new ArrayList<>();
for(int tokenCount = 0; tokenCount < parsedSentence.size(); tokenCount++) {

        ArrayList<String> parsedLine = parsedSentence.get(tokenCount);
        String word = parsedLine.get(1);
        String lemma = parsedLine.get(2);
        String posTag = parsedLine.get(3);
        String namedEntity = parsedLine.get(4); 
        String partOfParseTree = parsedLine.get(6);

        CoreLabel token = new CoreLabel();
        token.setWord(word);
        token.setWord(lemma);
        token.setTag(posTag);
        token.setNER(namedEntity);
        tokens.add(token);
    }

// set tokens annotations to annotation
annotation.set(TokensAnnotation.class, tokens);

// set parse tree annotations to annotation
Tree stanfordParseTree = Tree.valueOf(inputParseTree);
annotation.set(TreeAnnotation.class, stanfordParseTree);

然而,创建句子注释非常棘手,因为据我所知,没有文档可以详细解释它。我可以为句子注释创建数据结构并将其设置为注释:

List<CoreMap> sentences = new ArrayList<CoreMap>();
annotation.set(SentencesAnnotation.class, sentences);

我相信这不会那么困难,但是没有关于如何从标记注释创建句子注释的文档,即如何用实际的句子注释填充 ArrayList。

有任何想法吗?

顺便说一句,如果我使用处理工具提供的标记和解析树注释,并且仅使用斯坦福核心自然语言处理管道提供的句子注释并应用斯坦福核心自然语言处理独立共指解析系统,我将得到正确的结果。因此,完整的独立共指解析系统唯一缺少的部分是从标记注释创建句子注释的能力。


有一个Annotation 构造函数 with a List<CoreMap> sentences如果您有已标记化句子的列表,则该参数用于设置文档。

对于您想要创建的每个句子CoreMap对象如下。 (请注意,我还分别为每个句子和标记对象添加了句子和标记索引。)

int sentenceIdx = 1;
List<CoreMap> sentences = new ArrayList<CoreMap>();
for (parsedSentence : parsedSentences) {
    CoreMap sentence = new CoreLabel();
    List<CoreLabel> tokens = new ArrayList<>();
    for(int tokenCount = 0; tokenCount < parsedSentence.size(); tokenCount++) {

        ArrayList<String> parsedLine = parsedSentence.get(tokenCount);
        String word = parsedLine.get(1);
        String lemma = parsedLine.get(2);
        String posTag = parsedLine.get(3);
        String namedEntity = parsedLine.get(4); 
        String partOfParseTree = parsedLine.get(6);

        CoreLabel token = new CoreLabel();
        token.setWord(word);
        token.setLemma(lemma);
        token.setTag(posTag);
        token.setNER(namedEntity);
        token.setIndex(tokenCount + 1);
        tokens.add(token);
    }

    // set tokens annotations and id of sentence 
    sentence.set(TokensAnnotation.class, tokens);
    sentence.set(SentenceIndexAnnotation.class, sentenceIdx++);

    // set parse tree annotations to annotation
    Tree stanfordParseTree = Tree.valueOf(inputParseTree);
    sentence.set(TreeAnnotation.class, stanfordParseTree);

    // add sentence to list of sentences
    sentences.add(sentence);
}

然后你可以创建一个Annotation实例与sentences list:

Annotation annotation = new Annotation(sentences);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用斯坦福 CoreNLP 进行共指解析 的相关文章

  • Java中遍历所有文件

    我想让我的程序打印我计算机上所有文件的巨大列表 我的问题是 当我希望它打印位于我的计算机上的所有文件时 它仅打印第一个硬盘驱动器的第一个文件夹中的文件 有什么想法我在这里做错了什么吗 谢谢 这是我使用的代码 Main import java
  • FOP apache - 支持希伯来字母

    过去几天我一直在调查 FOP apache 中对希伯来字母的支持 用于生成 PDF 文件的项目 我看到以前有一个问题 我不太明白是否解决了 如果有支持 有人可以向我展示 重定向到简单的示例 为我提供带有希伯来字母的 XSL FO 文件 当使
  • spring依赖注入会创建单例对象吗?

    spring内部是如何管理这些对象的呢 单例对象什么时候创建和销毁 默认情况下 Spring bean 基本上是单例的 Spring 将为每个类创建一个实例 并且通常会在 Spring 初始化时执行此操作 然而 这几乎是无限可定制的 Spr
  • GSON:如何从 Json 中获取不区分大小写的元素?

    下面显示的代码在以下情况下效果很好JSON对象包含jsonKey因为它被传递给该方法 我想知道 是否有一种方法可以获取分配给不区分大小写的键表示的值 Example public String getOutputEventDescripti
  • 从java管理unix进程的最佳方法是什么?

    我正在寻找一些简单的任务 例如列出用户的所有正在运行的进程 或者通过pid等杀死特定进程 来自Java的基本unix进程管理 有没有相对成熟且有文档的库 我可以从 JVM 运行外部命令 然后解析标准输出 错误 但这似乎需要大量工作 而且一点
  • EventQueue.invokeLater vrs SwingUtilities.invokeLater

    有人可以强调这两者之间的差异以及两者都是必需的实例吗 我有一个可以互换使用两者的应用程序 但想知道其中一个是否比另一个更好 显然他们都接受Runnable object 对我来说 我想我可以使用我喜欢的那个 为什么这两个相似的功能在不同的类
  • JOOQ初始化DAO最佳方法

    我想知道初始化 JOOQ 生成 DAO 的最佳实践 现在 我使用以下方法来初始化 JOOQ 生成的 DAO 在以下情况下 Student Dao 是 JOOQ 生成的 public class ExtendedStudentDAO exte
  • Android - 更改 ImageButton 上的发送图标的颜色

    如何更改发送图标的默认颜色ImageButton
  • Java 将字符串拆分为单词逗号和句号

    我一直在使用myString split s 得到每个单词 但现在我想把逗号和句号也分开 例如 妈妈总是说生活就像一盒巧克力 你永远不知道会得到什么 to Mama always said life was like a box of ch
  • 将变量从一个 jsp 发送到另一个 jsp

    我有一个 JSP 文件jsp 1 jsp和另一个 JSP 文件jsp 2 jsp 我已经包括了jsp 2 jsp in jsp 1 jsp using 现在我需要某个元素上的单击事件 在该事件中 我想将字符串变量传输到包含的 jsp 中 假
  • 是否有更现代的面向对象版本的“让我们构建一个编译器”? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有更现代的 也许是面向对象的 相当于 Jack Crenshaw 的 让我们构建一个编译器 http
  • java中接口上的抽象方法是什么[重复]

    这个问题在这里已经有答案了 可能的重复 为什么要将 Java 接口方法声明为抽象方法 https stackoverflow com questions 641536 why would one declare a java interfa
  • Maven build 编译错误:无法在项目 Maven 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile)

    我有一个 Maven 项目 从 git 存储库分叉并克隆到我的 Eclipse 上 它是基于 Java 8 构建的 我做的第一件事是执行 mvn clean install 但我收到以下失败消息 INFO Scanning for proj
  • 异常中的错误代码与异常层次结构

    您认为在异常中使用错误代码来指定错误类型可以吗 请看一下这段代码 public class MyException extends Exception public static final String ERROR CODE INVALI
  • Guava Splitter/Joiners 每次使用时都应该创建吗?

    Guava 包含用于拆分和连接字符串的实用程序 但它需要实例化 Splitter Joiner 对象才能执行此操作 这些是小对象 通常仅包含要分割 合并的字符 维护对这些对象的引用以便重用它们是一个好主意 还是在需要它们时创建它们并让它们被
  • 在 OpenCV 中将 `BufferedImage` 转换为 `Mat`

    我怎样才能转换BufferedImage to a Mat in OpenCV 我正在使用 JAVA 包装器OpenCV not JavaCV 由于我是新手OpenCV我在理解如何做时遇到一些问题Mat works 我想做这样的事情 基于
  • Java 错误:默认构造函数未定义隐式超级构造函数

    我有一些简单的 Java 代码 其结构与此类似 abstract public class BaseClass String someString public BaseClass String someString this someSt
  • JavaFX ComboBox - 显示文本但在选择时返回 ID

    我有一个包含机场的数据库表 每个机场都有一个名称和一个 ID 在 JavaFX 中我有一个表单 其中包含ComboBox 组合框需要显示所有机场名称 并且在提交表单时需要将机场的 ID 插入数据库 而不是其名称 但我并没有真正弄清楚解决方案
  • 我可以为每个片段单独提供工具栏吗?如何处理导航抽屉

    在我的应用程序中 某些页面的工具栏中有自定义视图 有些片段具有透明工具栏 有些片段具有坐标布局滚动 因此 我决定为每个片段单独设置工具栏 我想知道这是否是一个好的做法 如果有人已经这样做了 请分享代码或示例 您可以在片段中使用自定义工具栏
  • 从 Eclipse 启动时创建新的 JFrame 时 Java 将关闭。没有抛出异常

    我正在开发一个在 Eclipse 中开发的 Java 项目 直到今天一切都很好 昨天 在完成我的项目之前 我最后一次运行它以检查一切是否正常并且运行正常 但是今天 当我启动该项目并按下 运行 时 我的应用程序就神秘地关闭了 没有崩溃 没有消

随机推荐

  • 后递增运算符的求值按什么顺序发生?

    Given std vector
  • 示例代码:在 angular2 中进行模拟

    我正在学习 Angular2 在 DI 页面中 有用于模拟的示例代码 https angular io docs ts latest guide dependency injection html 这是什么意思 let mockServic
  • 将 [String] 存储在 NSUserDefaults 中

    我想将 Swift 样式字符串数组保存到 NSUserDefaults 中 但实际上代码中的 if 语句表示返回值始终为 nil 稍后在代码中 iOS 8 我想使用 food spaghetti 添加新条目 var food String
  • kappa架构和lambda架构有什么区别

    如果 Kappa 架构直接对流进行分析 而不是将数据分成两个流 那么在像 Kafka 这样的消息系统中 数据存储在哪里 或者可以在数据库中进行重新计算吗 单独的批处理层是否比使用流处理引擎重新计算进行批处理分析更快 需要考虑的一个非常简单的
  • 如何在phonegap android上隐藏键盘

    我正在使用 Android 版 PhoneGap 1 0 我有一张申请表 有几个字段 其中之一是填写周年纪念日 我在该字段中放置了一个日期选择器 但是当您单击该字段时 会出现键盘 如何禁用键盘 代码如下
  • Python - 找不到记录器“OpenGL.error”的处理程序

    好吧 这是什么 为什么在Win2003服务器上会出现 而在WinXP上却不会 它似乎根本不影响我的应用程序 但当我关闭应用程序时 我收到此错误消息 这很烦人 错误消息应该如此 我正在使用 pyOpenGl 和 wxPython 来做图形工作
  • 使用 Excel VBA 事件检测单元格的合并/取消合并?

    我正在尝试找到一种方法来检测合并 或取消合并 单元格的立即使用 更改事件会触发 选择也不会更改 我已经尝试过其他一些 但合并时似乎没有事件触发 我觉得很奇怪 我在更改事件中的代码当前根据单元格的内容更改 Interior Color 如果单
  • ASP:我无法将某些字符从 utf-8 解码为 iso-8859-1

    我用这个函数来解码UTF 8 function DecodeUTF8 s dim i dim c dim n i 1 do while i lt len s c asc mid s i 1 if c and H80 then n 1 do
  • tidyr - 获得组合的独特方式(仅使用 tidyverse)

    我想使用以下方法获取数据帧的唯一字符串列的所有唯一成对组合tidyverse 理想情况下 这是一个虚拟示例 library tidyverse a lt letters 1 3 gt tibble as tibble a gt A tibb
  • 中缀数据构造运算符的解释

    我正在阅读这篇有趣的博客文章 名为解析 不验证它包括 为此 我们需要一个表示非空列表的类型 幸运的是 Data List NonEmpty 中现有的 NonEmpty 类型正是如此 它有以下定义 data NonEmpty a a a 请注
  • Perl 错误地抱怨名称“main::FILE”仅使用一次

    我将程序简化为以下小片段 但我仍然收到消息 名称 main FILE 仅使用一次 可能有拼写错误 usr bin perl w use strict use autodie qw open close foreach my f ARGV l
  • VBA根据形状选择形状

    How do I select all shapes array range where the value in Cell A Shape TopLeftCell Row 0 阵列应仅包含形状 2 和 3 如上图所示 作为替代方案 您可以
  • @class我可以知道这个的正确用法吗

    任何人都可以使用 class 指出文档或详细讨论 我一直在使用这个 但还没有真正完全理解它 我想更多地了解它并充分理解它 先感谢您 class习惯于declare一类 本质上是告诉编译器 嘿 有一个具有这个名称的类某处在源代码中 定义稍后会
  • 由于 ____chkstk_darwin,在 Catalina 上使用 Deployment 10.10 编译的 MacOS 应用程序在 < HighSierra 版本上崩溃

    我们有一个多平台桌面应用程序 它使用用 C 编写的通用组件 该组件使用 OpenSSL 和 PocoProject 两者都静态链接到库中 在 macOS 上 我们有一个用 Objective C 编写的小型框架 它本质上是 C 代码的单个
  • Java ImageIO:无法读取输入文件

    我不知道为什么这不起作用 但程序说它无法读取输入文件 顺便说一句 这也在 Ubuntu 中运行 这是示例代码 URI url new URI images GUI TitleScreen PNG File file new File url
  • 如何使用javascript找到浏览器的高度,包括工具栏和按钮?

    有没有办法通过浏览器的工具栏和按钮来查找浏览器高度 而不仅仅是窗口或文档高度 对于视口的大小 您可以使用window innerWidth and window innerHeight 对于整个窗户 包括装饰 使用window outerW
  • 如何设置div的高度相同

    这是我的情况 HTML div div div class empty nbsp div div class empty nbsp div div class empty nbsp div div div div class empty n
  • 如何在 T-SQL 中将多行作为单行返回?

    几个月前 我们的供应商向我们的票务系统添加了一项功能 使我们可以向票证添加任意数量的自定义字段 我想将这些字段与其他调用信息一起查询以用于报告目的 但每个可扩展字段都作为一行存储在数据库中 所以基本上你有这样的东西 ext doc no c
  • 按需初始化持有者习语 - 何时加载类?

    我一直在看 https en wikipedia org wiki Initialization on demand holder idiom了解更多有关单例的信息 我的问题是静态内部类到底什么时候加载以及什么时候初始化 我的理解是 可以加
  • 使用斯坦福 CoreNLP 进行共指解析

    我是斯坦福 CoreNLP 工具包的新手 并尝试将其用于解决新闻文本中的共指问题的项目 为了使用斯坦福 CoreNLP 共指系统 我们通常会创建一个管道 这需要标记化 句子分割 词性标记 词形还原 命名实体识别和解析 例如 Properti