Skip to content

Time-NLP的Python3版本 中文时间表达识别

Notifications You must be signed in to change notification settings

lizhzh8/Time-NLPY

 
 

Repository files navigation

新增说明:

ryanInf的版本有两个小问题 1、不能识别下星期下礼拜等和周相关的时间,已解决

2、在windows下使用有问题,ryanInf给出的方案不能解决这个问题。解决方案:将其中的regex.txt文件放入python的site-packages下 例如:D:\Users\Administrator\Anaconda3\Lib\site-packages\TimeConverter-1.0.0-py3.7.egg\resource\regex.txt

说明:

Time-NLP的python3版本,由于原作者sunfiyes的是python2版本,无法在python3上使用,故修改部分代码,使其可在Python3上使用(本人新手,可能有bug) 原项目地址:https://github.com/sunfiyes/Time-NLPY

安装方式:

  1. cd到当前目录
  2. python setup.py install

PS~ : window下可能出现安装regex错误,可到 https://www.lfd.uci.edu/~gohlke/pythonlibs/#regex 下载对应版本的regex手动安装。

使用方法

将中文时间描述转换为三种标准的时间格式的时间字符串:

  1. 时间点(timestamp,表示某一具体时间时间描述);
  2. 时间量(timedelta,表示时间的增量的时间描述);
  3. 时间区间(timespan,有具体起始和结束时间点的时间区间)。

示例:

from TimeNormalizer import TimeNormalizer # 引入包

tn = TimeNormalizer()

res = tn.parse(target='下周三下午两点30分五秒') # target为待分析语句,timeBase为基准时间默认是当前时间
print(res)
res = tn.parse(target='2013年二月二十八日下午四点三十分二十九秒', timeBase='2013-02-28 16:30:29') # target为待分析语句,timeBase为基准时间默认是当前时间
print(res)
res = tn.parse(target='我需要大概33天2分钟', timeBase='2013-02-28 16:30:29') # target为待分析语句,timeBase为基准时间默认是当前时间
print(res)
res = tn.parse(target='1月末') # target为待分析语句,timeBase为基准时间默认是当前时间
res = tn.parse(target='明天')
js = json.loads(res)
print(js)
print(res)

输出:

{"type": "timestamp", "timestamp": "2019-10-16 14:30:05"}
{"timestamp": "2013-02-28 16:30:29", "type": "timestamp"}
{"timedelta": "33 days, 0:02:00", "type": "timedelta"}
{'timestamp': '2019-03-27 00:00:00', 'type': 'timestamp'}
{"timestamp": "2019-03-27 00:00:00", "type": "timestamp"}

调用示例见Test.py

关于节假日的增加方法:

  1. 在resource目录下的holi_lunar(阴历)或holi_solar(阳历)文件内按照格式加入新增的节日名称和日期
  2. 在resource目录下的regex.txt文件内加入相应节日的正则匹配,并删除regex.pkl缓存文件
  3. 在TimeUnit类中的norm_setHoliday方法同样加入节日的正则匹配

About

Time-NLP的Python3版本 中文时间表达识别

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%