JioNLP上的那些好用的冷门工具

news2024/12/23 9:47:29
alt

大家好,JioNLP(https://github.com/dongrixinyu/JioNLP)目前已经在Github上有了1600星的点赞,下载安装量大概有几万了。

被使用最多的功能,也是被问得最多的,主要是关键短语抽取、时间语义解析、地址按省市县三级解析等等。其它功能较少使用到。然而,作为开发者,我自己在工作中经常用到的一些功能函数,甚少被关注或者提问,因此,本文主要是向大家介绍几个我平时常用,但是大家少有关注到的功能函数。

一、判断一个字符串是否包含中文

NLP 里有一类任务是文本抽取和解析类任务,经常需要使用一些工具从 PDF、word 等 文档中抽取出相关信息,并基于逻辑对这些文本数据信息进行清洗和提取。

如果你做过上述的规则编写,那么肯定少不了经常判断文本中是否有数字、是否有中文汉字等等。

JioNLP 提供了若干函数用于判断:

jio.check_any_chinese_char 判断文本中是否包含中文汉字

>>> import jionlp as jio
>>> print(jio.check_any_chinese_char('【新华社消息】(北京时间)从昨天...'))

# True
  • 检查文本中是否包含中文字符,若 至少包含一个,则返回 True,否则返回 False。若为空字符串,返回 False。

jio.check_all_chinese_char 判断文本中是否全部都是汉字

>>> import jionlp as jio
>>> print(jio.check_all_chinese_char('【新华社消息】(北京时间)从昨天...'))

# False
  • 检查文本中是否全部都是中文字符,若全部都是,则返回 True;若至少有一个不是中文字符,否则返回 False。若为空字符串,返回 False

  • 除了判断汉字之外,还有判断阿拉伯数字的方法 check_any_arabic_numcheck_all_arabic_num 两个。使用方法也和上面一样。

二、分句

分句实在是太基础了,面对长文本,都需要做分句处理。

这听起来是个简单的问题,但是,在中文中,还是有一些引号、冒号等标点符号情况较为特殊,此时,jio.split_sentence 函数就派上了用场。

>>> import jionlp as jio
>>> text = '他说:“中华古汉语,泱泱大国,历史传承的瑰宝。。。”'
>>> res = jio.split_sentence(text, criterion='fine')
>>> print(res)

# ['他说:', '“中华古汉语,', '泱泱大国,', '历史传承的瑰宝。。。”']
  • 注意这个例子中,包含了引号,冒号,这些都是 jionlp 工具可以完美解决的。
  • criterion 指的是分类标准,可以选择 fine 或者 coarse 两种,分别表示了精细的和粗糙的分句方式,适用于不同的任务场景。

三、加载停用词典

停用词典,人人都用,你是怎么使用的?是不是每次都得找一下词典,再写个读写文件的代码?而且网上流行的百度北大讯飞停用词典,也不知道该选择哪个好。

为了方便加载停用词典,我将综合上述多个词典的停用词典,整理在了 jionlp 中,只需要执行

import jionlp as jio
stopwords_list = jio.stopwords_loader()
  • 是不是很方便,再也不用自己留存了。

四、货币金额抽取

有小伙伴是做一些裁判文书招股说明书解析的,这也属于NLP 的范畴,里面免不了涉及一些货币金额的解析,例如上市公司的毛利、净利润、支出等等。判决文书中的赔偿金额等等。此时,货币金额解析就显得非常重要了。

>>> import time
>>> import json
>>> import jionlp as jio
>>> text = '张三赔偿李大花人民币车费601,293.11元,工厂费大约一万二千三百四十五元,利息9佰日元,打印费十块钱。'
>>> res = jio.ner.extract_money(text, with_parsing=False)
>>> print(json.dumps(res, ensure_ascii=False, indent=4, separators=(','':')))

# [{'text': '601,293.11元', 'offset': [12, 23], 'type': 'money'},
#  {'text': '大约一万二千三百四十五元', 'offset': [27, 39], 'type': 'money'},
#  {'text': '9佰日元', 'offset': [42, 46], 'type': 'money'},
#  {'text': '人民币十块钱', 'offset': [50, 56], 'type': 'money'}]
  • 该方法抽取出货币实体,再结合 jio.parse_money 将每一个货币金额实体归一化,形成可计算的数字类型
>>> import jionlp as jio
>>> text_list = ['约4.287亿美元''两个亿卢布''六十四万零一百四十三元一角七分''3000多欧元'
>>> moneys = [jio.parse_money(text) for text in text_list]

# 约4.287亿美元: {'num': '428700000.00', 'case': '美元', 'definition': 'blur'}
# 两个亿卢布: {'num': '200000000.00', 'case': '卢布', 'definition': 'accurate'}
# 六十四万零一百四十三元一角七分: {'num': '640143.17', 'case': '元', 'definition': 'accurate'}
# 3000多欧元: {'num': ['3000.00', '4000.00'], 'case': '欧元', 'definition': 'blur'}

这样一来,就可以成功得到可计算的货币金额了。

当然,功能都是可能存在缺陷的,随着越来越多的码农使用,功能也日趋完善,如果有疑问,直接到 JioNLP提交bug单里提单即可。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员迷茫:30岁以上的“大龄程码农”出路在哪?java码农该怎么办?

程序员生存、成功、制胜的法则源自IT精英的职业发展秘诀热爱工作,享受生活 为什么程序员过了30就不行了? 我们被固定在“敲代码”的坑里,一干就是10年,再干别的早已不会。敲代码已经成了一项流水线般的工作,就像搬砖工…

Postman非GUI运行脚本工具Newman的安装简介

一、Newman简介 Newman是为Postman而生, 专门用来运行Postman编写好的脚本;使用Newman, 你可以很方便的用命令行来执行postman collections 二、Newman安装 1.先下载Node.js https://nodejs.org/zh-cn/download/ 根据自己电脑系统及位数…

数字验证学习笔记——SystemVerilog芯片验证12 ——句柄的使用包的使用

一、句柄的使用 句柄可以作为形式参数通过方法来完成对象指针的传递,从外部传入方法内部。 句柄也可以在方法内部首先完成修改,而后再由外部完成使用 最后会报错,因为create(t)定义的是function,没有返回…

锁机制之 Condition 接口

1. 前言 本节内容主要是对 Java 锁机制之 Condition 接口进行讲解,Condition 接口是配合 Lock 接口使用的,我们已经学习过 Lock 接口的相关知识,那么接下来对 Condition 接口进行讲解。本节内容的知识点如下: 2. Condition 接口…

cookie、localStorage 和sessionStorage

文章目录Cookie1.什么是 Cookie?2.cookie的工作机制,运作流程cookie属性项3.读取cookie4.修改cookie5.删除cookielocalStorage 和sessionStorage1.生存期2.数据结构3.API 不管是 localStorage,还是 sessionStorage,可使用的API都相…

基于FPGA+MPU+MCU全自动血细胞分析仪解决方案

全自动血细胞分析仪是医院临床检验应用非常广泛的仪器之一,用来检测红细胞、血红蛋白、白细胞、血小板等项目。是基于电子技术和自动化技术的全自动智能设备,功能齐全,操作简单,依托相关计算机系统在数据处理和数据分析等方面具有…

蓝牙学习三(GAP)

1.简介 GAP(Generic Access Profile-通用访问配置文件)与应用层紧密相连,所以要想了解BLE,GAP是必须认识的东西。 在第一章中我们说过GAP层,GAP层目前主要用来进行广播、扫描和发起连接。GAP保证了不同的BLE设备可以互…

深度学习入门(7)误差反向传播计算方式及简单计算层的实现

在上一节中《深度学习入门(6)误差反向传播基础---计算图与链式法则》,我们介绍了误差反向传播的计算图与导数计算的链式法则,这一节主要介绍计算图中各计算节点的误差反向传播计算方式,以及加法与乘法层的实现。 目录…

Scala系列-4、scala中特质、柯里化、闭包等

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 传送门:大数据系列文章目录 目录scala中特质特质作为接口使用特质中放置非抽象的成员特质的模板操作特质的混入对象操作特质的执行链…

T31开发笔记: 使用FTP上传下载文件

若该文为原创文章,转载请注明原文出处 一、前言 最段时间,在开发IPC时,突然想到把录制好的MP4文件上传到服务器,考虑了一些方法,感觉用TFP方式比较好,可以下载和上传文件,只需要搭建一个简单的…

【Mybatis编程:修改数据(动态SQL)】

目录 1. 在AlbumMapper.java中添加抽象方法 2. 在AlbumMapper.xml中配置SQL 3. 在AlbumMapperTests.java中编写并执行测试 1. 在AlbumMapper.java中添加抽象方法 在AlbumMapper.java中添加抽象方法: /** * 修改相册数据 * * param album 封装了被修改的相册的…

【Mybatis编程:批量插入相册(动态SQL)】

目录 1. 书写SQL语句 2. 在AlbumMapper.java中添加抽象方法 3. 在AlbumMapper.xml中配置SQL 4. 在AlbumMapperTests.java中编写并执行测试 1. 书写SQL语句 需要执行的SQL语句大致是: insert into pms_album (name, description, sort) values (?,?,?), (?…

AcWing算法基础课笔记 1.基础算法

目录AcWing算法基础课笔记 1.基础算法二分排序基本思想代码归并排序基本思路代码高精度计算加法减法乘法除法前缀和一维二维AcWing算法基础课笔记 1.基础算法 二分排序 基本思想 基于分治的思想 确定哨兵xxx:可以取左边界,中间值,右边界&…

Docker的容器管理操作

Docker的容器管理操作Docker的容器管理操作1. 创建容器2. 启动容器3、查看容器的运行状态4、创建并启动容器5、在后台持续运行 docker run 创建的容器6、停止容器7、 删除容器8、 容器的进入9、查看容器的元数据——docker inspect10、容器日志11、宿主机和容器之间的文件复制将…

Android——FloatingActionButton使用说明以及避坑

1、简介 1.1、 com.android.support库下 compile com.android.support:design:26.0.0 1.2、material库下 com.google.android.material.floatingactionbutton.FloatingActionButton 库下 implementation com.google.android.material:material:1.1.0 官方地址:…

怎么有效地进行问卷发放?

进行问卷调查分为四步:制作问卷、发放问卷、收集问卷、分析问卷。其中,发放问卷起到了关键性的作用。他关乎到我们后续收集问卷是否顺利,收集到的问卷数据是否具备真实性和有效性。那么,怎么有效地进行问卷发放呢? 1、…

右键实现打开对应的软件

右键实现打开对应的软件前言:下面我以右键打开Pycharm为例子!!!一、打开注册表1.1 WinR,输入regedit,回车二、实现右键打开特定文件的效果2.1找到路径:计算机\HKEY_CLASSES_ROOT\*\shell2.2 创建文件夹2.3 …

【In-Context Learning】Meta-learning via Language Model In-context Tuning

In-Context Learning是最近比较火热的方向,其主要针对超大规模模型(例如1750B参数量的GPT-3模型),在只提供少量标注样本作为提示的前提下,即可以实现很惊艳的效果。本文将元学习引入到In-Context Learning中。 论文PDF…

企业实践开源的动机

文章来源:” 夜天之书 “微信公众号 作者:tison 随着开源软件全面占据软件供应链的各个阶段,商业公司开发基础软件或业务逻辑的时候,已经避不开对软件的使用了。经过一段时间对开源软件的使用,以及开源吞噬软件的趋势…

海量Redis数据库优化,vivo如何实现成本与性能的平衡

概述 随着数字化技术的创新以及时延敏感型应用的持续落地,越来越多的数据需要实现实时或近实时的处理,这推动了 Redis 等内存数据库的广泛应用。此类数据库对于内存容量有着较高的要求,在数据快速增长的背景下,大内存池构建意味着…