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

2024-06-09 00:44

本文主要是介绍将stanfordcorenlp的tokenizer换成自定义的(或用stanfordcorenlp对自定义tokenizer分词后的结果做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是用于显示日志信息,便于报错是寻找bugner_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

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

这篇关于将stanfordcorenlp的tokenizer换成自定义的(或用stanfordcorenlp对自定义tokenizer分词后的结果做ner)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043776

相关文章

ROS话题通信流程自定义数据格式

ROS话题通信流程自定义数据格式 需求流程实现步骤定义msg文件编辑配置文件编译 在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:

添加自定义的CALayer

iOS开发UI篇—CAlayer(创建图层) 一、添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控制器view的layer上)  1 // 2 // YYViewController.m 3 // 01-创建一个简单的图层 4 // 5 //

android自定义View的和FramgentActivity的一个小坑

对于自定义View //加载样式TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TitleBarView, defStyleAttr, 0);setTitle(typedArray.getString(R.styleable.TitleBarView_main_title));//不能写成

第三十七章 添加和使用自定义标题元素 - 自定义标头的继承

文章目录 第三十七章 添加和使用自定义标题元素 - 自定义标头的继承自定义标头的继承示例 在 `SOAPHEADERS` 参数中指定支持的标头元素自定义标头的继承 第三十七章 添加和使用自定义标题元素 - 自定义标头的继承 自定义标头的继承 如果创建此Web 服务的子类,该子类将继承不特定于方法的标头信息 — 包含在 <request> 或 <response> 元素中的标头信

自定义recyclerView实现时光轴效果

时光轴效果在很多app上都有出现,例如淘宝中快递的跟踪,本文将使用recyclerView实现时光轴效果,我们会到自定义控件,首先先看一下效果图: 接下来是步骤分析 1自定义属性 这个大家应该都了解了,根据我们之前的分析,直接在attrs.xml中进行声明 <declare-styleable name="TimeLine"><attr name="beginLine" f

Android自定义系列——9.Path详细用法

rXxx方法 rXxx方法的坐标使用的是相对位置(基于当前点的位移),而之前方法的坐标是绝对位置(基于当前坐标系的坐标)。 Path path = new Path();path.moveTo(100,100);path.lineTo(100,200);canvas.drawPath(path,mDeafultPaint); 在这个例子中,先移动点到坐标(100,100)处,之后再连接

Android自定义系列——8.Path之贝塞尔曲线

贝塞尔曲线能干什么 贝塞尔曲线作用十分广泛,简单举几个的栗子: QQ小红点拖拽效果一些炫酷的下拉刷新控件阅读软件的翻书效果一些平滑的折线图的制作很多炫酷的动画效果 理解贝塞尔曲线的原理 一阶曲线原理: 一阶曲线是没有控制点的,仅有两个数据点(A 和 B),最终动态过程如下: (本文中贝塞尔曲线相关的动态演示图片来自维基百科)。一阶曲线其实就是前面讲解过的lineTo。 二阶曲线

Android自定义系列——7.Path之基本操作

Path常用方法表 为了兼容性(偷懒) 本表格中去除了部分API21(即安卓版本5.0)以上才添加的方法。 作用相关方法备注移动起点moveTo移动下一次操作的起点位置设置终点setLastPoint重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同连接直线lineTo添加上一个点到当前点之间的直线到Path闭合路径close连接第一个点连接到最后一个点,形成一个闭合

Android自定义系列——6.PorterDuffXfermode

在用Android中的Canvas进行绘图时,可以通过使用PorterDuffXfermode将所绘制的图形的像素与Canvas中对应位置的像素按照一定规则进行混合,形成新的像素值,从而更新Canvas中最终的像素颜色值,这样会创建很多有趣的效果。当使用PorterDuffXfermode时,需要将将其作为参数传给Paint.setXfermode(Xfermode xfermode)方法,这样在

Android自定义系列——4.Canvas操作

1.画布操作 为什么要有画布操作? 画布操作可以帮助我们用更加容易理解的方式制作图形。 ⑴位移(translate) translate是坐标系的移动,可以为图形绘制选择一个合适的坐标系。 请注意,位移是基于当前位置移动,而不是每次基于屏幕左上角的(0,0)点移动,如下: // 省略了创建画笔的代码// 在坐标原点绘制一个黑色圆形mPaint.setColor(Color.BLACK);ca