让我先分享一个文本:
I am Fox Sin of Greed came on Earth in 1666 BC. due date right after
St. P was build in 16.05.1703 and bluh bluh I moved to Moscow Feb
2nd, 2022 to work as per deadline And today I read manga Due date for
my project is September 12, 2022 I wonder if Ill be able to pay by Oct
07, 2023 and so The deadline is unknown by I assume would be 9102023
Bluh bluh Due Date 12-11-2022 30/08/2021 and 9/19/23
这是一个随机生成的文本,用于测试日期解析器和正则表达式。我写了一个函数,它非常善于用正则表达式识别日期,但不包括那些格式为[月为字母][日期为数字]、[年为数字]的函数这就是我通常使用日期解析器的地方,因为它能够识别这些。。然而,当有"可能"支付"(??(等"触发词"时,它就失败了。示例:
我于2022年2月2日搬到莫斯科,按照的截止日期工作
[('to', datetime.datetime(2022, 9, 8, 0, 0)), ('Feb 2nd, 2022 to', datetime.datetime(2022, 2, 2, 0, 0))]
这很好。它重新命名为"2022年2月2日",甚至在"它"上加了"to"。
但下一个:
我想知道我是否能在2023年10月7日之前付款,所以
[('to pay', datetime.datetime(2022, 9, 8, 0, 0)), ('07, 2023', datetime.datetime(2023, 7, 8, 0, 0))]
它未能将十月与2023年7月联系起来。
这是用于从发票中提取数据的,我无法控制日期的格式,所以我想知道更有经验/技能的日期解析器(可能是其他python工具(用户是否可以帮助我避免这个问题。在我看来,我需要避免使用诸如"可能"、"支付"、"现在"等词语。
如果您知道目标文本的语言,您可以提供它,这应该可以防止由错误的语言猜测引起的问题。在指定语言en
后,我得到了一个预期的日期,即
from dateparser.search import search_dates
print(search_dates('I wonder if Ill be able to pay by Oct 07, 2023 and so',languages=['en']))
给出输出
[('by Oct 07, 2023 and', datetime.datetime(2023, 10, 7, 0, 0))]
尽管如此,文件声称
警告对搜索日期的支持非常有限,需要大量支持改进
所以你应该做好准备,你可能仍然会得到不理想的结果。