NLP学习(六)hanlp命名实体识别-Python3实现

2023-11-10

环境配置

1.jdk安装配置环境变量
2.jpype安装 pip3 install jpype1
3.hanlp相关资源下载,百度云https://pan.baidu.com/s/1sw4fDjiLO0PhvYxJ2YMOOw 提取码4lm4
在这里插入图片描述

代码

# -*- coding: utf-8 -*-

from jpype import *

#路径
startJVM(getDefaultJVMPath(), "-Djava.class.path=D:\hanlp\hanlp-1.7.8.jar;D:\hanlp", "-Xms1g", "-Xmx1g")

#繁体转简体
def TraditionalChinese2SimplifiedChinese(sentence_str):
    HanLP = JClass('com.hankcs.hanlp.HanLP')
    return HanLP.convertToSimplifiedChinese(sentence_str)

#切词&命名实体识别与词性标注(可以粗略识别)
def NLP_tokenizer(sentence_str):
    NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
    return NLPTokenizer.segment(sentence_str)

#地名识别,标注为ns
def Place_Recognize(sentence_str):
    HanLP = JClass('com.hankcs.hanlp.HanLP')
    segment = HanLP.newSegment().enablePlaceRecognize(True)
    return HanLP.segment(sentence_str)

#人名识别,标注为nr
def PersonName_Recognize(sentence_str):
    HanLP = JClass('com.hankcs.hanlp.HanLP')
    segment = HanLP.newSegment().enableNameRecognize(True)
    return HanLP.segment(sentence_str)

#机构名识别,标注为nt
def Organization_Recognize(sentence_str):
    HanLP = JClass('com.hankcs.hanlp.HanLP')
    segment = HanLP.newSegment().enableOrganizationRecognize(True)
    return HanLP.segment(sentence_str)

#标注结果转化成列表
def total_result(function_result_input):
    x = str(function_result_input)
    y = x[1:len(x)-1]
    y = y.split(',')
    return y

#时间实体
def time_result(total_result):
    z = []
    for i in range(len(total_result)):
        if total_result[i][-2:] == '/t':
            z.append(total_result[i])
    return z

#Type_Recognition 可以选 ‘place’,‘person’,‘organization’三种实体,
#返回单一实体类别的列表
def single_result(Type_Recognition,total_result):
    if Type_Recognition == 'place':
        Type = '/ns'
    elif Type_Recognition == 'person':
        Type = '/nr'
    elif Type_Recognition == 'organization':
        Type = '/nt'
    else:
        print ('请输入正确的参数:(place,person或organization)')
    z = []
    for i in range(len(total_result)):
        if total_result[i][-3:] == Type:
            z.append(total_result[i])
    return z

#把单一实体结果汇总成一个字典
def dict_result(sentence_str):
    sentence = TraditionalChinese2SimplifiedChinese(sentence_str)
    total_dict = {}
    a = total_result(Place_Recognize(sentence))
    b = single_result('place',a)
    c = total_result(PersonName_Recognize(sentence))
    d = single_result('person',c)
    e = total_result(Organization_Recognize(sentence))
    f = single_result('organization',e)
    g = total_result(NLP_tokenizer(sentence))
    h = time_result(g)
    total_list = [i for i in [b,d,f,h]]
    total_dict.update(place = total_list[0],person = total_list[1],organization = total_list[2],time = total_list[3])
    shutdownJVM()#关闭JVM虚拟机
    return total_dict

#测试
test_sentence="2018年武胜县新学乡政府大楼门前锣鼓喧天,6月份蓝翔给宁夏固原市彭阳县红河镇捐赠了挖掘机,中国科学院计算技术研究所的宗成庆教授负责教授自然语言处理课程"
print (dict_result(test_sentence))

配置及修改

1.在d盘创建hanlp目录将下载好的文件解压放到里面
2.修改hanlp.properties文件root=D:/hanlp/不然会报如下错误,注意是/不是\

jpype._jclass.ExceptionInInitializerError: java.lang.ExceptionInInitializerError

上面是使用 jpype来实现的,后来发现可以直接安装调用pyhanlp实现简单实现代码如下:

# -*- coding:utf-8 -*-
from pyhanlp import *

content = "现如今,机器学习和深度学习带动人工智能飞速的发展,并在图片处理、语音识别领域取得巨大成功。"
print(HanLP.segment(content))

content = "马伊琍与文章宣布离婚,华为是背后的赢家。"
print('原句:' + content)
print(HanLP.segment(content))

# 添加自定义词典
# insert会覆盖字典中已经存在的词,add会跳过已经存在的词,
# add("文章","nr 300") ,nr为词性,300为词频; add("交易平台","nz 1024 n 1") 表示可以一词多性 ,交易平台词性即可为nz 词频为1024,也可为n 词频为1
CustomDictionary.add("文章", "nr 300")
CustomDictionary.insert("工程机械", "nz 1024")
CustomDictionary.add("交易平台", "nz 1024 n 1")
print(HanLP.segment(content))

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

NLP学习(六)hanlp命名实体识别-Python3实现 的相关文章

