当前位置: 首页 > 知识库问答 >
问题:

如何从复句中提取主要的主语和宾语短语?

唐煜
2023-03-14

在斯坦福解析器的文档中,给出了以下示例语句:

印度官员今天表示,印度有史以来最强的降雨导致金融中心孟买关闭,通讯线路中断,机场关闭,数千人被迫在办公室睡觉或在夜间步行回家。

这会产生解析树:

[ROOT[S[NP[NP[DT The][JJS stress][NN rain][VP[ADVP[RB ever][VBN recorded][PP[IN IN][NP[NNP India]]]][VP[VP[VBD shut][PRT[RP down][NP[NP DT The][JJ financial][NN NN hub][PP[IN of][NP NNP Mumbai][]][PP[IN of][NP[NNS people]]][S[VP[TO][VP[VP[VB sleep][PP[IN][NP[PRP$ITS][NNS Office]]][CC或[VP[VB walk][NP[NN home]][PP[IN IN during NP[DT the][NN NN NN night]]]]]][NP NNS官员][VP VBD said][NP TMP[NN today]][NN NN

(见http://i.imgur.com/mZLBDmh.png).

什么样的NLP工具能够输出上述复句示例中的句子主语和宾语?期望输出:

sentence_subj_phrase = "the strongest rain ever recorded in India"
sentence_obj_phrase = "the financial hub of Mumbai"

从最初的OP帖子(只是关于他认为不起作用的细节):

提取句子中主语和宾语的一种简单方法是找出动词前后的名词短语。然而,在复杂的句子中,有多个动词,因此有多个主语和宾语。可以将这样的复杂句子视为多个句子(使用独立从句的第一部分作为“根”,并用每个从属从句替换第二部分),但通常第一个从句是最重要的,可以被视为句子的主要“主题”。

做一个简单的BFS来找到动词之前的第一个NP将导致“官员”是主语,因为它处于最低深度级别。这无法捕捉包含主语的第一个子句的直觉。我尝试的一种方法是在第一个“基”S节点(即植根于S节点的最低级别子树)中搜索NPs,但在这种情况下,这将捕获植根于S3的节点。

共有3个答案

常温文
2023-03-14

下面是一个Python Spacy方法:

from spacy.en import English
nlp = English()


SUBJECTS = ["nsubj","nsubjpass"] ## add or delete more as you wish
OBJECTS = ["dobj", "pobj", "dobj"] ## add or delete more as you wish


sent = "The strongest rain ever recorded in India shut down the financial hub of Mumbai, snapped communication lines, closed airports and forced thousands of people to sleep in their offices or walk home during the night, officials said today."

doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ in SUBJECTS) ]
obj_toks = [tok for tok in doc if (tok.dep_ in OBJECTS) ]

print("Subjects:", sub_toks)
print("Objects :", obj_toks)
Subjects: [rain, officials]
Objects : [India, hub, Mumbai, lines, thousands, people, offices, night]
卫乐童
2023-03-14

需要注意的是,当你谈论语法主语和宾语时,他们遵循的是大多数NLP任务所遵循的结构主义语言学理论。

接下来,当你谈论语法主语和宾语时,你应该只提到实体(即事物/事件)本身,而不包括实体修饰语:“印度有史以来最强的雨”

entity = "rain"
entity modifiers = [('Adjective/Preposition_Phrase', "ever recorded in India"), ("Determiners", "the"), (Adjective_Phrase, "strongest")]
entity phrase = "The strongest rain"
entity phrase with all posssible modifiers (EP_mod)= "the strongest rain ever recorded in India"

然后我们回到如何检测EP_mod的NLP任务:

>

  • 首先,你可以尝试找出一个算法来确定复合句中的主要谓词(即浅层计算语法中的动词)。(我建议,在解析树的最顶层找到动词)

    然后,您需要找到包含主谓词的sub/OBJ实体的短语。(任何普通的NLP解析器都应该告诉您这一点)

    最后,您需要找到包含主谓词的sub/OBJ实体的短语的修饰符(可能您需要找到一个依赖项解析器(斯坦福解析器是一个依赖项解析器),它为您提供注释,说明sub_短语支配修饰符_短语

    你所要求的是当前现有工具的混搭,所以最好的解决方案是吃你自己的狗粮解决方案。玩得开心=)

  • 董和泽
    2023-03-14

    你似乎在某种程度上混淆了主题和语法主语的概念。“官员”是“说”的一个非常好的语法主语。正如你所解释的,你应该考虑寻找从句的主语(树中的“S”子树)而不是句子的主语。“最强的雨......”是你例子中S_2的语法主语。

    如果你想要的只是句子中任何一个从句的第一个语法主语,那么使用你选择的任何算法(S中的NP)在所有S子树中找到所有主语-

     类似资料:
    • 我想使用从句子中找到谓语和主语。这种技术在的世界中有任何名称吗?或者有什么方法可以做到这一点吗? 他喜欢孩子。结果:(他,喜欢孩子)

    • 我在一个机器翻译项目中工作。为了继续我的工作,我需要识别句子的主语、动词、宾语。目前我正在使用斯坦福NLP解析器来分析这个句子。但我不知道如何提取SVO。我有什么想法可以考虑吗?

    • 我需要提取句子中单词的关系。我最感兴趣的是确定主语、谓语和宾语。例如,对于下面的句子: 我想有: 斯坦福NLP能做到吗?我尝试了他们的注释器,但它似乎没有像我预期的那样工作?也许还有其他软件可以产生这个结果?

    • 看到截图了吗 从图像解析器中可以看到,它返回NP,VP,PP,NP。我希望能够访问不同深度的所有短语。例如,in depth=1有两个短语NP和VP,in depth=2有一些其他短语,in depth=3有一些其他短语。如何使用python访问属于depth=n的短语?

    • 我试图用NLTK从句子中提取介词短语。有没有一种方法可以让我自动做到这一点(例如,向函数输入一个句子,然后返回它的介词短语)? 这里的例子似乎要求你先从语法开始,然后才能得到解析树。我能自动获取语法并使用它来获取解析树吗? 显然,我可以标记一个句子,挑出介词和后面的名词,但当介词补语是复合词时,这很复杂。

    • 我意识到完美地将主语名词短语和宾语名词短语从句子中分离出来是一个开放的研究问题,在这里不容易解释,但有没有一种聪明的方法(假设我已经有一个带有词性标记的句子)适用于大多数句子,或者至少适用于相对简单的句子?我知道,简单地假设第一个名词短语是主语是一个很好的近似,但在以介词短语开头的句子中(例如,“穿过空地,穿过小溪,跑过受惊的鹿”。),这是失败的。理想情况下,我想要一个能识别这个主题的东西。 作为