对文本进行处理的时候,大家有没有遇到过这样的烦恼——对于文本表示日期的实体,当我们希望把它提取出来时,由于日期格式五花八门,实际处理过程中总会发现各种各样的bug(血泪教训),洛基在网上也没有找到一个特别好的日期格式化的程序,所以打算自己写一个,对于遇到的问题也会不断更新,特记录在此博客中,后续会更新到github上。(update:代码上传到github了,地址戳这里~)
简单介绍一下这个程序:输入是一个字符串,该字符串包含一个日期表示以及其他的噪声字符,程序会进行正则匹配并识别出日期,返回标准时间戳格式的日期字符串。使用方法也很简单:
from date_uniform.utils import date_format
output = date_format(string_text)
实际使用效果如下:
* input:15. MARCH. 2021, output:2021-03-15 00:00:00
* input:2-DEC-21, output:2021-12-02 00:00:00
* input:2-十二月-21, output:2021-12-02 00:00:00
* input:2-十二月-20, output:2020-12-02 00:00:00
* input:2-十二月-22, output:2022-12-02 00:00:00
* input:28 - Jul - 21, output:2021-07-28 00:00:00
* input:June.8,2021, output:2021-06-08 00:00:00
* input:12月 4日, output:2022-12-04 00:00:00
* input:2021 - 07 - 05, output:2021-07-05 00:00:00
* input:2021.07.29, output:2021-07-29 00:00:00
* input:2021年8月30日, output:2021-08-30 00:00:00
* input:2021 年06 月06 日, output:2021-06-06 00:00:00
* input:2021 / 09 / 11, output:2021-09-11 00:00:00
* input:2021 / 6 / 11日, output:2021-06-11 00:00:00
* input:21 / 9 / 2, output:2022-09-02 00:00:00
* input:Jun, 15, 2021, output:2021-06-15 00:00:00
* input:AUG - 08, 2021, output:2021-08-08 00:00:00
* input:JUL 16, 2020, output:2020-07-16 00:00:00
* input:4 / 21 / 2021, output:2022-04-21 00:00:00
* input:6 / 22 / 2021, output:2022-06-22 00:00:00
* input:15 / OCT. / 2021, output:2022-10-15 00:00:00
* input:04 / Apr / 2021, output:2021-04-04 00:00:00
* input:28 - Jul - 21, output:2021-07-28 00:00:00
* input:28 - Sep - 2021, output:2021-09-28 00:00:00
* input:30th Aug.2021, output:2021-08-30 00:00:00
* input:14 Jul, 2021, output:2021-07-14 00:00:00
* input:22, MAY, 2021, output:2021-05-22 00:00:00
* input:5.18, output:2022-05-18 00:00:00
* input:12.14, output:2022-12-14 00:00:00
* input:9月14日, output:2022-09-14 00:00:00
* input:6 月11号, output:2022-06-11 00:00:00
* input:4 月2 号, output:2022-04-02 00:00:00
* input:8 - 8日, output:2022-08-08 00:00:00
* input:AUG 17, output:2022-08-17 00:00:00
* input:Oct25, output:2022-10-25 00:00:00
* input:7 - 5号, output:2022-07-05 00:00:00
* input:01 - 08, output:2022-01-08 00:00:00
* input:4 / 30, output:2022-04-30 00:00:00
* input:28 - Jul, output:2022-07-28 00:00:00
* input:12 - JUL, output:2022-07-12 00:00:00
* input:7 - 九月, output:2022-09-07 00:00:00
* input:14th - July, output:2022-07-14 00:00:00
* input:06TH JULY, output:2022-07-06 00:00:00
* input:32th july, output:None
* input:31th july, output:2022-07-31 00:00:00
不足之处,将移至future work:
- 未做日期检查,比如现有程序中,2月31日会被视为合法日期
- 只做了初步的数据预处理,对于一些纯中文表示的日期可能会识别错误
- 只识别年月日,未识别时分秒
- 一次只处理一个日期,如果字符串中包含多个日期,只会识别第一个匹配到的日期