我认为您的问题是将复杂或复合句子转换为简单句子的任务。
基于文献Sentence Types,一个简单的句子由一个独立的子句组成。复合复合句由至少两个从句构成。此外,从句必须有主语和动词。
所以你的任务是将句子分成构成句子的从句。
Stanford CoreNLP 的依赖解析是将复合句和复杂句拆分为简单句的完美工具。你可以试试demo online。
从您的例句中,我们将得到 Stanford typed dependency (SD) 表示法的解析结果,如下所示:
nsubj(CEO-6, John-1)
nsubj(played-11, John-1)
cop(CEO-6, was-4)
det(CEO-6, the-5)
rcmod(John-1, CEO-6)
det(company-9, a-8)
prep_of(CEO-6, company-9)
root(ROOT-0, played-11)
dobj(played-11, golf-12)
子句可以从关系(在 SD 中)中识别出哪个类别是主语,例如nsubj,nsubjpass。见Stanford Dependency Manual
基本从句可以从head作为动词部分,dependent作为主语部分。从上面的 SD 中,有两个基本子句,即
在获得基本分句后,你可以添加另一个部分,使你的分句成为一个完整而有意义的句子。为此,请咨询Stanford Dependency Manual。
顺便说一句,您的问题可能与Finding meaningful sub-sentences from a sentence有关
回答第三条评论:
一旦你得到一对主语和动词,即nsubj(CEO-6, John-1),获取所有链接到该依赖项的依赖项,除了属于主题的任何依赖项,然后从这些依赖项中提取唯一词.
以 nsubj(CEO-6, John-1) 为例,如果你从 John-1 开始遍历,你会得到 nsubj(played-11, John-1) 但你应该忽略它,因为它的类别是主题。
下一步是从 CEO-6 部分开始遍历。你会得到
cop(CEO-6, was-4)
det(CEO-6, the-5)
rcmod(John-1, CEO-6)
prep_of(CEO-6, company-9)
根据上面的结果,您需要遍历新的依赖项(即找到另一个在头或依赖项中具有 was-4, the-5, company-9 的依赖项)。
现在你的依赖是
cop(CEO-6, was-4)
det(CEO-6, the-5)
rcmod(John-1, CEO-6)
prep_of(CEO-6, company-9)
det(company-9, a-8)
在这一步中,您已经完成了对链接到 nsubj(CEO-6, John-1) 的所有依赖项的遍历。接下来,从所有的 head 和dependent 中提取单词,然后根据附加到这些单词的数字按升序排列单词。这个数字表示原句中的词序。
John was the CEO a company
我们的新句子少了一个部分,即of。这部分隐藏在 prep_of(CEO-6, company-9) 中。如果您阅读Stanford Dependency Manual,则有两种SD,折叠式和非折叠式。请阅读它们以了解为什么这个 of 被隐藏以及如何获得这个隐藏部分的词序。
用同样的方法,你会得到第二句话
John played golf