pyltp实现NER以及实体统计

2023-11-09

pyltp实现NER以及实体统计

人工智能火热,NLP技术也蓬勃发展,今天主要讲述NLP中的一项基础任务NER的实现。

首先介绍一下NER(命名实体识别,Named-entity recognition)是NLP的一项子任务,旨在实现从文本中抽取实体,实体一般包括:人名,地名,机构名,数量表达式,时间表达式等。在特定的领域,实体也会有所差异,比如:生物医学,研究实体就可以是药名,病名。

目标:实现基础的NER需要得到实体种类下的实体。
借助工具:哈工大LTP

哈工大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运行结果

我们可以看到程序已经对各个词汇进行了标注,有关LTP的命名实体识别的标注含义:Nh-人名,Ni-机构名,Ns-地名
NER标签含义
如果想要获得实体列表,就可以从对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工具放在一块写的,但是由于时间等原因,最后决定还是分开来写。
欢迎大家的批评指正,多多交流,多多学习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyltp实现NER以及实体统计 的相关文章

随机推荐

  • WebService 的一些基本概念

    一 1 Endpoint http www ttdev com SimpleService 这个webservice全名就是所谓的 endpoint 2 RPC type RPC 型的Web Service 方法定义 3 Document
  • 区块链之java(一) 番外篇(数据类型)

    预先善其事 必先利其器 今天俺们讲讲智能合约和java中的一个数据类型 在智能合约中 大概有这些基本类型 能满足开发 是否有漏的呢 我也不太清楚 因为我也没有很深入的了解这块 好了 话不多说 看看具体的东西 智能合约类型如下 uint256
  • 【Python零基础入门篇 · 12】:函数的定义和作用、函数参数、函数嵌套、枚举函数enumerate

    文章目录 函数的定义和作用 函数的结构 函数调用 返回值 函数参数 区分形参和实参 必备参数 默认参数 可变参数 关键字参数 函数嵌套 枚举函数 enumerate 函数的定义和作用 函数 function 是将具有独立功能的代码块组织成为
  • 【BEVformer部署】tensorrt部署整体流程

    1 安装依赖包 CUDA cuDNN TensorRT 下载安装 CUDA 11 6 cuDNN 8 6 0 TensorRT 8 5 1 7 地址 NVIDIA PyTorch安装指令 pip install torch 1 12 1 c
  • Python爬虫 实例 网络爬虫

    一 这里是一个简单的网页爬虫例子 python import requests from bs4 import BeautifulSoup url https example com response requests get url so
  • [小技巧] git 清理 repository

    使用如下命令可以快速清除 repository 里没有被 git 管理的文件 git clean xdf 如果要保留某些后缀的文件 如 txt 文件 使用如下命令 git clean xdfe txt 参考 http stackoverfl
  • 在 NetBeans 中自动生成 get、set 和构造函数

    如果您使用的是 NetBeans 以下内容将为您节省大量时间 您可以在几秒钟内为您的变量以及构造函数自动生成函数get set以下适用于 Java 和 PHP 但我认为它也适用于其他语言 只需将光标指向您希望生成的代码出现的位置 然后按 A
  • elasticsearch 一对多普通文档子对象边界值问题

    一般为保证大数据量 低延时业务数据查询都会用到基于lucene的搜索引擎elasticsearch ES的出现解决了大数据搜索的一大问题 但是由于某些特殊业务数据就可能出现一些问题 比如 一对多业务普通索引的子对象边界值问题 什么是子对象边
  • [游戏开发][Unity]点击Play按钮后卡死很久

    一般小工程不会遇到这个问题 我在公司接手了几个老项目 都遇到了这个问题 每次Play卡顿几分钟甚至十几分钟 很是头疼 原因大概率就是下图 Packing Sprite Atlases 打包纹理图集 Windows上的Unity项目经常不显示
  • 【分治法】中位数问题和Gray码问题——武汉理工大学算法设计与分析课程实验

    1 中位数问题 问题描述 设X 0 n 1 和Y 0 n 1 为两个数组 每个数组中含有n个已排好序的数 找出X和Y的2n个数的中位数 编程任务 利用分治策略试设计一个O log n 时间的算法求出这2n个数的中位数 数据输入 由文件inp
  • UML建模详解

    摘要 本教程简要介绍了统一建模语言 面向对象问题解决的核心是构建一个模型 该模型从其通常复杂的现实世界中抽象出基本问题的基本细节 几个建模工具被包裹在UML 的标题下 代表统一建模语言 本课程的目的是介绍UML的重要亮点 UML的中心是我们
  • 二十二. Kubernetes ResourceQuota配额限制与LimitRanger限制范围

    目录 一 ResourceQuota 资源限制基础解释 二 LimitRanger 一 ResourceQuota 资源限制基础解释 官方文档 ResourceQuota 是k8s中对每个命名空间资源消耗总量提供的一种限制 可以限制指定命名
  • 基于STM32F407的SDCard读写操作

    基于STM32F407的SDCard读写操作 目录 基于STM32F407的SDCard读写操作 硬件电路 SD卡结构示意图 管脚连接 SDIO方式 SDCard初始化 SDCacr寄存器介绍 SDCacr初始化代码 在之前没有做过SD卡相
  • 解神者x2服务器维护,解神者X2服务器维护中? 登不上与连网失败解决攻略

    解神者X2连网失败怎样解决 等待开放测试 才能顺利加入 创意手游小编带来测试详情 应对线上挑战 登不上与连网失败解决攻略 星辰跃迁测试预下载已开启 测试时间为 7月29日10 00 8月5日16 00 欢迎大家登船 测试类型 不限量 删档
  • 使用DLL在多个进程间共享全局变量

    默认情况下 同一个程序启动多个进程 它们各自的变量值是不会相互影响的 第二个实例启动后 在修改全局变量的时候 系统会运用内存管理系统copy on write的特性来防止修改了第一个实例的数据 即系统会再分配一些内存 并将全局变量复制到这块
  • c语言中 文件,c语言中文件的使用方法

    c语言中文件的使用方法 一 文件指针的定义 FILE fp 注意FILE的大写 二 文件的打开 fp fopen 路径 文件名 文件格式后缀 文件的使用方法 注意路径下为 而不是 三 文件的使用方法 1 r 模式 1 1 打开文件进行只读操
  • ansible 一键部署 kubernetes高可用框架

    ansible 一键部署 kubernetes高可用框架 kube router版 分享一个自己写的k8s搭建项目 github https github com Fear2014 kubernetes ansible deploy 框架说
  • 2021-06-10

    NFS Network File System 网络文件系统 是FreeBSD支持的文件系统中的一种 它允许网络中的计算机 不同的计算机 不同的操作系统 之间通过TCP IP网络共享资源 主要在unix系列操作系统上使用 在NFS的应用中
  • Android开发插件化来龙去脉(附全套学习视频)(1),app架构图

    Step3 通过反射获取到pluginClassLoader中的pathList字段 Object pluginDexPathList ReflectUtil getField BaseDexClassLoader class plugin
  • pyltp实现NER以及实体统计

    pyltp实现NER以及实体统计 人工智能火热 NLP技术也蓬勃发展 今天主要讲述NLP中的一项基础任务NER的实现 首先介绍一下NER 命名实体识别 Named entity recognition 是NLP的一项子任务 旨在实现从文本中