2011-03-27 112 views
7

我的工作是在一個句子中查找一個查詢(可以是noun+verb),然後提取該對象。斯坦福分析器:如何提取依賴關係?

例:"coding is sometimes a tough work."我的查詢會是:"coding is"

的類型依賴我得到的是:

nsubj(work-6, coding-1) 
cop(work-6, is-2)  
advmod(work-6, sometimes-3) 
det(work-6, a-4) 
amod(work-6, tough-5) 

我的程序應提取nsubj依賴,確定"coding"作爲查詢和保存"work"

可能這看起來很簡單,但直到現在,我沒有找到一種方法能夠提取特定類型的依賴關係,我真的需要這樣做才能完成我的工作。

任何幫助是值得歡迎的,

+0

哪種編程語言是您使用? – Kaarel 2011-03-29 09:27:20

+0

我正在使用java,但對於這個舊的評論,我找到了解決方案,我使用了StringTokonizer 2次,用「(」作爲分隔符,然後是機智「,」,最後我把解壓縮的標記放在一個xml文件中 – 2011-05-12 08:15:03

回答

1

我不認爲有一種方式來告訴解析器提取圍繞給定詞的依賴關係。但是,您可以遍歷每個句子的依存關係列表,搜索查詢詞出現在nsubj關係中的所有實例。

另外,你如何存儲句子的分析?如果(就像我從你的問題中收集到的)它是在一個文本文件中,你可以使用2個連續的greps,一個用於查詢單詞,另一個用於你想要的關係,以獲得相關其他單詞的列表。

10

您可以找到下面的代碼依賴:

Tree tree = sentence.get(TreeAnnotation.class); 
// Get dependency tree 
TreebankLanguagePack tlp = new PennTreebankLanguagePack(); 
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory(); 
GrammaticalStructure gs = gsf.newGrammaticalStructure(tree); 
Collection<TypedDependency> td = gs.typedDependenciesCollapsed(); 
System.out.println(td); 

Object[] list = td.toArray(); 
System.out.println(list.length); 
TypedDependency typedDependency; 
for (Object object : list) { 
typedDependency = (TypedDependency) object; 
System.out.println("Depdency Name"typedDependency.dep().nodeString()+ " :: "+ "Node"+typedDependency.reln()); 
if (typedDependency.reln().getShortName().equals("something")) { 
    //your code 
} 
+0

代碼是在Java中,它很好地解決了NLP領域的問題,特別是針對斯坦福大學核心NLP API。 @Alain對解決問題沒有意義嗎? – Imran 2013-03-11 09:23:33

+0

沒問題,但通常在SO上接受和支持的答案涉及到即使代碼非常簡單,也可以通過調整您的示例用例來解決原始問題?無論哪種方式,恐怕您都不會從作者處獲得更多反饋因爲這個問題在2年內沒有任何活動。 – Alain 2013-03-11 09:29:02

相關問題