根据http://nlp.stanford.edu/software/lex-parser.shtml,Stanford NLP 确实有一个解析器,可以识别句子的主语和谓语。您可以在线试用http://nlp.stanford.edu:8080/parser/index.jsp。您可以使用类型化的依赖关系来识别主语、谓语和宾语。
从示例页面中,我的狗也喜欢吃香肠这句话会给你这个解析:
(ROOT
(S
(NP (PRP$ My) (NN dog))
(ADVP (RB also))
(VP (VBZ likes)
(S
(VP (VBG eating)
(NP (NN sausage)))))
(. .)))
解析器也可以生成依赖:
poss(dog-2, My-1)
nsubj(likes-4, dog-2)
advmod(likes-4, also-3)
root(ROOT-0, likes-4)
xcomp(likes-4, eating-5)
dobj(eating-5, sausage-6)
依赖关系nsubj 显示主要谓词和主语——在本例中为likes 和dog。数字给出了单词在句子中的位置(出于某种原因,单索引)。 dobj 依赖关系显示了谓词和对象的关系。 xcomp 依赖项提供有关谓词的内部信息。
当谓词不是动词时,这也有效:我的狗很大并且负责给出:
poss(dog-2, My-1)
nsubj(large-4, dog-2)
cop(large-4, is-3)
root(ROOT-0, large-4)
cc(large-4, and-5)
conj(large-4, in-6)
pobj(in-6, charge-7)
这告诉我们large 是主要谓词(nsubj(large-4, dog-2)),但有一个系词(cop(large-4, is-3)),还有一个连词和一个带宾语的介词。
我对 API 不熟悉,所以无法给出确切的代码。也许知道 API 的其他人可以做到这一点。解析器记录在the Stanford NLP doc site。您可能还会发现Tools for text simplification (Java) 的答案很有帮助。 The Stanford Dependency Manual 中有更多关于依赖格式的信息。