我有一个句子,我先用它标记,然后使用nltk标记:
sentence = 'Ronald McDonald exercised at the Central Park on Monday.'
tokens = nltk.word_tokenize(sentence)
print(tokens)
tagged = nltk.pos_tag(tokens)
print(tagged)
使用nltk.pos_tag,Ronald,McDonald,Central,Park和Monday成为专有名词(NNP) - 这是正确的。我现在把句子的所有专有名词写在另一个变量中,因为我想稍后使用它们。
propernouns = [word for word,pos in tagged if pos == 'NNP']
print(propernouns)
现在,在95%的案例中,任何在文本中直接跟随的专有名词都属于一起。 “罗纳德麦当劳”就像“中央公园”一样。
问题:如何更改迭代“标记”的“propernouns”中的代码,提取所有NPP并将其写入变量中,就像现在一样 - 但是当它找到2或更多(<NNP>+)
直接相互跟随,它们被写成由空格分隔的单个字符串。
答案 0 :(得分:0)
使用itertools.groupby
对具有相同NNP标记的连续单词组进行分组:
from itertools import groupby
groups = groupby(tagged, key=lambda x: x[1]) # Group by tags
names = [[w for w,_ in words] for tag,words in groups if tag=="NNP"]
#[['Ronald', 'McDonald'], ['Central', 'Park'], ['Monday']]
names = [" ".join(name) for name in names if len(name)>=2]
#['Ronald McDonald', 'Central Park']