首页 > 其他分享 >将stanfordcorenlp的tokenizer换成自定义的(或用stanfordcorenlp对自定义tokenizer分词后的结果做ner)

将stanfordcorenlp的tokenizer换成自定义的(或用stanfordcorenlp对自定义tokenizer分词后的结果做ner)

时间:2024-06-08 22:31:54浏览次数:14  
标签:index 自定义 tokenizer pos lemma stanfordcorenlp characterOffsetBegin ner 分词

本文是基于中文语料做的,对于英文语料应该也是同理,即同样适用的。

分析stanfordcorenlp的分词结果,可以发现,它好像是对最小的中文词进行分词,即其对中文的分词粒度很小,这对于某些nlp场景可能就不太合适了,自然的就想到能不能将stanfordcorenlp中用于分词的tokenizer替换掉,替换成自定义的,这样就可以控制中文分词结果是你想要的了。

基于以上动机,我查找了相关资料,发现需要对下载到的stanfordcorenlp的原文件夹中的tokensregex中的代码进行修改。我认为这样直接修改源文件容易使整个文件出错而不能用,也不太敢改,所以我就想到了另一种思路:

我直接改tokenizer比较难,那么我直接给你我分词后的结果,你根据我的分词结果帮我做ner(命名体识别)任务可以吗?

我又去查找了相关资料,发现只要将原本的nlp.ner(sentence)替换成nlp.annotate(...)即可,详细的代码如下:

nlp = StanfordCoreNLP(r'D:\stanford-corenlp-full-2016-10-31', port=8098, lang='zh')#,quiet=False,logging_level=logging.DEBUG)  后面的quiet和logging_level是用于显示日志信息,便于报错是寻找bug

ner_result = nlp.annotate(sentence,properties={
'annotators': 'ner',
'tokenize.language': 'Whitespace',
'pipelineLanguage':'zh', # 这个参数要加上,对中文才起作用
'outputFormat': 'json'
})

print(ner_result)

这样运行以上代码,就可以得到 按照你给的中文分词结果,然后利用stanfordcorenlp做ner的结果,如下所示:

输入的分词后以空格连接的句子:
被 扶养 人 生活费 43821.84 元 ;


利用stanfordcorenlp做ner的结果:(json格式)
{"sentences":[{"index":0,"tokens":[{"index":1,"word":"被","originalText":"被","lemma":"被","characterOffsetBegin":0,"characterOffsetEnd":1,"pos":"LB","ner":"O"},{"index":2,"word":"扶养","originalText":"扶养","lemma":"扶养","characterOffsetBegin":2,"characterOffsetEnd":4,"pos":"VV","ner":"O"},{"index":3,"word":"人","originalText":"人","lemma":"人","characterOffsetBegin":5,"characterOffsetEnd":6,"pos":"NN","ner":"O"},{"index":4,"word":"生活费","originalText":"生活费","lemma":"生活费","characterOffsetBegin":7,"characterOffsetEnd":10,"pos":"NN","ner":"O"},{"index":5,"word":"43821.84","originalText":"43821.84","lemma":"43821.84","characterOffsetBegin":11,"characterOffsetEnd":19,"pos":"CD","ner":"MONEY","normalizedNER":"元43821.84"},{"index":6,"word":"元","originalText":"元","lemma":"元","characterOffsetBegin":20,"characterOffsetEnd":21,"pos":"M","ner":"MONEY","normalizedNER":"元43821.84"},{"index":7,"word":";","originalText":";","lemma":";","characterOffsetBegin":22,"characterOffsetEnd":23,"pos":"PU","ner":"O"}]}]}

一种方法解决不了问题,有时候采用迂回的策略就可以相对容易的解决问题了hh

这里是希望你能越来越好的 小白冲鸭 ~~~

标签:index,自定义,tokenizer,pos,lemma,stanfordcorenlp,characterOffsetBegin,ner,分词
From: https://blog.csdn.net/m0_56367027/article/details/139551944

