hanlp进行命名实体识别
需要安装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进行命名实体识别的更多相关文章
- python调用hanlp进行命名实体识别
本文分享自 6丁一的猫 的博客,主要是python调用hanlp进行命名实体识别的方法介绍.以下为分享的全文. 1.python与jdk版本位数一致 2.pip install jpype1(pyth ...
- 8.HanLP实现--命名实体识别
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 8. 命名实体识别 8.1 概述 命名实体 文本中有一些描述实体的词汇.比如人名. ...
- HanLP分词命名实体提取详解
HanLP分词命名实体提取详解 分享一篇大神的关于hanlp分词命名实体提取的经验文章,文章中分享的内容略有一段时间(使用的hanlp版本比较老),最新一版的hanlp已经出来了,也可以去看看新版 ...
- 自然语言18.2_NLTK命名实体识别
QQ:231469242 欢迎nltk爱好者交流 http://blog.csdn.net/u010718606/article/details/50148261 NLTK中对于很多自然语言处理应用有 ...
- 基于条件随机场(CRF)的命名实体识别
很久前做过一个命名实体识别的模块,现在有时间,记录一下. 一.要识别的对象 人名.地名.机构名 二.主要方法 1.使用CRF模型进行识别(识别对象都是最基础的序列,所以使用了好评率较高的序列识别算法C ...
- 神经网络结构在命名实体识别(NER)中的应用
神经网络结构在命名实体识别(NER)中的应用 近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展.作为NLP领域的基础任务-命名实体识别(Named Entity Recognit ...
- 学习笔记CB007:分词、命名实体识别、词性标注、句法分析树
中文分词把文本切分成词语,还可以反过来,把该拼一起的词再拼到一起,找到命名实体. 概率图模型条件随机场适用观测值条件下决定随机变量有有限个取值情况.给定观察序列X,某个特定标记序列Y概率,指数函数 e ...
- NLP入门(五)用深度学习实现命名实体识别(NER)
前言 在文章:NLP入门(四)命名实体识别(NER)中,笔者介绍了两个实现命名实体识别的工具--NLTK和Stanford NLP.在本文中,我们将会学习到如何使用深度学习工具来自己一步步地实现N ...
- NLP入门(四)命名实体识别(NER)
本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER). 命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领 ...
随机推荐
- lift提升图
Lift图衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,lift(提升指数)越大,模型的运行效果越好. TP:划一个阈值后的正样本. P:总体的正样本. 在模型评估中,我们常用到增益/提升 ...
- Math基础使用
/* java.lang.Math类是数学相关的工具类,里面提供的大量静态方法,完成与数学运算的操作 public static double abs(double num):获取绝对值. publi ...
- 如何提升Web前端性能?
什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情.我们来看看用户访问网站,浏览器都做了哪些事情:输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 ...
- vim操作:打开多个文件、同时显示多个文件、在文件之间切换
打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen 便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...
- eclipse安装sts
- SAP云平台和第三方CRM解决方案(火锅)互联
光看封面配图,这篇文章很容易被误认为在讲成都的美食之一:火锅. SAP成都研究院坐落在被联合国教科文组织授予过"美食之都"称号的成都,所在的天府软件园,半径1公里左右星罗棋布着很多 ...
- Python3报错:ModuleNotFoundError: No module named '_bz2'
系统信息 系统:CentOS Linux release 7.6.1810 (Core) python版本:python3.7 报错信息 from _bz2 import BZ2Compresso ...
- Go发送Email
使用Go发送邮件,目前官网GO 1.12的版本的文档中,包 "net/smtp" 仅支持支持两种SMTP的认证方式.CRAM-MD5和PLAIN 认证方式. CRAM-MD5 是基 ...
- MySQL视图及索引
视图 视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据. 视图的作用.优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 //创建.修 ...
- HDU5126 stars(cdq分治)
传送门 题意: 先有两种操作,插入和查询,插入操作则插入一个点\((x,y,z)\),查询操作给出两个点\((x_1,y_1,z_1),(x_2,y_2,z_2)\),回答满足\(x_1\leq x\ ...