2015-01-09 20 views
5

Online demoda görüldüğü gibi stanford corenlp kullanarak aynı bağımlılık çözümlemesini nasıl programlanabilir?Bağımlılık, çıktıları tam olarak çevrimiçi demo olarak nasıl alır?

Aşağıdaki cümleye bağımlılık ayrıştırmasını elde etmek için corenlp paketini kullanıyorum.

Teksas'taki ikinci sağlık çalışanı, Ebola'nın pozitif olduğunu söylüyor, yetkililer söylüyor.

Programlı stanford corenlp 3.5.0 paketini kullanarak aşağıdaki çıktıyı almak

  Properties props = new Properties(); 
      props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref"); 
      StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 

      String text = "Second healthcare worker in Texas tests positive for Ebola , authorities say ."; // Add your text here! 
      Annotation document = new Annotation(text); 
      pipeline.annotate(document); 
      String[] myStringArray = {"SentencesAnnotation"}; 
      List<CoreMap> sentences = document.get(SentencesAnnotation.class); 
      for(CoreMap sentence: sentences) { 
       SemanticGraph dependencies = sentence.get(BasicDependenciesAnnotation.class); 
       IndexedWord root = dependencies.getFirstRoot(); 
       System.out.printf("root(ROOT-0, %s-%d)%n", root.word(), root.index()); 
       for (SemanticGraphEdge e : dependencies.edgeIterable()) { 
        System.out.printf ("%s(%s-%d, %s-%d)%n", e.getRelation().toString(), e.getGovernor().word(), e.getGovernor().index(), e.getDependent().word(), e.getDependent().index()); 
       } 
      } 

    } 

aşağıdaki kodu kullanarak ayrıştırma ulaşmaya çalışıyorum.

root(ROOT-0, worker-3) 
amod(worker-3, Second-1) 
nn(worker-3, healthcare-2) 
prep(worker-3, in-4) 
amod(worker-3, positive-7) 
dep(worker-3, say-12) 
pobj(in-4, tests-6) 
nn(tests-6, Texas-5) 
prep(positive-7, for-8) 
pobj(for-8, ebola-9) 
nsubj(say-12, authorities-11) 

Ancak çevrimiçi demo işaretleri kök olarak söylüyorlar farklı bir cevap verir ve ayrıştırma içindeki kelimeler arasında ccomp gibi diğer ilişkileri vardır.

amod(worker-3, Second-1) 
nn(worker-3, healthcare-2) 
nsubj(tests-6, worker-3) 
prep(worker-3, in-4) 
pobj(in-4, Texas-5) 
ccomp(say-12, tests-6) 
acomp(tests-6, positive-7) 
prep(positive-7, for-8) 
pobj(for-8, Ebola-9) 
nsubj(say-12, authorities-11) 
root(ROOT-0, say-12) 

Çıktılarımı çevrimiçi demo ile eşleştirmek için nasıl çözebilirim?

+0

Çözümleyicinin deterministik olduğuna inanıyorum. CoreNLP'nin aynı sürümünü çevrimiçi demo olarak kullandığınızdan ve aynı modeli kullandığınızdan emin olun. Stanford ekibine e-posta göndermeniz ve web sitesinde hangi versiyonun/modelin çalıştırıldığını sormanız gerekebilir. – mbatchkarov

cevap

9

Farklı çıktının nedeni, parser demo kullanırsanız, bağımsız çözümleyici dağıtımı kullanılmakta ve kodunuz tüm CoreNLP dağıtımını kullanmaktadır. Her ikisi de aynı ayrıştırıcıyı ve aynı modelleri kullanıyor olsa da, CoreNLP'nin varsayılan yapılandırması ayrıştırıcıyı çalıştırmadan önce bir konuşma bölümü (POS) tetikleyicisini çalıştırır ve ayrıştırıcı bazı durumlarda farklı sonuçlara yol açabilen POS bilgilerini içerir. lemma, ner ve dcoref annotators tüm POS etiketleri gerektiren bu sizin böylece, ancak

props.put("annotators", "tokenize, ssplit, parse, lemma, ner, dcoref"); 

Not: Eğer annotators listesini değiştirerek POS tagger devre dışı bırakabilir aynı sonuçları elde etmek için

açıklamaların sırasını değiştirmek zorunda.

Ayrıca, her zaman kodunuzla aynı çıktıyı üretmesi gereken bir CoreNLP demo da vardır.

+0

Açıklama için teşekkürler. Bahsettiğiniz annotatorları kullanarak, bağımlılık ayrıştırma çıktısını tam olarak bahsettiğim örnek için çevrimiçi demodaki gibi alabildiğimi doğruladım. Bunu doğru cevap olarak işaretliyorum. –

İlgili konular