前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我开源了一款名叫JioNLP的时间语义解析包

我开源了一款名叫JioNLP的时间语义解析包

作者头像
黄鸿波
发布2021-09-29 15:48:56
1.9K0
发布2021-09-29 15:48:56
举报
文章被收录于专栏:AI的那些事儿AI的那些事儿

提问:大家在做NLP 任务的时候,有没有遇到解析文本中时间的问题呢?比如,对着智能音箱说:

小爱同学,明天早上7点20叫我起床”。

智能音箱第二天就能准时打响闹钟。这时,我们必须把其中的 “明天早上7点20”这个时间实体准确解析出来,并映射到标准时间轴上,得到 “2021-09-18 07:20:00”这个时间点(假设今天是9月17日)。

JioNLP(https://github.com/dongrixinyu/JioNLP) 这个时间语义解析功能在开源领域效果最好。该工具包基于Python语言,安装简单:

代码语言:javascript
复制
pip install jionlp

且已经在JioNLP网页版-时间语义解析(http://182.92.160.94:16666/#/parse_time)网页上,可以直接试用调用。

目前已经支持了绝大部分自然语言的时间表达转换,使用简便,比如以下这些:

代码语言:javascript
复制
``` python
import time
import jionlp as jio
res = jio.parse_time('今年9月', time_base={'year': 2021})
print(res)
res = jio.parse_time('零三年元宵节晚上8点半', time_base=time.time())
print(res)
res = jio.parse_time('一万个小时')
print(res)
res = jio.parse_time('100天之后', time.time())
print(res)
res = jio.parse_time('每周五下午4点', time.time())
print(res)
代码语言:javascript
复制
# {'type': 'time_span', 'definition': 'accurate', 'time': ['2021-09-01 00:00:00', '2021-09-30 23:59:59']}
# {'type': 'time_point', 'definition': 'accurate', 'time': ['2003-02-15 20:30:00', '2003-02-15 20:30:59']}
# {'type': 'time_delta', 'definition': 'accurate', 'time': {'hour': 10000.0}}
# {'type': 'time_span', 'definition': 'blur', 'time': ['2021-10-22 00:00:00', 'inf']}
# {'type': 'time_period', 'definition': 'accurate', 'time': {'delta': {'day': 7},
#  'point': {'time': ['2021-07-16 16:00:00', '2021-07-16 16:59:59'], 'string': '周五下午4点'}}}

```

平时我们做命名实体识别,往往看见时间字符串,就打上“TIME”标签结束了。从上面的若干例子可以看出,时间实体的划分也分为很多类型,主要有时间点(time_point)、时间范围(time_span)、时间长度(time_delta)、时间周期(time_period)、虚拟时间(time_virtual)、时间问词(time_query)等。每个概念的解释就放在下图:

每一种类型,在时间语义解析说明文档(https://github.com/dongrixinyu/JioNLP/wiki/时间语义解析-说明文档)中都有详细的说明。

根据目前掌握的处理情况看,该工具解析正确率在95%左右,还有进步空间,如果试用过程中遇到无法解析的时间字符串,可以在 Github 上提交报错信息。

对了,还需注意一点,像上面的例子一样,该解析时间工具要求所传入的时间字符串一定是干净的时间实体!这样解析结果才更有保证。有的同学会问,那我还得另外找一个时间类型的实体识别模型吗?

倒也不用~~~JioNLP 还提供了一个基于规则的时间类型的实体识别工具。使用时,直接传入整篇文章即可。使用方式简单如下:

代码语言:javascript
复制
``` python
import time
import jionlp as jio
text = '【新华社报2021-9-9】南方都市报今天发布了2021年8月份全国CPI(居民消费价格指数)和PPI(工业生产者出厂价格指数)数据。'
res = jio.ner.extract_time(text, time_base={'year': 2021})
print(res)

# [{'text': '2021-9-9', 'offset': [5, 13], 'type': 'time_point'},
#  {'text': '今天', 'offset': [19, 21], 'type': 'time_point'},
#  {'text': '2021年8月份', 'offset': [24, 32], 'type': 'time_point'}]
```

同样地,该工具也提供了网页版,还不直接进来JioNLP网页版试用一下。

JioNLP网页版-时间实体抽取(http://182.92.160.94:16666/#/extract_time)

这个项目还很年轻,如果在编写代码时遇到解析错误或抽取错误,别急,到Github(https://github.com/dongrixinyu/JioNLP) 上来提问和反馈吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI的那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档