相关文章

  • 实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)
    导读    本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测(数据集+训练+预测保姆级教程)。  YOLOv10简介  YOLOv10是清华大学研究人员在UltralyticsPython包的基础上,引入了一种新的实时目标检测方法,解决了YOLO以前版本在后处理和模型架构方面的不足......
  • C语言笔记第12篇:自定义类型(struct结构体)
    1、结构体类型的声明为什么要有自定义的结构类型呢?这是因为稍微复杂的类型,直接使用内置类型是不行的!比如:描述一个人或 一本书的价格、版号等信息。1.1结构的创建结构体是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。1.1.1 结构的声明structt......
  • Vue 3 的 <teleport> 组件封装为自定义指令
    <Teleport>是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的DOM结构外层的位置去。https://cn.vuejs.org/guide/built-ins/teleport.html为了更加简便灵活,可以将Vue3的<teleport>组件类似的功能封装为自定义指令。当然,但在某些情况下,直接使用<telepo......
  • [ROS自定义消息问题]ImportError: cannot import name ‘GQCNNGrasp‘ from ‘gqcnn_r
         在使用ROS运行Python代码时,经常会遇到无法引用自定义消息文件的情况。这其实是一个比较常见的问题,通常是由于ROS找不到消息文件所在的路径导致的。问题描述:在ROS中运行Python代码时,如果尝试导入自定义消息文件,可能会遇到类似如下的错误:ImportError:Nomodule......
  • 同星TSMaster中如何自定义E2E校验算法
    文章目录前言一、自定义E2E算法教程1.定义checksum算法2.定义【CAN预发送事件】3.E2E报文信号仿真4.运行工程二、TSMaster配置E2E教程1.激活仿真报文2.E2E配置三.小结前言最近因项目需要,用到TSMaster进行E2E校验算法实现。第一次使用TSMaster,把整个的过程做一个记......
  • Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解
    什么是鉴权(身份验证)?https://learn.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore-8.0定义鉴权,又称身份验证,是确定用户身份的过程。它验证用户提供的凭据(如用户名和密码)是否有效,并据此确认用户是否具备访问系统的权利。过程用户向系统提供......
  • 零基础非科班也能掌握的C语言知识18 自定义类型
    自定义类型1.结构体1.1结构的声明1.2结构体变量的创建和初始化1.2.1普通声明1.2.2嵌套声明1.2.3不完全声明(匿名结构体)1.3结构成员访问操作符1.3.1结构体成员的直接访问1.3.2结构体成员的间接访问1.4结构体的自引用1.5结构体内存对齐1.5.1对齐规则1.5.2为什么存在内......
  • 获取自定义 HTML 开头标记和结尾标记之间的文本
    $data="<Data>hello</Data>";preg_match_all("/\<Data\>[.]+\<\/Data\>/",$data,$match);print_r($match);返回:Array([0]=>Array())Array([0]=>Array())所以我猜没有匹配到?你是对的,你的正则表达式没有匹配......
  • vue2使用Clodop插件打印表格,分页,每页显示页头页尾,自定义纸张大小
    一、前往lodop官网,下载插件,下载中心-Lodop和C-Lodop官网主站 这里下载的window64位的,将插件安装好,运行,会看到引入项目第一种、可以直接将script标签放入vue的head中,在项目运行时自动加载。第二种、也可以将js文件下载至本地,通过import引入,前提是将CLODOP对象export出......
  • Android 13.0 hal层关于新增自定义hal模块功能实现
    1.前言在13.0的系统rom定制化开发中,在对hal模块进行开发时,需要通过添加自定义的hal模块来实现某些功能时,就需要添加hal模块的相关功能,接下来就来实现一个案例来供参考接下来就来具体实现这个功能2.hal层关于新增自定义hal模块功能实现的核心类hardware\interfaces\3.ha......