【问题标题】:How to NER and POS tag a pre-tokenized text with Stanford CoreNLP?如何使用斯坦福 CoreNLP 对预先标记的文本进行 NER 和 POS 标记?
【发布时间】:2015-04-22 19:33:27
【问题描述】:

我在我的应用程序中使用了斯坦福的 CoreNLP 命名实体识别器 (NER) 和词性 (POS) 标记器。问题是我的代码事先对文本进行了标记,然后我需要对每个标记进行 NER 和 POS 标记。但是,我只能使用命令行选项而不是编程方式找到如何做到这一点。

谁能告诉我如何以编程方式使用斯坦福的 CoreNLP 对预标记文本进行 NER 和 POS 标记?

编辑:

我实际上使用的是单独的 NER 和 POS 指令。所以我的代码是按照斯坦福 NER 和 POS 包中给出的教程中的说明编写的。但是我的类路径中有 CoreNLP。所以我的类路径中有 CoreNLP,但使用的是 NER 和 POS 包中的教程。

编辑:

我刚刚发现这里有关于如何设置 CoreNLP 属性的说明 http://nlp.stanford.edu/software/corenlp.shtml 但我希望有一种快速的方法可以使用斯坦福 NER 和 POS 标记器来做我想做的事情,所以我不必重新编码!

【问题讨论】:

    标签: nlp stanford-nlp named-entity-recognition pos-tagger


    【解决方案1】:

    如果你设置了属性:

    tokenize.whitespace = true
    

    那么 CoreNLP 管道将在空格上进行标记,而不是默认的 PTB 标记。您可能还想设置:

    ssplit.eolonly = true
    

    这样您就只在换行符处拆分句子。

    【讨论】:

    • 问题是如何做到这一点?如何设置属性?
    • 您可以将这些行放在属性文件中,然后使用 -props 运行程序。或者,大多数单独的注释器都有一个带有 Properties 对象的构造函数,您可以通过那里传递属性。
    【解决方案2】:

    要以编程方式对您已经通过其他方式获得的标记列表运行分类器,而无需像将它们与空格一起粘贴然后再次进行标记,您可以使用Sentence.toCoreLabelList method

    String[] token_strs = {"John", "met", "Amy", "in", "Los", "Angeles"};
    List<CoreLabel> tokens = edu.stanford.nlp.ling.Sentence.toCoreLabelList(token_strs);
    for (CoreLabel cl : classifier.classifySentence(tokens)) {
      System.out.println(cl.toShorterString());
    }
    

    输出:

    [Value=John Text=John Position=0 Answer=PERSON Shape=Xxxx DistSim=463]
    [Value=met Text=met Position=1 Answer=O Shape=xxxk DistSim=476]
    [Value=Amy Text=Amy Position=2 Answer=PERSON Shape=Xxx DistSim=396]
    [Value=in Text=in Position=3 Answer=O Shape=xxk DistSim=510]
    [Value=Los Text=Los Position=4 Answer=LOCATION Shape=Xxx DistSim=449]
    [Value=Angeles Text=Angeles Position=5 Answer=LOCATION Shape=Xxxxx DistSim=199]
    

    【讨论】:

    • 在 3.8 中它现在是 CoreUtilities::toCoreLabelList
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多