编辑:好的,您正在使用斯坦福解析器。然后解析器会给出结果。例如,如果我在 In London, my friend ate a big apple and a pear.
上运行它,我会得到:
(ROOT
(S
(PP (IN In)
(NP (NNP London)))
(, ,)
(NP (PRP$ my) (NN friend))
(VP (VBD ate)
(NP
(NP (DT a) (JJ big) (NN apple))
(CC and)
(NP (DT a) (NN pear))))
(. .)))
主语是S下的NP(我的朋友),宾语是S下VP下的NP(一个大苹果和一个梨)。实际上,依存句法分析如下:
prep_in(ate-6, London-2)
poss(friend-5, my-4)
nsubj(ate-6, friend-5)
root(ROOT-0, ate-6)
det(apple-9, a-7)
amod(apple-9, big-8)
dobj(ate-6, apple-9)
det(pear-12, a-11)
dobj(ate-6, pear-12)
conj_and(apple-9, pear-12)
告诉你主语(朋友)和直接宾语(苹果、梨)的头部是什么。
显然,解析器并非没有错误,在句子倒装(主语跟在动词后面)的情况下,它会感到困惑:
(ROOT
(S
(PP (IN Across)
(NP
(NP (DT the) (NN clearing))
(CC and)
(NP (IN through))))
(NP (DT the) (NN stream))
(VP (VBD ran)
(NP (DT the)
(ADJP (JJ frightened))
(NNS deer)))
(. .)))
正确的解析应该是:
(ROOT
(S
(PP
(PP (IN Across)
(NP (DT the) (NN clearing)))
(CC and)
(PP (IN through)
(NP (DT the) (NN stream))))
(VP (VBD ran))
(NP (DT the)
(ADJP (JJ frightened))
(NNS deer))
(. .)))
然后,你会正确地将
the frightened deer
识别为主语。
该怎么办?你可以尝试通过在更多类似的句子上重新训练解析器来改进它(除了它们已经训练过的那些),但这是很多工作量。或者你可以尝试识别它无法正确处理的句子类型,并专注于识别错误。也不容易。你也可以尝试使用不同的解析器,比如
LinGO项目中使用的解析器,但它更难使用(我认为它需要lisp或类似的东西)
除了POS标记器,我还会得到一个
块分析器,然后:
- 主语是第一个(顶级)NP(名词短语)。在你的“Across the clearing”句子中,NP将是介词短语(PP)的一部分,因此你不会注意到它;它仍然会失败,因为存在倒装。
- 如果有话题,则对象是紧随有限动词后面的(顶级)NP。
根据块分析器的不同,你可能会错过协调NP,可能会剥夺NP的PP(获取
my friend
而不是
my friend from New York
)。
如果你负担不起运行块分析器,只需查找主/谓语的头:
- N或主语代词(
we但不包括
us),在有限动词之前(但要记住,存在像
John and me went to the store
这样的句子。
- N或宾格代词(
us但不包括
we),如果有的话。你应该添加一个检查,即N所属的NP紧随动词之后,并且它不是PP的一部分。假设你可以检查动词紧随
(Det) ((Adv) Adj)* N)
你还应该考虑问题(其中主语跟随有限动词,宾语跟随基本动词:
Do YOU see THE APPLE?
)。你也可以通过要求一个主语并在动词之后寻找它来处理倒装,如果你没有在之前找到它,但这会导致命令式出现问题(
Eat the deer!
)。不确定是否值得。
显然,稍微不寻常的句子,如带有无界依赖性的句子,会使你失去平衡(
Kim, Sandy knows Chris trusts
,其中
Kim
是
trusts
的对象)。如果你需要在这种情况下得到合理的答案,你需要运行一个真正的解析器。