Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何识别句子的主语?_Python_Nlp_Nltk - Fatal编程技术网

Python 如何识别句子的主语?

Python 如何识别句子的主语?,python,nlp,nltk,Python,Nlp,Nltk,Python+NLTK可以用来识别句子的主语吗?从我到现在所学到的是,一个句子可以被分解成一个头和它的从属词。例如,“我射杀了一头大象”。在这句话里,我和大象是被枪杀的家属。但我如何辨别这句话中的主语是I。正如(练习29)所说,“在英语中,定义句子S主语的一种常见方法是作为名词短语,它是S的子代和VP的兄弟。” 看:事实上,“I”是名词短语,是VP的兄弟姐妹S的孩子,而“大象”不是。英语有两种语态:主动语态和被动语态。让我们看一下最常用的语音:主动语音 它遵循主语动词宾语模式。要标记主题,请编写

Python+NLTK可以用来识别句子的主语吗?从我到现在所学到的是,一个句子可以被分解成一个头和它的从属词。例如,“我射杀了一头大象”。在这句话里,我和大象是被枪杀的家属。但我如何辨别这句话中的主语是I。

正如(练习29)所说,“在英语中,定义句子S主语的一种常见方法是作为名词短语,它是S的子代和VP的兄弟。”


看:事实上,“I”是名词短语,是VP的兄弟姐妹S的孩子,而“大象”不是。英语有两种语态:主动语态和被动语态。让我们看一下最常用的语音:主动语音

它遵循
主语动词宾语
模式。要标记主题,请编写带有POS标记的规则集。标记句子
I[名词]射杀[动词]大象[名词]
。如果你看到第一个名词是主语,然后是动词,然后是宾语

如果你想让事情变得更复杂,可以用一句话——
我用枪射杀了一头大象。在这里,介词或从属连词如with、at、in可以指定角色。在这里,这个句子将被标记为
I[名词]用枪[名词]射击[动词]大象[名词]
。你可以很容易地用这个词来表达你的意思。您可以构建一个基于规则的系统,以获取句子中每个单词的角色

还可以查看被动语态的模式,并为其编写规则。

您可以使用

代码
您可以通过执行类似于
doc=nlp(text.decode('utf8'))
的操作来掩盖这个问题,但这可能会在将来给您带来更多的bug

信用证:

pip安装rake\u nltk
)是一个python库,它包装了
nltk
,显然使用了rake算法

来自rake\u nltk导入rake
rake=rake()
kw=rake.从文本中提取关键字(“Python+NLTK可以用来识别句子的主语吗?”)
排名的短语=rake.get\u排名的短语()
打印(排名靠前的短语)
#输出按排名排序的关键字
>>>['used'、'subject'、'Session'、'python'、'nltk'、'identify']
默认情况下,使用
nltk
中的停止字列表。您可以通过在构造函数中传递自定义停止字列表和标点字符来提供它们:

rake = Rake(stopwords='mystopwords.txt', punctuations=''',;:!@#$%^*/\''')
默认情况下,用于标点符号


构造函数还接受
语言
关键字,该关键字可以是
nltk
支持的任何语言

斯坦福Corenlp工具也可用于提取句子的主语-关系-对象信息

附加相同的屏幕截图:


感谢您为我指出了适当的部分。我能够通过书中的例子识别NP,但我现在明白了,识别主题将是两个标准的组合——S的孩子和VP的兄弟姐妹。你能不能给我举一个代码例子,说明句子中的主语?谢谢。这是一篇老文章,但是如何在不手动定义树的情况下生成树呢?我还没有看到,我想把我的问题和之前问过的一个类似的问题联系起来——以及@mjv给出的答案。也许问题的作者和/或回答者可以提供更多的信息。谢谢我不明白这个答案。那个问题是关于给Spacy提供非unicode数据。与这个问题无关。如何找到主动动词和被动动词?
rake = Rake(stopwords='mystopwords.txt', punctuations=''',;:!@#$%^*/\''')