我有一句话,我首先标记化然后使用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%的案例中,文本中紧随其后的任意数量的专有名词的确属于同一名词。就像“中央公园”那样,“罗纳德·麦克唐纳”就是这种情况。

问题:如何更改迭代在“标记”上的“专有名词”中的代码,提取所有NPP并将其写入变量中,就像现在一样-但是,当发现两个或多个紧接着彼此的(<NNP>+)时,它们被写为由空格分隔的单个字符串。

最佳答案

使用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']

关于python - NLTK-标记后加入专有名词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49715600/

10-13 22:40