Stanford NLP:将RegexNERAnnotator设置为caseInsensitive

时间:2016-06-13 06:39:39

标签: nlp stanford-nlp

我正在识别大型语料库中的资格。我正在使用NamedEntityTagAnnotation。

问题:

我的注释被视为区分大小写。我希望它们不区分大小写。 因此

学士学位学位

不需要额外输入

学士学位学位

我知道这是可能的。 RegexNERAnnotator有一个ignoreCase字段。但我不知道如何通过API访问RegexNERAnnotator。

我目前的代码(我从互联网上打断并与案件问题分开工作)如下:

        String prevNeToken = "O";
    String currNeToken = "O";
    boolean newToken = true;
    for (CoreLabel token : sentence.get(TokensAnnotation.class))
    {
      currNeToken = token.get(NamedEntityTagAnnotation.class);

      String word = token.get(TextAnnotation.class);

      if (currNeToken.equals("O"))
      {

        if (!prevNeToken.equals("O") && (sbuilder.length() > 0))
        {
          handleEntity(prevNeToken, sbuilder, tokens);
          newToken = true;
        }
        continue;
      }

      if (newToken)
      {
        prevNeToken = currNeToken;
        newToken = false;
        sbuilder.append(word);
        continue;
      }

      if (currNeToken.equals(prevNeToken))
      {
        sbuilder.append(" " + word);
      }
      else
      {

        handleEntity(prevNeToken, sbuilder, tokens);
        newToken = true;
      }
      prevNeToken = currNeToken;
    }

非常感谢任何协助。

1 个答案:

答案 0 :(得分:2)

答案在于如何设置管道。

    Properties props = new Properties();

    props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, regexner, depparse,  natlog,  openie");


    //props.put("regexner.mapping", namedEntityPropertiesPath);

    pipeline = new StanfordCoreNLP(props);
    pipeline.addAnnotator(new TokensRegexNERAnnotator(namedEntityPropertiesPath, true));

使用props.put(" regexner.mapping",namedEntityPropertiesPath);

使用pipeline.addAnnotator。

构造函数的第一个参数是NER数据文件的路径。第二个是布尔caseInsensitive。

请注意,这会使用斯坦福大学的NER列表以及您自己的NER列表。它还使用更复杂的NER数据文件。

请参阅http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/pipeline/TokensRegexNERAnnotator.html