Time-NLP

中文语句中的时间语义识别

author:shinyke

github地址:https://github.com/shinyke/Time-NLP/

本工具是由复旦NLP中的时间分析功能修改而来,做了很多细节和功能的优化,具体如下:

  1. 泛指时间的支持,如:早上、晚上、中午、傍晚等。
  2. 时间未来倾向。 如:在周五输入“周一早上开会”,则识别到下周一早上的时间;在下午17点输入:“9点送牛奶给隔壁的汉子”则识别到第二天上午9点。
  3. 多个时间的识别,及多个时间之间上下文关系处理。如:"下月1号下午3点至5点到图书馆还书",识别到开始时间为下月1号下午三点。同时,结束时间也继承上文时间,识别到下月1号下午5点。
  4. 自定义基准时间:指定基准时间为“2016-05-20-09-00-00-00”,则一切分析以此时间为基准。
  5. 修复了各种各样的BUG

简而言之,这是一个输入一句话,能识别出话里的时间的工具。╮(╯▽╰)╭

使用方法详见测试类:

/**
 * <p>
 * 测试类
 * <p>
 * @author <a href="mailto:xinmeike@163.com">kexm</a>
 * @version 1.0
 * @since 2016年5月4日
 *
 */
public class TimeAnalyseTest {@Testpublic void test(){String path = TimeNormalizer.class.getResource("").getPath();String classPath = path.substring(0, path.indexOf("/com/time"));System.out.println(classPath+"/TimeExp.m");TimeNormalizer normalizer = new TimeNormalizer(classPath+"/TimeExp.m");normalizer.parse("Hi,all.下周一下午三点开会");// 抽取时间TimeUnit[] unit = normalizer.getTimeUnit();System.out.println("Hi,all.下周一下午三点开会");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime()); normalizer.parse("早上六点起床");// 注意此处识别到6天在今天已经过去,自动识别为明早六点(未来倾向,可通过开关关闭:new TimeNormalizer(classPath+"/TimeExp.m", false))unit = normalizer.getTimeUnit();System.out.println("早上六点起床");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("周一开会");// 如果本周已经是周二,识别为下周周一。同理处理各级时间。(未来倾向)unit = normalizer.getTimeUnit();System.out.println("周一开会");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("下下周一开会");//对于上/下的识别unit = normalizer.getTimeUnit();System.out.println("下下周一开会");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("6:30 起床");// 严格时间格式的识别unit = normalizer.getTimeUnit();System.out.println("6:30 起床");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("6-3 春游");// 严格时间格式的识别unit = normalizer.getTimeUnit();System.out.println("6-3 春游");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("6月3  春游");// 残缺时间的识别 (打字输入时可便捷用户)unit = normalizer.getTimeUnit();System.out.println("6月3  春游");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("明天早上跑步");// 模糊时间范围识别(可在RangeTimeEnum中修改unit = normalizer.getTimeUnit();System.out.println("明天早上跑步");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());normalizer.parse("本周日到下周日出差");// 多时间识别unit = normalizer.getTimeUnit();System.out.println("本周日到下周日出差");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());System.out.println(DateUtil.formatDateDefault(unit[1].getTime()) + "-" + unit[1].getIsAllDayTime());normalizer.parse("周四下午三点到五点开会");// 多时间识别,注意第二个时间点用了第一个时间的上文unit = normalizer.getTimeUnit();System.out.println("周四下午三点到五点开会");System.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + "-" + unit[0].getIsAllDayTime());System.out.println(DateUtil.formatDateDefault(unit[1].getTime()) + "-" + unit[1].getIsAllDayTime());//新闻随机抽取长句识别(2016年6月7日新闻,均以当日0点为基准时间计算)//例1normalizer.parse("昨天上午,第八轮中美战略与经济对话气候变化问题特别联合会议召开。中国气候变化事务特别代表解振华表示,今年中美两国在应对气候变化多边进程中政策对话的重点任务,是推动《巴黎协定》尽早生效。", "2016-06-07-00-00-00");unit = normalizer.getTimeUnit();System.out.println("昨天上午,第八轮中美战略与经济对话气候变化问题特别联合会议召开。中国气候变化事务特别代表解振华表示,今年中美两国在应对气候变化多边进程中政策对话的重点任务,是推动《巴黎协定》尽早生效。");for(int i = 0; i < unit.length; i++){System.out.println("时间文本:"+unit[i].Time_Expression +",对应时间:"+ DateUtil.formatDateDefault(unit[i].getTime()));}//例2normalizer.parse("《辽宁日报》今日报道,6月3日辽宁召开省委常委扩大会,会议从下午两点半开到六点半,主要议题为:落实中央巡视整改要求。", "2016-06-07-00-00-00");unit = normalizer.getTimeUnit();System.out.println("《辽宁日报》今日报道,6月3日辽宁召开省委常委扩大会,会议从下午两点半开到六点半,主要议题为:落实中央巡视整改要求。");for(int i = 0; i < unit.length; i++){System.out.println("时间文本:"+unit[i].Time_Expression +",对应时间:"+ DateUtil.formatDateDefault(unit[i].getTime()));}//例3normalizer.parse("去年11月起正式实施的刑法修正案(九)中明确,在法律规定的国家考试中,组织作弊的将入刑定罪,最高可处七年有期徒刑。另外,本月刚刚开始实施的新版《教育法》中也明确...", "2016-06-07-00-00-00");unit = normalizer.getTimeUnit();System.out.println("去年11月起正式实施的刑法修正案(九)中明确,在法律规定的国家考试中,组织作弊的将入刑定罪,最高可处七年有期徒刑。另外,本月刚刚开始实施的新版《教育法》中也明确...");for(int i = 0; i < unit.length; i++){System.out.println("时间文本:"+unit[i].Time_Expression +",对应时间:"+ DateUtil.formatDateDefault(unit[i].getTime()));}}/**
     * 修改TimeExp.m文件的内容
     */@Testpublic void editTimeExp(){String path = TimeNormalizer.class.getResource("").getPath();String classPath = path.substring(0, path.indexOf("/com/time"));System.out.println(classPath+"/TimeExp.m");/**写TimeExp*/Pattern p = Pattern.compile("your-regex");try {TimeNormalizer.writeModel(p, classPath+"/TimeExp.m");} catch (Exception e) {e.printStackTrace();}}
}

2016年6月7日9:44执行測試,结果如下:

Hi,all。下周一下午三点开会

2016-06-13 15:00:00-false

周一开会

2016-06-13 00:00:00-true

下下周一开会

2016-06-20 00:00:00-true

6:30 起床

2016-06-08 06:30:00-false

6-3 春游

2016-06-03 00:00:00-true

6月3日 春游

2016-06-03 00:00:00-true

明天早上跑步

2016-06-08 08:00:00-false

本周日到下周日出差

2016-06-12 00:00:00-true

2016-06-19 00:00:00-true

周四下午三点到五点开会

2016-06-16 15:00:00-false

2016-06-16 17:00:00-false

昨天上午,第八轮中美战略与经济对话气候变化问题特别联合会议召开。中国气候变化事务特别代表解振华表示,今年中美两国在应对气候变化多边进程中政策对话的重点任务,是推动《巴黎协定》尽早生效。

时间文本:昨天上午, 对应时间:2016-06-06 10:00:00

时间文本:今年, 对应时间:2016-01-01 00:00:00

《辽宁日报》今日报道,6月3日辽宁召开省委常委扩大会,会议从下午两点半开到六点半,主要议题为:落实中央巡视整改要求。

时间文本:今日, 对应时间:2016-06-07 00:00:00

时间文本:6月3日, 对应时间:2016-06-03 00:00:00

时间文本:下午2点半, 对应时间:2016-06-03 14:30:00

时间文本:6点半, 对应时间:2016-06-03 18:30:00

去年11月起正式实施的刑法修正案(九)中明确,在法律规定的国家考试中,组织作弊的将入刑定罪,最高可处七年有期徒刑。另外,本月刚刚开始实施的新版《教育法》中也明确...

时间文本:去年11月, 对应时间:2015-11-01 00:00:00

时间文本:本月, 对应时间:2016-06-01 00:00:00

如果您使用并有意见和建议,欢迎在Issue和我交流。若觉得好用,你的star是对作者最好的支持

Enjoy ** - shinyke**

【开源】Time-NLP 中文语句中的时间语义识别相关推荐

