{"id":18284857,"url":"https://github.com/samlet/timenlp","last_synced_at":"2025-04-09T05:47:47.606Z","repository":{"id":95955707,"uuid":"224747065","full_name":"samlet/timenlp","owner":"samlet","description":"a nlp library support Chinese date time","archived":false,"fork":false,"pushed_at":"2020-10-13T17:50:02.000Z","size":161,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-15T00:28:41.420Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/samlet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-29T00:06:01.000Z","updated_at":"2019-12-18T19:07:59.000Z","dependencies_parsed_at":"2023-03-24T06:32:50.415Z","dependency_job_id":null,"html_url":"https://github.com/samlet/timenlp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samlet%2Ftimenlp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samlet%2Ftimenlp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samlet%2Ftimenlp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samlet%2Ftimenlp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samlet","download_url":"https://codeload.github.com/samlet/timenlp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247987108,"owners_count":21028891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T13:14:48.627Z","updated_at":"2025-04-09T05:47:47.588Z","avatar_url":"https://github.com/samlet.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Time-NLP\n#中文语句中的时间语义识别\n\nauthor：shinyke\n\n\n本工具是由复旦NLP中的时间分析功能修改而来，做了很多细节和功能的优化，具体如下：\n\n1. **泛指时间**的支持，如：早上、晚上、中午、傍晚等。\n2. 时间**未来倾向**。 如：在周五输入“周一早上开会”，则识别到下周一早上的时间；在下午17点输入：“9点送牛奶给隔壁的汉子”则识别到第二天上午9点。\n3. **多个时间的识别，及多个时间之间上下文关系处理**。如：\"下月1号下午3点至5点到图书馆还书\"，识别到开始时间为下月1号下午三点。同时，结束时间也**继承上文时间**，识别到下月1号下午5点。\n4. 可**自定义基准时间**：指定基准时间为“2016-05-20-09-00-00-00”，则一切分析以此时间为基准。\n5. **修复了各种各样的BUG**。\n\n\u003cfont color=#0099ff\u003e简而言之，这是一个输入一句话，能识别出话里的时间的工具。╮(╯▽╰)╭\u003c/fo\u003e\n\n使用方法详见测试类：\n``` java\n/**\n * \u003cp\u003e\n * 测试类\n * \u003cp\u003e\n * @author \u003ca href=\"mailto:xinmeike@163.com\"\u003ekexm\u003c/a\u003e\n * @version 1.0\n * @since 2016年5月4日\n * \n */\npublic class TimeAnalyseTest {\n\t\n\t@Test\n\tpublic void test(){\n\t\tString path = TimeNormalizer.class.getResource(\"\").getPath();\n\t\tString classPath = path.substring(0, path.indexOf(\"/com/time\"));\n\t\tSystem.out.println(classPath+\"/TimeExp.m\");\n\t\tTimeNormalizer normalizer = new TimeNormalizer(classPath+\"/TimeExp.m\");\n\n\t\t\n\t\tnormalizer.parse(\"Hi，all.下周一下午三点开会\");// 抽取时间\n\t\tTimeUnit[] unit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"Hi，all.下周一下午三点开会\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime()); \n\t\t\n\t\tnormalizer.parse(\"早上六点起床\");// 注意此处识别到6天在今天已经过去，自动识别为明早六点（未来倾向，可通过开关关闭：new TimeNormalizer(classPath+\"/TimeExp.m\", false)）\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"早上六点起床\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"周一开会\");// 如果本周已经是周二，识别为下周周一。同理处理各级时间。（未来倾向）\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"周一开会\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"下下周一开会\");//对于上/下的识别\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"下下周一开会\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"6:30 起床\");// 严格时间格式的识别\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"6:30 起床\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"6-3 春游\");// 严格时间格式的识别\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"6-3 春游\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"6月3  春游\");// 残缺时间的识别 （打字输入时可便捷用户）\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"6月3  春游\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"明天早上跑步\");// 模糊时间范围识别（可在RangeTimeEnum中修改\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"明天早上跑步\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"本周日到下周日出差\");// 多时间识别\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"本周日到下周日出差\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[1].getTime()) + \"-\" + unit[1].getIsAllDayTime());\n\t\t\n\t\tnormalizer.parse(\"周四下午三点到五点开会\");// 多时间识别，注意第二个时间点用了第一个时间的上文\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"周四下午三点到五点开会\");\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[0].getTime()) + \"-\" + unit[0].getIsAllDayTime());\n\t\tSystem.out.println(DateUtil.formatDateDefault(unit[1].getTime()) + \"-\" + unit[1].getIsAllDayTime());\n\t\t\n\t\t//新闻随机抽取长句识别（2016年6月7日新闻,均以当日0点为基准时间计算）\n\t\t//例1\n\t\tnormalizer.parse(\"昨天上午，第八轮中美战略与经济对话气候变化问题特别联合会议召开。中国气候变化事务特别代表解振华表示，今年中美两国在应对气候变化多边进程中政策对话的重点任务，是推动《巴黎协定》尽早生效。\", \"2016-06-07-00-00-00\");\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"昨天上午，第八轮中美战略与经济对话气候变化问题特别联合会议召开。中国气候变化事务特别代表解振华表示，今年中美两国在应对气候变化多边进程中政策对话的重点任务，是推动《巴黎协定》尽早生效。\");\n\t\tfor(int i = 0; i \u003c unit.length; i++){\n\t\t    System.out.println(\"时间文本:\"+unit[i].Time_Expression +\",对应时间:\"+ DateUtil.formatDateDefault(unit[i].getTime()));\n\t\t}\n\t\t \n\t\t//例2\n\t\tnormalizer.parse(\"《辽宁日报》今日报道，6月3日辽宁召开省委常委扩大会，会议从下午两点半开到六点半，主要议题为：落实中央巡视整改要求。\", \"2016-06-07-00-00-00\");\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"《辽宁日报》今日报道，6月3日辽宁召开省委常委扩大会，会议从下午两点半开到六点半，主要议题为：落实中央巡视整改要求。\");\n\t\tfor(int i = 0; i \u003c unit.length; i++){\n\t\t    System.out.println(\"时间文本:\"+unit[i].Time_Expression +\",对应时间:\"+ DateUtil.formatDateDefault(unit[i].getTime()));\n\t\t}\n\t\t \n\t\t//例3\n\t\tnormalizer.parse(\"去年11月起正式实施的刑法修正案（九）中明确，在法律规定的国家考试中，组织作弊的将入刑定罪，最高可处七年有期徒刑。另外，本月刚刚开始实施的新版《教育法》中也明确...\", \"2016-06-07-00-00-00\");\n\t\tunit = normalizer.getTimeUnit();\n\t\tSystem.out.println(\"去年11月起正式实施的刑法修正案（九）中明确，在法律规定的国家考试中，组织作弊的将入刑定罪，最高可处七年有期徒刑。另外，本月刚刚开始实施的新版《教育法》中也明确...\");\n\t\tfor(int i = 0; i \u003c unit.length; i++){\n\t\t    System.out.println(\"时间文本:\"+unit[i].Time_Expression +\",对应时间:\"+ DateUtil.formatDateDefault(unit[i].getTime()));\n\t\t}\n\t}\n\t\n\t/**\n\t * 修改TimeExp.m文件的内容\n\t */\n\t@Test\n\tpublic void editTimeExp(){\n\t\tString path = TimeNormalizer.class.getResource(\"\").getPath();\n\t\tString classPath = path.substring(0, path.indexOf(\"/com/time\"));\n\t\tSystem.out.println(classPath+\"/TimeExp.m\");\n\t\t/**写TimeExp*/\n\t\tPattern p = Pattern.compile(\"your-regex\");\n\t\ttry {\n\t\t\tTimeNormalizer.writeModel(p, classPath+\"/TimeExp.m\");\n\t\t} catch (Exception e) {\n\t\t\te.printStackTrace();\n\t\t}\n\t}\n}\n```\n\u003cbr\u003e\n\n在`2016年6月7日9:44`执行測試，结果如下：\n\n\nHi，all。下周一下午三点开会\n\n2016-06-13 15:00:00-false\n\n周一开会\n\n2016-06-13 00:00:00-true\n\n下下周一开会\n\n2016-06-20 00:00:00-true\n\n6:30 起床\n\n2016-06-08 06:30:00-false\n\n6-3 春游\n\n2016-06-03 00:00:00-true\n\n6月3日  春游\n\n2016-06-03 00:00:00-true\n\n明天早上跑步\n\n2016-06-08 08:00:00-false\n\n本周日到下周日出差\n\n2016-06-12 00:00:00-true\n\n2016-06-19 00:00:00-true\n\n周四下午三点到五点开会\n\n2016-06-16 15:00:00-false\n\n2016-06-16 17:00:00-false\n\n昨天上午，第八轮中美战略与经济对话气候变化问题特别联合会议召开。中国气候变化事务特别代表解振华表示，今年中美两国在应对气候变化多边进程中政策对话的重点任务，是推动《巴黎协定》尽早生效。\n\n时间文本:昨天上午,  对应时间:2016-06-06 10:00:00\n\n时间文本:今年,  对应时间:2016-01-01 00:00:00\n\n《辽宁日报》今日报道，6月3日辽宁召开省委常委扩大会，会议从下午两点半开到六点半，主要议题为：落实中央巡视整改要求。\n\n时间文本:今日,  对应时间:2016-06-07 00:00:00\n\n时间文本:6月3日,  对应时间:2016-06-03 00:00:00\n\n时间文本:下午2点半,  对应时间:2016-06-03 14:30:00\n\n时间文本:6点半,  对应时间:2016-06-03 18:30:00\n\n\n去年11月起正式实施的刑法修正案（九）中明确，在法律规定的国家考试中，组织作弊的将入刑定罪，最高可处七年有期徒刑。另外，本月刚刚开始实施的新版《教育法》中也明确...\n\n时间文本:去年11月,  对应时间:2015-11-01 00:00:00\n\n时间文本:本月,  对应时间:2016-06-01 00:00:00\n\n\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n如果您使用并有意见和建议，欢迎在Issue和我交流。若觉得好用，你的star是对作者最好的支持。\u003cbr/\u003e\n\nEnjoy ** - shinyke**\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamlet%2Ftimenlp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamlet%2Ftimenlp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamlet%2Ftimenlp/lists"}