在Stanford CoreNLP中添加新的注释器

时间:2013-11-09 23:36:18

标签: java annotations stanford-nlp

我正在尝试根据http://nlp.stanford.edu/downloads/corenlp.shtml中的说明在Stanford CoreNLP中添加一个新的注释器。

“添加新的注释器 StanfordCoreNLP还可以通过反射添加新的注释器,而无需更改StanfordCoreNLP.java中的代码。要创建新的注释器,请扩展类edu.stanford.nlp.pipeline.Annotator并使用签名(String,Properties)定义构造函数。然后,将属性customAnnotatorClass。FOO=BAR添加到用于创建管道的属性中。如果FOO随后被添加到注释器列表中,则将创建类BAR,其名称用于创建它并传入属性文件。“

我为我的新注释器创建了一个新类,但我不能放入传入的属性文件。 我只把新的注释器放在管道中。

props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref, regexner, color");
props.setProperty("customAnnotatorClass.color", "myPackage.myPipeline");

是否有任何示例代码可以帮助我?

1 个答案:

答案 0 :(得分:2)

如果你愿意,你可以拥有我的。有趣的东西始于// adding our own annotator property

/** Annotates a document with our customized pipeline.
 * @param text A text to process
 * @return The annotated text
 */
private Annotation annotateText(String text) {
    Annotation doc = new Annotation(text);

    StanfordCoreNLP pipeline;

    // creates a StanfordCoreNLP object, with POS tagging, lemmatization,
    // NER, parsing, and coreference resolution
    Properties props = new Properties();
    // alternative: wsj-bidirectional
    try {
        props.put(
                "pos.model",
                "edu/stanford/nlp/models/pos-tagger/wsj-bidirectional/wsj-0-18-bidirectional-distsim.tagger");
    } catch (Exception e) {
        e.printStackTrace();
    }
    // adding our own annotator property
    props.put("customAnnotatorClass.sdclassifier",
            "edu.kit.ipd.alicenlp.ivan.analyzers.StaticDynamicClassifier");

    // configure pipeline
    props.put(
                "annotators", 
                "tokenize, ssplit, pos, lemma, ner, parse, sdclassifier");
    pipeline = new StanfordCoreNLP(props);

    pipeline.annotate(doc);
    return doc;
}