  1. 4.1.19 Flink-流处理框架-Flink中的时间语义和watermark水位线

    目录 1.Flink中的时间语义 1.1 EventTime 的代码设置 2.Watermark水位线 2.1 watermark的基本概念 2.2 watermark的特点和传递 2.3 Water ...

  2. 时间语义解析工具 Python版,从文本中提取时间,并解析其含义,在线使用,时间语义识别

    时常我们需要从文本中,提取出时间信息,并将这个信息标准化,例如: [新华社报2021-9-9]国家统计局今天发布了2021年8月份全国CPI(居民消费价格指数) 需要从中抽取出 2021-9-9 和 ...

  3. sql语句中的时间查询

    一般来说,我们在mysql数据库纪录数据时间时,都会选择datatime类型,这样时间可以精确到秒.但随之而来的一个问题是,当我们要取得某一段时间内的数据内容会有一些时间转换上的麻烦,例如我们要取得2 ...

  4. python输出日期语句_如何从Python的原始语句中提取时间-日期-时间段信息

    经过几天的研究,我想出了以下方法来解决提取问题.在识别命题,然后识别月份并进行提取.在 识别"-",然后识别月份并进行提取.在 部分代码如下所示.(节选,需要上下文中的依赖项)ne ...

  5. 记一次数据挖掘:中文语句情绪多标签分类问题

