2017-10-14 10 views
1

스탠포드 파서의 결과를 NLTK와 비교하려고합니다. 그러나 이것은 나에게별로 도움이되지 않습니다.스탠포드 파서를 사용하는 종속 트리는 스탠포드 파서와 일치하지 않습니다.

stan_dep_parser = StanfordDependencyParser() # stanford parser from NLTK 
dependency_parser =stan_dep_parser.raw_parse("Four men died in an accident") 
dep = dependency_parser.next() 
for triple in dep.triples(): 
    print triple[1],"(",triple[0][0],", ",triple[2][0],")" 

전류 출력 :

nsubj (died , men) 
nummod (men , Four) 
nmod (died , accident) 
case (accident , in) 
det (accident , an) 

예상 출력에 따라 stanford parser에 :

nummod(men-2, Four-1) 
nsubj(died-3, men-2) 
root(ROOT-0, died-3) 
case(accident-6, in-4) 
det(accident-6, an-5) 
nmod(died-3, accident-6) 

NLTK 버전 : 3.2.4 스탠포드 파서 : 스탠포드 파서-3.8.0-모델

+0

어떤 버전의 Stanford Parser를 다운로드하셨습니까? 또한 어떤 버전의 NLTK를 사용하고 있습니까? 그리고 어떤 모델을 사용하고 있습니까,'englishPCFG.ser.gz'입니까? – alvas

+0

nltk 버전 : 3.2.4 Stanford Parser 버전 : stanford-parser-3.8.0-models – Lucky

+0

선거 구민 (constituency) 트리에 대해 동일한 결과를 제공하지만 왜 의존성 파서의 결과가 다른지 알지 못합니다. – Lucky

답변

2

직접 문제를 해결했습니다.

0 번호는 문장의 각 단어의 색인만큼
final_dependency = [] 
sentence = "Four men died in an accident" 
dependency_tree = StanfordDependencyParser() 
dependency_parser = dependency_tree.raw_parse(sentence) 
parsetree = list(dependency_parser)[0] 
for k in parsetree.nodes.values(): 
     if k["head"] == 0: 
      final_dependency.append(str(k["rel"]) + "(" + "Root" + "-" 
       + str(k["head"]) + "," + str(k["word"]) + "-" + str(k["address"]) + ")") 

가 그럼 난 단순한 문자열 연산과 예상 출력과 같이 단어와 숫자를 추가 :

나는 '루트'또는 문장의 '머리'를 발견했다.