从 date/time 上的字符串信息中提取

Extract from string information on date/time

我有一些文本通常以以下开头:

“12 minutes ago - There was a meeting...”
“2 hours ago - Apologies for being...”
“1 day ago - It is a sunny day in London...”

等等。 基本上我有以下信息:

Minutes 
Hours
Day (starting from today)

我想将此类信息转换为有价值的时间序列信息,以便提取这部分并从中创建一个新列(日期时间)。 在我的数据集中,我有一列(日期),其中我已经有进行研究的日期(例如,今天),格式为:26/05/2020 以及提交搜索的时间(例如 8:41am). 因此,如果文本以“12 分钟前”开头,我应该:

26/05/2020 - 8:29 (datetime format in Python)

其他人:

26/05/2020 - 6:41
25/05/2020 - 8:41

重要的是要有一些东西(字符串、数字、日期格式),我可以将其绘制为时间序列(我想看看按时间间隔发布了多少文本)。 知道我该怎么做吗?

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

这是上面 link 中 tokenization 的一个例子,展示了 spacY 如何分解一个句子:

如果格式保持简单:<digits> <unit> ago ..."^(\d+) (\w+) ago" 解析会很漂亮。

然后,一旦你有了 ('minutes', '12'),你就会将它们传递给 timedelta,它接受每个单元作为关键字参数 timedelta(minutes=12),你将通过传递映射 timedelta(minutes=12) 来做到这一点=17=]

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