赞
踩
在NLTK中,如何遍历已解析的句子以返回名词短语字符串列表?
我有两个目标:
(1)创建名词短语列表,而不是使用’traverse()’方法打印它们.我目前使用StringIO来记录现有traverse()方法的输出.这不是一个可接受的解决方案.
(2)解析名词短语字符串,以便:'(NP Michael / NNP Jackson / NNP)成为’Michael Jackson’.在NLTK中有解除解析的方法吗?
NLTK文档建议使用traverse()来查看名词短语,但是如何在这个递归方法中捕获’t’,以便生成一个字符串名词短语列表?
from nltk.tag import pos_tag
def traverse(t):
try:
t.label()
except AttributeError:
return
else:
if t.label() == 'NP': print(t) # or do something else
else:
for child in t:
traverse(child)
def nounPhrase(tagged_sent):
# Tag sentence for part of speech
tagged_sent = pos_tag(sentence.split()) # List of tuples with [(Word, PartOfSpeech)]
# Define several tag patterns
grammar = r"""
NP: {
?*} # chunk determiner/possessive, adjectives and noun{+} # chunk sequences of proper nouns
{+} # chunk consecutive nouns
"""
cp = nltk.RegexpParser(grammar) # Define Parser
SentenceTree = cp.parse(tagged_sent)
NounPhrases = traverse(SentenceTree) # collect Noun Phrase
return(NounPhrases)
sentence = "Michael Jackson likes to eat at McDonalds"
tagged_sent = pos_tag(sentence.split())
NP = nounPhrase(tagged_sent)
print(NP)
目前打印:
(NP Michael / NNP Jackson / NNP)
(NP麦当劳/ NNP)
并将’无’存储到NP
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。