需要安装jpype先,这个是python调用java库的桥梁。

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

"""
Created on Thu May 10 09:19:55 2018 @author: wang小尧
""" import jpype #路径
jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
ext_classpath = r"./ner/hanlp\hanlp-1.6.3.jar:./ner/hanlp"
jvmArg = '-Djava.class.path=' + ext_classpath
jpype.startJVM(jvmPath, jvmArg, "-Xms1g", "-Xmx1g") #繁体转简体
def TraditionalChinese2SimplifiedChinese(sentence_str):
HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
return HanLP.convertToSimplifiedChinese(sentence_str) #切词&命名实体识别与词性标注(可以粗略识别)
def NLP_tokenizer(sentence_str):
NLPTokenizer = jpype.JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
return NLPTokenizer.segment(sentence_str) #地名识别,标注为ns
def Place_Recognize(sentence_str):
HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
segment = HanLP.newSegment().enablePlaceRecognize(True)
return HanLP.segment(sentence_str) #人名识别,标注为nr
def PersonName_Recognize(sentence_str):
HanLP = jpype.JClass('com.hankcs.hanlp.HanLP')
segment = HanLP.newSegment().enableNameRecognize(True)
return HanLP.segment(sentence_str) #机构名识别,标注为nt
def Organization_Recognize(sentence_str):
HanLP = jpype.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])
jpype.shutdownJVM()#关闭JVM虚拟机
return total_dict #测试
test_sentence="2018年武胜县新学乡政府大楼门前锣鼓喧天,6月份蓝翔给宁夏固原市彭阳县红河镇捐赠了挖掘机,中国科学院计算技术研究所的宗成庆教授负责教授自然语言处理课程"
print (dict_result(test_sentence))

结果:

{'place': [' 武胜县/ns', ' 宁夏/ns', ' 固原市/ns', ' 河镇/ns'], 'person': [' 蓝翔/nr', ' 阳县红/nr', ' 宗成庆/nr'], 'organization': [' 中国科学院/nt'], 'time': ['2018年/t', ' 6月份/t']}

转自:https://www.jianshu.com/p/d7e7cc747e56

hanlp进行命名实体识别的更多相关文章

  1. python调用hanlp进行命名实体识别

    本文分享自 6丁一的猫 的博客,主要是python调用hanlp进行命名实体识别的方法介绍.以下为分享的全文. 1.python与jdk版本位数一致 2.pip install jpype1(pyth ...

  2. 8.HanLP实现--命名实体识别

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 8. 命名实体识别 8.1 概述 命名实体 文本中有一些描述实体的词汇.比如人名. ...

  3. HanLP分词命名实体提取详解

    HanLP分词命名实体提取详解   分享一篇大神的关于hanlp分词命名实体提取的经验文章,文章中分享的内容略有一段时间(使用的hanlp版本比较老),最新一版的hanlp已经出来了,也可以去看看新版 ...

  4. 自然语言18.2_NLTK命名实体识别

    QQ:231469242 欢迎nltk爱好者交流 http://blog.csdn.net/u010718606/article/details/50148261 NLTK中对于很多自然语言处理应用有 ...

  5. 基于条件随机场(CRF)的命名实体识别

    很久前做过一个命名实体识别的模块,现在有时间,记录一下. 一.要识别的对象 人名.地名.机构名 二.主要方法 1.使用CRF模型进行识别(识别对象都是最基础的序列,所以使用了好评率较高的序列识别算法C ...

  6. 神经网络结构在命名实体识别(NER)中的应用

    神经网络结构在命名实体识别(NER)中的应用 近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展.作为NLP领域的基础任务-命名实体识别(Named Entity Recognit ...

  7. 学习笔记CB007:分词、命名实体识别、词性标注、句法分析树

    中文分词把文本切分成词语,还可以反过来,把该拼一起的词再拼到一起,找到命名实体. 概率图模型条件随机场适用观测值条件下决定随机变量有有限个取值情况.给定观察序列X,某个特定标记序列Y概率,指数函数 e ...

  8. NLP入门(五)用深度学习实现命名实体识别(NER)

    前言   在文章:NLP入门(四)命名实体识别(NER)中,笔者介绍了两个实现命名实体识别的工具--NLTK和Stanford NLP.在本文中,我们将会学习到如何使用深度学习工具来自己一步步地实现N ...

  9. NLP入门(四)命名实体识别(NER)

      本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER).   命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领 ...

随机推荐

  1. SpringBoot静态资源文件

    1.默认静态资源映射 Spring Boot对静态资源映射提供了默认配置 Spring Boot默认将 /** 所有访问映射到一下目录 classpath:/static classpath:/pub ...

  2. Celery简介以及Django中使用celery

    目录 Celery简介 消息中间件 任务执行单元 任务结果存储 使用场景 Celery的安装和配置 Celery执行异步任务 基本使用 延时任务 定时任务 异步处理Django任务 案例: Celer ...

  3. 【开发笔记】- Idea启动Gradle报错:Warning:Unable to make the module: reading, related gradle configuration was not found. Please, re-import the Gradle project and try again

    报错信息: Warning:Unable to make the module: reading, related gradle configuration was not found. Please ...

  4. 【开发笔记】- MySQL中limit查询超级慢,怎么办?

    有如下解决方法: (1).通过判断id的范围来分页 limit ; 也得到了分页的数据,但是我们发现如果id不是顺序的,也就是如果有数据删除过的话,那么这样分页数据就会不正确,这个是有缺陷的. (2) ...

  5. Java 关于函数式接口与Lambda表达式之间的关系

    java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...

  6. 分库分表的情况下生成全局唯一的ID

    分库分表情况下 跨库的问题怎么解决? 分布式事务怎么解决? 查询结果集集合合并的问题? 全局唯一的id怎么解决? 一般要求:1.保证生成的ID全局唯一,不可重复 2.生成的后一个Id必须大于前一个Id ...

  7. AIX运维常用命令

    目前传统的磁盘管理仍有不足:如果下Unix系统中的存储容量需要扩展,文件系统就必须停止运行,然后通过重构分区的手段来进行分区和文件系统的扩容.一般采用的方法是先备份该文件系统并删除其所在的分区,然后重 ...

  8. Visual Studio调试到OpenCV源码中

    TL;DR VS2015下,build-farm/vs2015-x64/bin/Debug/目录,*.pdb文件,都拷贝到install/x64/vc14/bin目录,就可以调试进去opencv源码了 ...

  9. php-fpm编译安装脚本

      PHP是开源.轻量级.高效的开发语言,特别适合web项目开发,在中小型互联网公司中常用于开发web后端.PHP常与Nginx及MySQL数据库结合,搭建LNMP环境.以下为centos7系统下ph ...

  10. pycharm调试添加命令行参数

    UI界面: Run->Edit Configurations->Parames