如何解决斯坦福CoreNLP中特定名词短语的核心约束

时间:2015-04-06 06:21:06

标签: stanford-nlp

我有一系列相当大的文本文件,我希望在每个文件中解析特定名词短语的引用,例如。 '哈利波特'

我不想为参考分辨率的每一种可能性完全运行管道,因为这需要太长时间。

非常感谢!

这是我到目前为止所拥有的......

import edu.stanford.nlp.io.*;
import edu.stanford.nlp.pipeline.*;

import java.io.*;
import java.util.Properties;

public class Main {

public static void main(String[] args) throws IOException
{
    // SET INPUT AND OUTPUT FILES
    FileOutputStream xmlOut = new FileOutputStream(new File("nlp.xml"));
    String input_filename = "weblink_text.txt";
    String file_contents = IOUtils.slurpFileNoExceptions(input_filename);

    //SET PROPERTIES
    Properties props = new Properties();
    props.setProperty("annotators", "tokenize, cleanxml, ssplit, pos, lemma, ner, parse, dcoref");

    // ANNOTATE AND OUTPUT
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    Annotation annotation = new Annotation(file_contents);

    pipeline.annotate(annotation);
    pipeline.xmlPrint(annotation, xmlOut);

    System.out.println("Completed");
}
}

2 个答案:

答案 0 :(得分:2)

1)如果您只关心代词前因的共同参考解析,我建议您查看David Bamman的book-nlp

它为新颖长度的文本提供了非常快速的核心,但仅适用于代词前因(这可能是你最感兴趣的)。

然后,您可以阅读.tokens文件并构建自己的参考图表。

2)如果您真的需要解决coref的问题,请尝试设置dcoref.maxdist参数,以防止它回顾第1章中的第20章中的材料。然后,我会保存一些带注释的文本版本(例如序列化),以便稍后加载,这样您就不必继续运行它。

[编辑] 3)在不久的将来,斯坦福CoreNLP构建(https://github.com/stanfordnlp/CoreNLP/tree/master/src/edu/stanford/nlp/hcoref)中将有一个新的coref系统(hcoref),该系统基于depparse,速度非常快。我已经用100到500个句子长的文本来运行整本小说,并且一直在为我工作。 (hcorefdcoref.maxdist

中还没有等效词

另一个注意事项:如果解析时间过于昂贵,请尝试设置parse.maxlen

答案 1 :(得分:1)

不幸的是,需要完整的共同参考分析才能获得特定名词短语的任何可用注释。 (如果没有完整的分析,就不可能像代词一样解决强硬的回指。)

我能推荐的最好的是你在小块中进行处理,这些小块在核心参考方面相当“独立”(例如,书的章节)。