在进行文本预处理的过程中,有时候需要将文本中的日期数据提取出来并将其按照一定的格式标准化,进而进行比较大小之类的操作。
1、日期提取
在文本中日期呈现的方式各种各样,如:2018.12.2、2018.12.02、2018-12-2、2018-12-02、201/12/2、二零一八年十二月二日、2018年12月2日 等等,我们可以利用正则表达式将其提取出来。
假设存在如下文本数据,我们需要提取文中最后出现的日期数据:
利用正则表达式和apply函数将日期一次性提取出来:
import re
pattern = re.compile('\d{4}[\.\-/年]{1}\d{1,2}[\.\-/月]{1}\d{1,2}[日号]{0,1}|二.{3}年.{1,2}月.{1,3}[日号]{1}')
data['date'] = data['text'].apply(lambda s: pattern.findall(s))
结果如下图所示:
若要选取最后出现的日期,可更改一下代码:
data['date'] = data['text'].apply(lambda s: pattern.findall(s)[-1])
效果如下:
2、日期格式化
通过正则表达式提取的日期格式比较乱,无法对其进行进一步的计算或者比较,因此可将其格式化为××××-××-×× eg:2018-01-01这种字符串。
2.1、中文替换为数字,连接符替换为 -
注意: 大的中文数字必须放在小的之前,否则替换的时候会产生奇妙的化学反应。(哈哈哈哈)
replace_dic = {
'元': '01', '二○一七': '2017', '二○一八': '2018', '二〇一七': '2017', '二〇一八': '2018', '年': '-', '月': '-',
'日': '','\.': '-', '/': '-', '号': '','三十一': '31', '三十': '30', '二十九': '29', '二十八': '28', '二十七': '27',