随机推荐

  • Win10如何查看Nvidia支持的CUDA版本

    打开设置 在搜索里输入控制面板 打开控制面板 点击 硬件和声音 选项 然后选择Nvidia面板 在Nvidia面板中点击帮助 选择系统信息 选择组件 找到 NVCUDA DLL 即可看到支持的CUDA版本
  • 递归算法应用并使用分页

    递归算法应用并使用分页 直接上代码 注释很全 自己看 public List
  • eclipse中JUnit的使用

    一 JUnit单元测试概述 JUnit是一个Java语言的单元测试框架 JUnit有它自己的JUnit扩展生态圈 多数Java的开发环境都已经集成了JUnit作为单元测试的工具 Junit是一套框架 继承TestCase类 因此可以用Jun
  • java.io.FileNotFoundException: File does not exist: hdfs://xxx

    一 产生问题背景 我们公司正在准备从cdh迁回社区版hadoop集群 启动flink任务的时候 还未运行就直接报错 Caused by org apache flink yarn YarnClusterDescriptor YarnDepl
  • C#+sqlserver+asp.net婚纱影楼管理系统

    一 源码描述 这是一款简洁十分美观的ASP NET sqlserver源码 界面十分美观 功能也比较全面 比较适合 作为毕业设计 课程设计 使用 感兴趣的朋友可以下载看看哦 二 功能介绍 该源码功能十分的全面 具体介绍如下 婚纱影楼管理系统
  • ECEF和ENU坐标之间的转换

    转载 https gssc esa int navipedia index php Transformations between ECEF and ENU coordinates 1 定义 ENU coordinates local Ea
  • 我的第一个Java程序

    没想到从纯前端转到了JAVA Web 首先第一个 JAVA程序 计算图形面积 使用工厂模式和反射机制实现 Illegal modifier for the interface method paraNeed only public abst
  • redis高可用与集群实战案例

    一 配置redis主从 主备模式 可以实现 Redis 数据的跨主机备份 程序端连接到高可用负载的VIP 然后连接到负载服务器设置的Redis后端 real server 此模式不需要在程序里面配置 Redis 服务器的真实 IP 地址 s
  • vba17-25

    十七 变量默认值 简写变量 常量 1声明变量的同时赋值 数值 0 字符串 空字符串 布尔 False 变体 Empty 空 2 布尔值 false 0 True 1 所有非0的数字转换成布尔类型都是True 3变量定义简写 dim i in
  • 区块链基本特性

    区块链具有去中心化 不可篡改 不可逆 匿名等特性 去中心化 因为整个网络没有中心统治者 系统依靠的是网络上多个参与者的公平约束 所以任意每几个节点的权利和义务都是均等的 而且每一个节点都会储存这个区块链上所有数据 即使该节点被损坏或遭受攻击
  • 使用SWIG编写python的扩展

    环境 python3 8 5 64位 Visual Studio 2017 SWIG 4 0 2 一 安装SWIG https www swig org download html 下载windows 预编译好的文件 解压后把swig ex
  • 建立时间、保持时间、时钟输出延时、时钟偏斜、slack(公式整理)

    文章目录 一道华为笔试题 1 tclk最小周期tclk min 2 时钟建立时间Tsu 3 时钟保持时间Thold 4 时钟输出延时Tco 5 slack 6 时钟偏斜 答案 Reference 一道华为笔试题 1 tclk最小周期tclk
  • 数组的常用方法concat,join,slice和splice的区别,map,foreach,reduce

    1 concat 和join concat 是连对两个或两个数组的方法 直接可以将数组以参数的形式放入 join 是将数组中的所有元素放入一个字符串中 通俗点讲就是可以将数组转换成字符串 2 slice和splice的区别 相同点就是都是对
  • Maven Intellij 配置下载镜像

    在使用maven管理包的时候 总会出现包下载很慢的情况 所以这里我们使用阿里云的仓库来代替maven自己的仓库 来提高下载的速度 Maven 重新指定源 修改maven conf setting XML里面关于mirror的设置 具体内容如
  • 嵌入式Linux小项目之X210上QT5.6.2移植和开发环境搭建

    目录 一 QT背景知识介绍 1 常见GUI系统 2 QT的发展例程 3 QT如何跨平台 4 QT相关的其他一些名字 5 QT的网络资源 二 QT的官网资源开发环境搭建 1 QT官网资源 2 QT开发环境搭建 3 QT的linuxfb介绍 三
  • 在windows下搭建、配置nginx流媒体服务器,并进行rtmp流的推流、拉流测试

    在博主之前的博文 Ubuntu下安装 编译 运行nginx和nginx rtmp module 中讲述了在linux Ubuntu 下搭建nginx流媒体服务器的方法 下面讲述在windows下搭建nginx流媒体服务器的方法 使其支持rt
  • Opencv-python3,处理rtsp流视频-----踩坑总结+VideoCapture.get()详解:

    最近项目在用opencv处理rtsp流相机 中间也踩了很多坑 这里写篇博客帮助那些可能会遇到相似问题的同胞 注 我这里同时用到了四个相机 1 电脑同时连接多个相机后 之后去打开rtsp相机时 初次打开特别耗时 甚至打开失败 在Win10上需
  • 开源技术选型目录(不断整理)

    http www infoq com cn 参见 开源技术选型手册 第1章 闲话开源社区篇 1 1开源软件定义 自由的重新发布 开源软件 源代码 在提供软件的同时也要提供程序源代码 也必须允许其他人对代码进行编辑或修改 如果发行没有待源代码
  • jdbc连接常用url格式

    jdbc mysql localhost 3306 db name serverTimezone Asia Shanghai characterEncoding utf8 useUnicode true 配置文件中是如上写法 写在字符串里的
  • NLP学习(六)hanlp命名实体识别-Python3实现

    环境配置 1 jdk安装配置环境变量 2 jpype安装 pip3 install jpype1 3 hanlp相关资源下载 百度云https pan baidu com s 1sw4fDjiLO0PhvYxJ2YMOOw 提取码4lm4