为了账号安全,请及时绑定邮箱和手机立即绑定

从日期/时间的字符串信息中提取

从日期/时间的字符串信息中提取

茅侃侃 2022-12-06 16:35:45
我有一些文本通常以以下内容开头:“12 minutes ago - There was a meeting...”“2 hours ago - Apologies for being...”“1 day ago - It is a sunny day in London...”等等。基本上我有以下信息:Minutes HoursDay (starting from today)我想将此类信息转换为有价值的时间序列信息,以便提取这部分并从中创建一个新列(日期时间)。在我的数据集中,我有一列(日期),其中我已经有执行研究的日期(例如,今天),格式为:26/05/2020 和提交搜索的时间(例如上午 8:41 ). 因此,如果文本以“12 分钟前”开头,我应该:26/05/2020 - 8:29 (datetime format in Python)对于其他人:26/05/2020 - 6:4125/05/2020 - 8:41重要的是要有一些东西(字符串、数字、日期格式),我可以将其绘制为时间序列(我想看看在时间间隔方面发布了多少文本)。关于如何做到这一点的任何想法?
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果格式保持简单:<digits> <unit> ago ...用"^(\d+) (\w+) ago".


然后,一旦你('minutes', '12')将这些传递给timedelta它接受每个单元作为关键字参数timedelta(minutes=12),你将通过传递一个映射来做到这一点**{unit:value}


def parse(content):

    timeparts = re.search(r"^(\d+) (\w+) ago", content)

    if not timeparts:

        return None, content

    unit = timeparts.group(2).rstrip('s') + 's' # ensure ends with 's'

    #return datetime.now()-timedelta(**{unit:int(timeparts.group(1))})           # Now date

    return datetime(2020,5,26,8,0,0)-timedelta(**{unit:int(timeparts.group(1))}) # Fixed date

演示


values = ["12 minutes ago - There was a meeting...","2 hours ago - Apologies for being...","1 day ago - It is a sunny day in London..."]


for value in values:

  res = parse(value)

  print(res)



2020-05-26 07:48:00

2020-05-26 06:00:00

2020-05-25 08:00:00


查看完整回答
反对 回复 2022-12-06
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您应该为此使用自然语言处理库,例如spaCY或 NLTK

这是tokenization来自上面链接的示例,显示了 spacY 如何分解句子:

//img1.sycdn.imooc.com//638eff020001975606380476.jpg

查看完整回答
反对 回复 2022-12-06
  • 2 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信