从 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
我有一些文本通常以以下开头:
“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