人工智能火热,NLP技术也蓬勃发展,今天主要讲述NLP中的一项基础任务NER的实现。 首先介绍一下NER(命名实体识别,Named-entity recognition)是NLP的一项子任务,旨在实现从文本中抽取实体,实体一般包括:人名,地名,机构名,数量表达式,时间表达式等。在特定的领域,实体也会有所差异,比如:生物医学,研究实体就可以是药名,病名。 目标:实现基础的NER需要得到实体种类下的实体。 怎么去使用LTP? 程序执行结果如下: 我们可以看到程序已经对各个词汇进行了标注,有关LTP的命名实体识别的标注含义:Nh-人名,Ni-机构名,Ns-地名 结果如图:
pyltp实现NER以及实体统计
借助工具:哈工大LTP哈工大LTP
python3.6+pyltp+ltp_data_v3.4.0
(1)pyltp的使用
a.配置好相应的python环境
b.安装pytlp(命令行:pip install pyltp),安装超时可以镜像下载或者下载好wheel文件本地安装
c.下载模型文件,我使用的版本为ltp_data_v3.4.0,下载地址:模型下载地址
(2)实现NER
准备工作做好后,我们就可以选取测试文本,实现NER,代码如下:#write by heheyang # -*- coding: utf-8 -*- import os from pyltp import * LTP_DATA='ltpdata path'#LTPdata的根目录 # 分词 def wordscut(text): segmentor = Segmentor() # 初始化 wordscut_model_path = os.path.join(LTP_DATA, 'cws.model') segmentor.load(wordscut_model_path) # 加载模型 words = segmentor.segment(text) # 分词 words_list = list(words) # 转换成list segmentor.release() # 释放模型 return words_list #词性标注 def post_tag(words): postag = Postagger()# 初始化 pos_tag_model_path = os.path.join(LTP_DATA, 'pos.model') postag.load(pos_tag_model_path) # 加载模型 postags = postag.postag(words) # 词性标注 postag.release() # 释放模型 return postags # 命名实体识别 def ner(words, tags): ner_temp = NamedEntityRecognizer()# 初始化 ner_model_path = os.path.join(LTP_DATA, 'ner.model') ner_temp.load(ner_model_path) # 加载模型 netags = ner_temp.recognize(words, tags) # 命名实体识别 for word, ntag in zip(words, netags): nertemp = word + ',' + ntag print(nertemp, end=" | ") #结构性输出 ner_temp.release() # 释放模型 return netags f=open('textpath','r') wordstemp=f.read() words = wordscut(wordstemp) #分词 tags = post_tag(words) #词性标注 netags = ner(words, tags) #命名实体识别
如果想要获得实体列表,就可以从对NER的结果进行程序统计筛选,代码如下:#write by heheyang #实体统计 import re def ner_count(wordtags): ne_list=[] wordtemp="" word_tags=wordtags.split("|") for wordtag in word_tags: ne=[] word_tag=wordtag.split(",") if len(word_tag)==2 and word_tag[1]!="O": if re.findall("^(B|I)+",word_tag[1]): wordtemp+=word_tag[0] #同一实体的组合 elif re.findall("^E+",word_tag[1]): wordtemp+=word_tag[0] tag=re.findall(r"-(.+)",word_tag[1]) #提取实体类型 ne.append(wordtemp) ne.append(tag[0]) wordtemp="" elif re.findall("^S+",word_tag[1]): tag=re.findall(r"-(.+)",word_tag[1]) ne.append(word_tag[0]) ne.append(tag[0]) if len(ne)!=0: ne_list.append(ne)#实体词汇汇总 return ne_list print(ner_count(ner(words, tags)))#打印出实体列表
以上完成了pyltp实现NER以及实体统计,最终得到文本的实体列表。
这也算是小白入门,自己整理较久的一篇博客,起初设想的是把几个NLP工具放在一块写的,但是由于时间等原因,最后决定还是分开来写。
欢迎大家的批评指正,多多交流,多多学习。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算