赞
踩
在上一篇<NLTK基础 | 一文轻松使用NLTK进行NLP任务(附视频)>中,简单介绍了NLTK的安装和使用。大家都知道命名实体识别作为NLP几大基础任务之一,在工业界应用也是非常广泛。那么NLTK包能不能进行命名实体识别呢?下面将详细介绍NLTK如何出色的完成命名实体识别任务!
命名实体识别作为自然语言处理的子任务之一,旨在通过算法能够自动的识别出一句话中的实体,比如人物、地点、物品、时间、数字等等。
NLTK包中内置命名实体识别算法,主要分为两种:(1) 识别句子中所有命名实体;(2) 将命名实体识别为它们各自的类型,例如人物,地点,位置等。
这里举一个例子:
import nltk from nltk.corpus import state_union from nltk.tokenize import PunktSentenceTokenizer train_text = state_union.raw("2005-GWBush.txt") sample_text = state_union.raw("2006-GWBush.txt") custom_sent_tokenizer = PunktSentenceTokenizer(train_text) tokenized = custom_sent_tokenizer.tokenize(sample_text) def process_content(document): words = nltk.word_tokenize(document) tagged = nltk.pos_tag(words) namedEnt = nltk.ne_chunk(tagged, binary=True) return namedEnt namedEnt = process_content(tokenized[6])
在这里,当binary=True
,这意味着某物是命名实体,还是不是。没有进一步的细节。结果是:
如果将binary=False
,则结果为:
随即,您可以看到一些内容。当binary=False
时,它将采用相同的方法,但最终将像"White House"这样的术语拆分为"White"和"House",就好像它们是不同的一样,而我们可以在binary=True
选项中看到命名实体识别中"White House"是同一个实体的一部分是正确的。
根据你的目标,可以按照自己的意愿使用binary
选项。如果binary=False
,则可以得到以下命名实体的类型(ps:这是binary=True所不具备的):
- named_entities = []
- for tagged_tree in namedEnt:
- if hasattr(tagged_tree, 'label'):
- entity_name = ' '.join(c[0] for c in tagged_tree.leaves())
- entity_type = tagged_tree.label()
- named_entities.append((entity_name, entity_type))
- named_entities = list(set(named_entities))
-
- entity_frame = pd.DataFrame(named_entities, columns=['Entity Name', 'Entity Type'])
- print(entity_frame)
-
- 输出结果为:
- Entity Name Entity Type
- 0 House ORGANIZATION
- 1 White FACILITY
- 2 Eric PERSON

无论哪种方式,你都可能会发现需要做更多的工作才能使其性能更好,但是,NLTK开箱即用,这是非常强大的,值得夸奖的!
以上就简单的介绍了NLTK在命名实体识别任务的用途!希望小伙伴们喜欢!
个人微信:加时请注明 (昵称+公司/学校+方向)
历史精品文章推荐
2、CCL“中国法研杯”相似案例匹配评测竞赛 - TOP队伍攻略分享
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。