2017-05-06 2 views
1

J'ai un problème dans lequel j'essaye de reconnaître l'entité de nom de nombre d'un texte employant Stanford, dans le cas où j'ai par exemple 20 millions Il récupère comme ceci "Nombre": ["20 -5 "," million-6 "], Comment puis-je optimiser la réponse pour que 20 millions se rejoignent? et Comment puis-je ignorer le numéro d'index comme (5,6) dans l'exemple ci-dessus? J'utilise le langage Java.Reconnaissance d'entité de nom de numéro dans Stanford

public void extractNumbers(String text) throws IOException { 
    number = new HashMap<String, ArrayList<String>>(); 
    n= new ArrayList<String>(); 
    edu.stanford.nlp.pipeline.Annotation document = new edu.stanford.nlp.pipeline.Annotation(text); 
    pipeline.annotate(document); 
    List<CoreMap> sentences = document.get(CoreAnnotations.SentencesAnnotation.class); 
    for (CoreMap sentence : sentences) { 
     for (CoreLabel token : sentence.get(CoreAnnotations.TokensAnnotation.class)) { 

      if (!token.get(CoreAnnotations.NamedEntityTagAnnotation.class).equals("O")) { 

       if (token.get(CoreAnnotations.NamedEntityTagAnnotation.class).equals("NUMBER")) { 
        n.add(token.toString()); 
     number.put("Number",n); 
       } 
      } 

     } 

    } 
+0

Vous pourriez vouloir développer un peu. Quel modèle de nerin avez-vous utilisé? Quelle langue utilisez-vous? Aussi un extrait de code pour nous montrer exactement ce que vous avez fait aiderait aussi. – entrophy

+0

@entrophy J'ai édité la question :) –

+0

quel objet de la classe est 'pipeline' ici. Comme dans quel pipeline de Stanford utilisez-vous. – entrophy

Répondre

0

Pour obtenir le texte exact de tout objet de classe CoreLabel utiliser simplement token.originalText() au lieu de token.toString()

Si vous besoin d'autre chose de ces jetons, jetez un oeil à CoreLabel « s javadoc.

+0

Cela fonctionne bien pour ma deuxième question, merci beaucoup –