当前中文指代消解领域比较活跃的研究者是Chen和Vincent Ng,这两个人近两年在AAAI2014, 2015发了一些相关的文章,研究领域跨越零指代、代词指代、名词指代等,方法也不是很复杂,集中于规则+特征+模型的传统思路。国内集中在苏州大学周国栋老师带领的团队和刘挺、秦兵老师带领的团队,分别在Berkeley Parser、LTP基础上做了一些研究,但是遗憾的是,近年来国内学者好像没有顶会命中记录。

鉴于当前国内的指代消解工具基本上没有开源、同时效果还说得过去的,所以经过大量调研当前中文指代消解的现状后,最终确定了使用Stanford CoreNLP作为实验对象。

Stanford CoreNLP 是斯坦福NLP组开源的一套集分词、词性标注、命名实体识别、句法分析、情感分析、指代消解等NLP功能的软件套装,支持英文、中文等语言。

附这个妇孺皆知的tools的链接:http://nlp.stanford.edu/software/index.shtml 和 http://stanfordnlp.github.io/CoreNLP/index.html

它的官方Demo链接:http://nlp.stanford.edu:8080/corenlp/ (这个DEMO对应的后台,应该是使用的英文模型)

好了 闲话不多说,我们快快步入正题,如何调用Stanford CoreNLP 3.6.0 套装中的中文指代消解模块

=========================================================================

=========================================================================

1、下载 Stanford CoreNLP 3.6.0 源码+模型,500M+,但是里面的cws、pos、parse等模型都是英文的 (http://stanfordnlp.github.io/CoreNLP/download.html)

2、下载中文模型,分词、词性标注、NER、parser等。(我不确定有没有统一下载地址,我是一个一个点开,找到Chinese Model,下载的 http://nlp.stanford.edu/software/index.shtml)

3、跑测试代码,在 http://stanfordnlp.github.io/CoreNLP/coref.html 里面找到运行方法,jar包调用分文件方式 或者 java代码调用分句子方式。(注意另外一个页面 http://nlp.stanford.edu/software/dcoref.shtml 中的方法是错误的,实践中有bug跑不通)

4、在3中找到了对的接口,实践中jar包调用来处理文件的方法,是可以在中文语料上跑通的,但是3中贴的代码仍然面向的是英文语料。这时需要对其进行修改。

代码如下:

import edu.stanford.nlp.hcoref.CorefCoreAnnotations;
import edu.stanford.nlp.hcoref.data.CorefChain;
import edu.stanford.nlp.hcoref.data.Mention;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.util.CoreMap;
import edu.stanford.nlp.util.StringUtils; import java.util.Properties; public class CorefExample {
public static void main(String[] args) throws Exception {
long startTime=System.currentTimeMillis(); String text = "小明吃了个冰棒,它很甜。 ";
args = new String[] {"-props", "edu/stanford/nlp/hcoref/properties/zh-coref-default.properties" }; Annotation document = new Annotation(text);
Properties props = StringUtils.argsToProperties(args);
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
pipeline.annotate(document);
System.out.println("---");
System.out.println("coref chains");
for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values()) {
System.out.println("\t" + cc);
}
for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class)) {
System.out.println("---");
System.out.println("mentions");
for (Mention m : sentence.get(CorefCoreAnnotations.CorefMentionsAnnotation.class)) {
System.out.println("\t" + m);
}
} long endTime=System.currentTimeMillis();
long time = (endTime-startTime)/1000;
System.out.println("Running time "+time/60+"min "+time%60+"s");
}
}

那么里面的zh-coref-default.properties 为啥CoreNLP里面没有呢。。。最后在stanford-chinese-corenlp-2015-12-08-models.jar解压后对应目录下找到了这个文件,与它官方网页里面虽然只相差一行(具体哪一行,大家可以对比看看),但是没有那个属性,真的跑不通。

Stanford CoreNLP 3.6.0 中文指代消解模块调用失败的解决方案的更多相关文章

  1. marmalade android 5.0 JNI 调用失败的解决方案

    5.0 真机日志如下:sart/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV call ...

  2. Error:(27, 13) Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2约束布局constraint-layout导入失败的解决方案

    运行demo提示错误: Error:(27, 13) Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2 ...

  3. 用 Python 和 Stanford CoreNLP 进行中文自然语言处理

    实验环境:Windows 7 / Python 3.6.1 / CoreNLP 3.7.0 一.下载 CoreNLP 在 Stanford NLP 官网 下载最新的模型文件: CoreNLP 完整包 ...

  4. OpenERP 7.0 中文报表PDF乱码(WindowsXP)

    OpenERP默认安装输出的PDF中文报表都是一些方块: 此问题可以通过oecn_base_fonts模块解决: 更多关于oecn_base_fonts的信息请参考: 1. OpenERPv7.0 中 ...

  5. 开源中文分词工具探析(五):Stanford CoreNLP

    CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...

  6. 开源中文分词工具探析(六):Stanford CoreNLP

    CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...

  7. stanford corenlp的TokensRegex

    最近做一些音乐类.读物类的自然语言理解,就调研使用了下Stanford corenlp,记录下来. 功能 Stanford Corenlp是一套自然语言分析工具集包括: POS(part of spe ...

  8. stanford corenlp自定义切词类

    stanford corenlp的中文切词有时不尽如意,那我们就需要实现一个自定义切词类,来完全满足我们的私人定制(加各种词典干预).上篇文章<IKAnalyzer>介绍了IKAnalyz ...

  9. 【转】基于VSM的命名实体识别、歧义消解和指代消解

    原文地址:http://blog.csdn.net/eastmount/article/details/48566671 版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步 ...

随机推荐

  1. [服务器安全]升级OpenSSH,OpenSSL,vsftp,关闭NTP服务

    公司的旧版直播服务器使用的是CentOS 6.7,很多软件包都是几年前的了.最近很多安全相关的新闻充斥着IT圈,先是Intel芯片有重大安全漏洞,后面MacOS爆安全漏洞.所以,对于安全问题还真不能小 ...

  2. 获取ping的最短、最长、平均时间

    # -*- coding: utf-8 -*- import osimport rep = os.popen('ping 120.26.77.101') out = p.read()regex = r ...

  3. esriControlsMousePointer常量

    控制鼠标指针选项. 不变 值 描述 esriPointerParentWindow -1 指针指定的父窗口或窗体. esriPointerDefault 0 默认指针,箭头一样. esriPointe ...

  4. angular绑定数据 使用循环输出列表数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  5. 使用jq Deferred防止代码被回调函数分解分解的支离破碎

    //移动人物 function moveInterval(stopPosotion){ var dtd = $.Deferred(); // 生成Deferred对象 var yidong= wind ...

  6. CRC校验和网络通信中writen、readn函数

    1.对网络传输的数据进行CRC32校验. #include <stdint.h> #include <stdio.h> #include <string.h> st ...

  7. 阻塞IO、非阻塞IO的区别

    1.类与类之间的关系:依赖,实现,泛化(继承),关联,组合,聚合. 1)依赖(虚线):一个类是 另一个类的函数参数 或者 函数返回值. 2)实现(实线加小圆):对纯虚函数类(抽象类)的实现. 3)继承 ...

  8. php分页插件

    前台调用样式<?php include_once('page.class.php');?><link rel="stylesheet" type="te ...

  9. IIS8.5设置 MVC HTTP 错误 404.0 - Not Found

    0. 确认 设置IIS的“ISAPI和CGI限制”中的“ASP.NET v4.0.0.30319”为允许 1. 解决方案 <system.webServer>    <modules ...

  10. Redis(三):windows下Redis的安装配置以及注意事项

    一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...