2017-08-29 4 views
0

J'utilise l'analyse de dépendances de coreNLP pour un de mes projets. Les dépendances de base et améliorées sont des résultats différents pour une dépendance particulière. J'ai utilisé le code suivant pour obtenir des dépendances améliorées.Les dépendances de base et améliorées donnent des résultats différents dans Standford coreNLP

val lp = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 
lp.setOptionFlags("-maxLength", "80") 
val rawWords = edu.stanford.nlp.ling.Sentence.toCoreLabelList(tokens_arr:_*) 
val parse = lp.apply(rawWords) 
val tlp = new PennTreebankLanguagePack() 
val gsf:GrammaticalStructureFactory = tlp.grammaticalStructureFactory() 
val gs:GrammaticalStructure = gsf.newGrammaticalStructure(parse) 
val tdl = gs.typedDependenciesCCprocessed() 

Pour l'exemple suivant,

Account name of ramkumar. 

J'utilise API simple pour obtenir des dépendances de base. La dépendance que je reçois entre (compte, nom) est (composé). Mais quand j'utilise le code ci-dessus pour obtenir une dépendance améliorée, j'obtiens la relation entre (compte, nom) comme (dobj).

Quelle est la solution à ce problème? Est-ce un bug ou est-ce que je fais quelque chose de mal?

Répondre

0

Quand je lance cette commande:

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse -file example.txt -outputFormat json 

Avec votre texte d'exemple dans le fichier example.txt, je vois compound que la relation entre ces deux mots pour les deux types de dépendances.

J'ai également essayé ceci avec le simple API et ai obtenu les mêmes résultats.

Vous pouvez voir ce que simple produit avec ce code:

package edu.stanford.nlp.examples; 

import edu.stanford.nlp.semgraph.SemanticGraphFactory; 
import edu.stanford.nlp.simple.*; 

import java.util.*; 

public class SimpleDepParserExample { 

    public static void main(String[] args) { 
    Sentence sent = new Sentence("...example text..."); 
    Properties props = new Properties(); 
    // use sent.dependencyGraph() or sent.dependencyGraph(props, SemanticGraphFactory.Mode.ENHANCED) to see enhanced dependencies 
    System.out.println(sent.dependencyGraph(props, SemanticGraphFactory.Mode.BASIC)); 
    } 

} 

Je ne sais rien au sujet des interfaces Scala pour Stanford CoreNLP. Je devrais également noter que mes résultats emploient le dernier code de GitHub, bien que je présume que Stanford CoreNLP 3.8.0 produirait également des résultats semblables. Si vous utilisez une ancienne version de Stanford CoreNLP qui pourrait être une cause potentielle de l'erreur.

Mais en exécutant cet exemple de diverses manières en utilisant Java, je ne vois pas le problème que vous rencontrez.