【问题标题】:python - extract dates from text by giving as parameter the date of reference which is not the current datepython - 通过将不是当前日期的参考日期作为参数从文本中提取日期
【发布时间】:2016-05-19 00:11:11
【问题描述】:

我有一些包含日期信息的模糊文本。例如:“本周六音乐会”。我想通过将参考日期作为参数来提取与“本周六”对应的日期。 例如,假设这是 2016 年 4 月 13 日发送的电子邮件的主题,我想知道这封电子邮件所指的“本周六”是 2016 年 4 月 16 日。您知道任何能够做到这一点的软件包吗?

P.S.我使用了 dateutil.parser ,但这不采用参考日期作为参数,它给我的日期是从我运行代码之日起的下一个星期六。

【问题讨论】:

    标签: python date parsing nlp


    【解决方案1】:

    dateutil.parser.parse 接受 default 参数,您可以使用该参数指定参考日期:

    import datetime as DT
    import dateutil.parser as DP
    
    today = DT.datetime(2016, 4, 13)
    for text in ('today', 'tomorrow', 'this Sunday', 'Wednesday next week', 
                 'next week Wednesday', 
                 'next thursday', 'next tuesday in June', '11/28',
                 'Concert this Saturday'
                 "lunch with Andrew @ Mon Mar 7, 2016",
                 'meeting on Tuesday, 3/29'):
        dp_date = DP.parse(text, default=today, fuzzy=True)
        print('{:35} --> {}'.format(text, dp_date))
    

    产量

    today                               --> 2016-04-13 00:00:00
    tomorrow                            --> 2016-04-13 00:00:00  should be 2016-04-14
    this Sunday                         --> 2016-04-17 00:00:00
    Wednesday next week                 --> 2016-04-13 00:00:00
    next week Wednesday                 --> 2016-04-13 00:00:00
    next thursday                       --> 2016-04-14 00:00:00
    next tuesday in June                --> 2016-06-14 00:00:00  should be 2016-06-07
    11/28                               --> 2016-11-28 00:00:00
    Concert this Saturday               --> 2016-04-16 00:00:00
    lunch with Andrew @ Mon Mar 7, 2016 --> 2016-03-07 00:00:00
    meeting on Tuesday, 3/29            --> 2016-03-29 00:00:00
    

    但请注意,并非所有短语都被正确解析。

    【讨论】:

    • @J.F.Sebastian:非常感谢改进。
    • 过去搜索事件时是否有任何错误?我输入:“昨晚在音乐会上”和相同的reference_date,它返回我昨天的日期和昨天的日期,指的是今天......:/
    • 我认为这是一个错误。即使使用最新的开发版本(从github source 安装),parse('last night at the concert', DT.date(2016,4,13)) 返回2016-04-13 21:00:00,虽然更好,但似乎仍然需要休息一天。你不妨raise an issue here
    • 不幸的是这个库有很多错误。如果文本中有日期,则它不能正常工作。例如,我有以下文本:“与 Andrew 共进午餐 @ Mon Mar 7, 2016”并作为参考日期“2016-03-06”,它给了我作为输出:2016-03-08 13:00:00。它是如何计算这个日期的?这个错误也发生在其他情况下:例如“3/29 星期二会议”和参考日期 =“2016-03-24”,输出日期为:2016-04-03。你碰巧知道其他图书馆吗?
    • 嗯,还有dateutil.parser.parse 有一个default 参数用于设置参考日期。但是,它也错误地解析了一些短语。我已经更改了答案以表明我的意思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多