我有一句话,我首先标记化然后使用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/