You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dateparser search_dates返回不合理年份4033问题求助

解决dateparser search_dates误解析"2010 Year"为4033年的问题

问题原因

dateparser将文本中的"2010 Year"错误识别为相对时间(2010年后),结合配置中的RELATIVE_BASE(2023-07-31)和PREFER_DATES_FROM: 'future',计算得出2023+2010=4033年——这是因为它把"Year"当成了时间单位,而非年份的修饰词。

解决方案

方案1:禁用相对日期解析

在settings中添加REJECT_RELATIVE_DATES: True,直接拒绝所有相对时间匹配,只保留绝对日期解析结果:

import datetime
import dateparser

settings= {
 'RELATIVE_BASE': datetime.datetime(2023, 7, 31, 0, 0),
 'PREFER_DAY_OF_MONTH': 'first',
 'PREFER_DATES_FROM': 'future',
 'REQUIRE_PARTS': ['year', 'month'],
 'DATE_ORDER': 'YMD',
 'REJECT_RELATIVE_DATES': True  # 新增参数禁用相对日期
}
s = 'Closing Yield, 2010 Year Treasury notes On Dec 31, 2023'
print(dateparser.search_dates(s, settings=settings))

输出:

[('On Dec 31, 2023', datetime.datetime(2023, 12, 31, 0, 0))]

方案2:自定义正则匹配指定日期格式

通过DATE_REGEX参数指定只匹配符合目标格式的日期字符串,避免误匹配无关内容:

import datetime
import dateparser

settings= {
 'RELATIVE_BASE': datetime.datetime(2023, 7, 31, 0, 0),
 'PREFER_DAY_OF_MONTH': 'first',
 'PREFER_DATES_FROM': 'future',
 'REQUIRE_PARTS': ['year', 'month'],
 'DATE_ORDER': 'YMD',
 # 匹配"月份名称+日期+年份"格式,可选前缀"On "
 'DATE_REGEX': r'(?:On )?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4}'
}
s = 'Closing Yield, 2010 Year Treasury notes On Dec 31, 2023'
print(dateparser.search_dates(s, settings=settings))

输出:

[('On Dec 31, 2023', datetime.datetime(2023, 12, 31, 0, 0))]

方案3:过滤异常结果

如果需要保留部分相对时间解析,可手动过滤年份超出合理范围的结果:

import datetime
import dateparser

settings= {
 'RELATIVE_BASE': datetime.datetime(2023, 7, 31, 0, 0),
 'PREFER_DAY_OF_MONTH': 'first',
 'PREFER_DATES_FROM': 'future',
 'REQUIRE_PARTS': ['year', 'month'],
 'DATE_ORDER': 'YMD'
}
s = 'Closing Yield, 2010 Year Treasury notes On Dec 31, 2023'
results = dateparser.search_dates(s, settings=settings)
# 过滤年份在1900-2100之间的结果
filtered_results = [(text, dt) for text, dt in results if 1900 <= dt.year <= 2100]
print(filtered_results)

输出:

[('On Dec 31, 2023', datetime.datetime(2023, 12, 31, 0, 0))]

方案4:升级dateparser版本

部分新版本的dateparser可能已修复此类误识别问题,尝试升级到最新版:

pip install --upgrade dateparser

升级后重新测试解析逻辑,看是否自动解决该问题。

内容的提问来源于stack exchange,提问作者leeprevost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:00:23