2013-11-03 80 views

回答

5

您可以在句子上運行dependency parsing算法,並找到root關係的依賴關係。例如,在運行了句「鸚鵡不會游泳」,通過Stanford Parser online demo,我得到了以下的依賴:

nsubj(swim-4, Parrots-1) 
aux(swim-4, do-2) 
neg(swim-4, not-3) 
root(ROOT-0, swim-4) 

其中每一行提供有關在句子中兩個詞之間的不同的語法關係的信息(見下文) 。你需要最後一行,它說swim是句子的根,即主要動詞。因此,爲了提取主要動詞,首先執行依賴性解析並找到root(ROOT-0, X)的依賴關係。 X將是主要動詞。

有幾種現成的依賴關係解析器,如可用於Stanford CoreNLPMalt parser的依賴關係解析器。我更喜歡斯坦福大學,因爲它具有可比性,但具有更好的文檔並支持多線程分析(如果您有大量文本)。斯坦福分析器輸出XML,所以你必須解析它才能得到上面的依賴信息。


爲了完整起見,對輸出的其餘部分進行簡要說明。第一行說parrots是句子中的第一個單詞,swim是第4個單詞。第二行說do是與swim有關的助動詞,第三行說not否定swim。有關每個依賴項的含義的更詳細解釋,請參閱Stanford typed dependency manual


編輯: 取決於你如何定義main verb,有些句子可以有一個以上的主要動詞,如I like cats and hate snakes。造成這種情況的依賴性解析包含的依賴關係:

root(ROOT-0, like-2) 
conj(like-2, hate-5) 

一起說,根據解析器主要動詞爲like,但hate是連體它。出於您的目的,您可能需要考慮likehate爲主。

+0

謝謝。這真是很好的解釋! –

+1

根並不總是一個動詞。 – kalu

+0

正確。讀者:請閱讀斯坦福手冊(鏈接),它比我看起來更微妙。 – mbatchkarov

-1

要獲得動詞(或任何其他Part-Of-Speech)有許多可用的監督和無監督算法,如Viterbi算法,隱馬爾可夫模型,布里爾標註器,約束格拉默等。即使我們有像NLTK(Natural Language Tool Kit)爲Python(以及類似的圖書館是也可用於Java),這些算法已經在其中編碼了這些算法。在任何文檔或句子中註釋POS是一項複雜的工作(尤其是當您需要高準確性時),並且您需要對此領域有深入的瞭解,先從基礎知識開始,持續努力可能會導致您開發一種算法,效率高於當時的效率。

+0

你只是在談論PoS標籤,它可以告訴你一個句子中的動詞是什麼,但不能告訴你哪一個動詞是主要動詞。例如,「我的貓喜歡吃西紅柿和玩洋娃娃」有三個動詞。 – mbatchkarov