    记一次数据挖掘:中文语句情绪多标签分类问题 将中文语句矩阵数字化 对8个类别进行模型建立,找到8个最适合的机器学习模型 将中文语句矩阵数字化 import pandas as pd import pi ...

  6. Flink 中的时间和窗口

    时间和窗口 一.时间语义 1. Flink 中的时间语义 1.1 处理时间(Processing Time) 1.2 事件时间(Event Time) 1.3 两种时间语义的对比 二.水位线(Wate ...

  7. Flink中的时间和窗口——时间语义

    文章目录 前言 一.时间语义 1.1.Flink 中的时间语义 1.1.1.处理时间(Processing Time) 1.1.2.事件时间(Event Time) 1.2.哪种时间语义更重要 1.2 ...

  8. 【NLP】一文了解命名实体识别

    导读:从1991年开始,命名实体识别逐渐开始走进人们的视野,在各评测会议的推动下,命名实体识别技术得到了极大地发展,从最初的基于规则和字典的方法,到现在热门的注意力机制.图神经网络等方法,命名实体识别 ...

  9. NLP 中文形近字相似度算法开源实现

    项目简介 nlp-hanzi-similar 为汉字提供相似性的计算. 创作目的 有一个小伙伴说自己在做语言认知科学方向的课题研究,看了我以前写的 NLP 中文形近字相似度计算思路 就想问下有没有源码 ...

最新文章

  1. mac下日期、时间戳互转
  2. java 怎么清除画布_HTML5 Canvas 清除画布
  3. MFC绘制动态曲线,用双缓冲绘图技术防闪烁
  4. Zookeeper实现Master选举(哨兵机制)
  5. Kubernetes 是如何调度的?
  6. 面试官:如何实现 List 集合去重?
  7. android gif 处理,gifflen 调用以及错误处理
  8. PHP try catch用法
  9. Oracle RAC 10.2.0.5升级到11.2.0.4遇到的问题
  10. Gatling性能测试(一)
  11. Python windows serial
  12. Python数据结构实战—栈(Stack)
  13. 自学python要多久-大家觉得自学python多久能学会?
  14. 转 自定义View之onMeasure()
  15. Android 百度图像识别(详细步骤+源码)
  16. 天行健,君子自强不息
  17. 怎么看电脑的hdmi是输出还是输入_笔记本hdmi接口是输入还是输出
  18. 计算机设置ip后提示未识别网络连接,Win7出现提示“未识别的网络无Internet访问”怎么解决?...
  19. java replaceall 问号_java中替换问号 | 学步园
  20. H5页面rem兼容适配及华为样式调整

热门文章

  1. c语言表达式怎么理解,C语言中是什么意思?ab怎么理解?
  2. 必联路由器linux系统,必联网卡驱动下载_硬件驱动下载
  3. [转] unity功能开发——实名认证
  4. NFC支付中token的应用
  5. 网络编程——基本名词术语解析
  6. 中医论治帕金森|中医治疗帕金森病康复案例分析
  7. 如何给AWS CLI启用MFA
  8. PMP 真的没用吗?
  9. QT 定时器 QTimer 使用
  10. canvas画图-钟表