NLTK - 在标记后加入专有名词

时间:2018-04-08 07:40:49

标签: python nltk

我有一个句子,我先用它标记,然后使用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>+)直接相互跟随,它们被写成由空格分隔的单个字符串。

1 个答案:

答案 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']