2014-06-18 63 views
1

我需要從給定的文本中獲取基本關係。我發現 斯坦福依賴性,看着第一個基本的例子:解析斯坦福大學的依賴關係

LexicalizedParser lp = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz"); 

TreebankLanguagePack tlp = new PennTreebankLanguagePack(); 
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory(); 

String[] sent = new String[]{"vladimir", "putin", "was", "born", "in", "st.", "petersburg", "and", "he", "was", "not", "born", "in", "berlin", "."}; 
Tree parse = lp.apply(Sentence.toWordList(sent)); 
GrammaticalStructure gs = gsf.newGrammaticalStructure(parse); 
Collection<TypedDependency> tdl = gs.typedDependencies(); 

System.out.println(tdl); 

結果是:

[nn(putin-2, vladimir-1), nsubjpass(born-4, putin-2), auxpass(born-4, was-3), root(ROOT-0, born-4), prep(born-4, in-5), nn(petersburg-7, st.-6), pobj(in-5, petersburg-7), cc(born-4, and-8), nsubjpass(born-12, he-9), auxpass(born-12, was-10), neg(born-12, not-11), conj(born-4, born-12), prep(born-12, in-13), pobj(in-13, berlin-14)] 

一個更漂亮的輸出:現在

nn(putin-2, vladimir-1) 
nsubjpass(born-4, putin-2) 
auxpass(born-4, was-3) 
root(ROOT-0, born-4) 
prep(born-4, in-5) 
nn(petersburg-7, st.-6) 
pobj(in-5, petersburg-7) 
cc(born-4, and-8) 
nsubjpass(born-12, he-9) 
auxpass(born-12, was-10) 
neg(born-12, not-11) 
conj(born-4, born-12) 
prep(born-12, in-13) 
pobj(in-13, berlin-14) 

我的問題是:有沒有已經是解析關係的解析器? 例如,我想要得到的關係:「誕生於」,「普京」和「聖彼得堡」之間, 所以我需要考慮以下依賴性:

nn(putin-2, vladimir-1) 
nsubjpass(born-4, putin-2) 
auxpass(born-4, was-3) 
prep(born-4, in-5) 
nn(petersburg-7, st.-6) 
pobj(in-5, petersburg-7) 

所以我有我需要的所有信息。我可以寫一個解析器,它返回給我治理名詞,關係和dependet名詞,但如果已經有一個解析器我不需要寫我自己的。

那麼有沒有?

+0

變量「Sentence」是什麼? – user2372074

回答

0

據我所知,提取關係的問題可以通過在選區解析輸出使用

  1. Tregex實現(斯坦福依賴解析器據說遵循這條路線)

  2. 使用依賴解析器輸出如stanfrod依賴分析器。至於解析輸出,你可能會發現Chris的迴應。 Manning useful Stanford Parser - Traversing the typed dependencies graph

  3. 使用Daniel在他的答案中指出的語義角色標籤。

我會建議嘗試選擇2,1,3的順序。

相關問題