当前中文指代消解领域比较活跃的研究者是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. Spring中AOP的理解

    1.AOP的概念 AOP(AspectOriented Programming,面向切面编程)指的是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下个程序动态统一添加功能的一种技术.AOP ...

  2. Unity命令行模式,也能「日志实时输出」

    转自自己的简书:http://www.jianshu.com/p/bd97cb8042a9 如果你使用过Unity命令行模式(batchmode),来实现Unity自动化编译构建,你肯定会遇到过这样的 ...

  3. HTML5中标记与特殊属性

    不允许写结束标记的元素有(只允许<元素/>): area.base.br.col.command.embed.hr.img.input. keygen.link.meta.param.so ...

  4. 08-hibernate注解-多对多单向外键关联

    多对多单向外键 1,学生和教师构成多对多的关联关系 2,其中一个多方持有另一个多方的集合对象(学生持有教室的集合) 3,通过注解@JoinTable,创建中间表(作为多对多的载体,用来确定学生和教师的 ...

  5. linux route命令使用

    说明:route命令是打印和操作ip路由表描述:route操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主 机或者一个网络通过一个网络接口,如eth0.当使用"add&qu ...

  6. JavaScript入门:002—JS代码放置的位置

    JavaScript在页面中使用,那么这些JS代码应该放在什么位置呢?以下来看一下. 一般来说有两种方式.写在界面上和使用.js文件.1.1界面上的Head部分能够直接放在head标签内,例如以下代码 ...

  7. unity3d世界坐标系和本地坐标系

    transform.Translate(Vector3.forware);//向着自己坐标前方 transform.Translate(Vector3.forware,Space.World);//向 ...

  8. sql关于group by之后把每一条记录的详情的某个字段值合并提取的方法

    在利用group by写了统计语句之后,还有一个查看每一个记录详情的需求, 首先想到的是根据group by的条件去拼接查询条件, 但是条件有点多,拼接起来不仅麻烦,还容易出错, 所以想到要在grou ...

  9. Mac OS 下安装mysql环境

    传送门:Mac下安装与配置MySQL   mac 上怎么重置mysql的root的密码? 一.下载mysql 进入官方下载地址:https://www.mysql.com/downloads/ 1.找 ...

  10. UVA812-Trade on Verweggistan(暴力)

    题目链接 题意:商人要去买pruls这样的东西.然后它的价值是一个序列,买的时候要严格从头到尾取,比方你要买第5个,那么前4个也要一起买下来,求商人能获得的最大的利润. 思路:最大利润肯定就是每一个序 ...