2016-06-13 11 views
1

Ich identifiziere Qualifikationen in einem großen Korpus. Ich verwende NamedEntityTagAnnotation.Stanford NLP: RegexNERAnnotator auf caseInsensitive setzen

Problem:

Meine Anmerkungen gelesen werden in Groß- und Kleinschreibung. Ich möchte, dass sie nicht zwischen Groß- und Kleinschreibung unterscheiden. Daher

Bachelor GRAD

benötigt keine zusätzlichen Eintrag von

Bachelor GRAD

Ich weiß, das ist möglich. RegexNERAnnotator hat ein Feld für ignoreCase. Aber ich weiß nicht, wie ich über die API auf RegexNERAnnotator zugreifen kann.

Mein aktueller Code (die ich im Internet cadged ab und arbeite abgesehen von dem Fall Ausgabe) ist wie folgt:

 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; 
    } 

Jede Hilfe wäre sehr dankbar.

Antwort

2

Die Antwort ist in wie Sie die Pipeline einrichten.

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)); 

Sie nicht Verwendung props.put ("regexner.mapping", namedEntityPropertiesPath);

Verwenden Sie pipeline.addAnnotator.

Das erste Argument für den Konstruktor ist der Pfad zu Ihrer NER-Datendatei. Die zweite ist eine boolesche caseInsensitive.

Beachten Sie, dass dies Stanfords NER-Listen sowie Ihre eigenen verwendet. Es verwendet auch eine komplexere NER-Datei.

Siehe http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/pipeline/TokensRegexNERAnnotator.html