如何从Python中的文本正确提取各种日期格式

时间:2019-06-05 11:36:17

标签: python date text-extraction datefinder

我必须从PDF中提取所有可用日期,然后检查日期为“合同日期”。

首先,我要提取从PDF中提取的文本中的所有日期。现在,日期可以采用多种格式。我尝试在以下示例中添加所有日期类型。

我尝试使用 Datefinder Python模块提取所有日期。虽然接近,但最初会抛出很少的垃圾日期,并且也与第一个日期不正确

import datefinder

dateContent = """ Test
I want to apply for leaves August,​ ​11,​ ​2017 I want to apply for leaves Aug, 23, 2017 I want to apply for leaves Aug, 21, 17 
I want to apply for leaves August 20 2017
I want to apply for leaves August 30th, 2017 I want to apply for leaves August 31st 17
I want to apply for leaves 8/26/2017 I want to apply for leaves 8/27/17
I want to apply for leaves 28/8/2017 I want to apply for leaves 29/8/17 I want to apply for leaves 30/08/17
I want to apply for leaves 15 Jan 17 I want to apply for leaves 14 January 17
I want to apply for leaves 13 Jan 2017
I want to apply for leaves Jan 10 17 I want to apply for leaves Jan 11 2017 I want to apply for leaves January 12 2017
"""

matches = datefinder.find_dates(dateContent)

for match in matches:
    print(match)

响应:

2019-08-05 00:00:00

2019-06-11 00:00:00

2017-06-05 00:00:00

2017-08-23 00:00:00

2017-08-21 00:00:00

2017-08-20 00:00:00

2017-08-30 00:00:00

2017-08-31 00:00:00

2017-08-26 00:00:00

2017-08-27 00:00:00

2017-08-28 00:00:00

2017-08-29 00:00:00

2017-08-30 00:00:00

2017-01-15 00:00:00

2017-01-14 00:00:00

2017-01-13 00:00:00

2017-01-10 00:00:00

2017-01-11 00:00:00

2017-01-12 00:00:00

如您所见,我有17个这样的Date对象,但我得到19个。从底部开始检查,最后16个正确匹配。然后是那些最初的垃圾。 一旦我正确地获得了这些日期,我就可以继续使用某种N-Gram模型来检查哪些日期上下文是合同信息。

任何解决此问题的帮助都将非常有用。

2 个答案:

答案 0 :(得分:2)

我解决了这个问题。 实际上,我的文本内容中存在一些编码问题。

dateContent = dateContent.replace(u'\u200b', '')

用空字符替换\ u200b可以解决此问题。 日期查找器模块完成了查找所有不同日期格式的其余工作。

答案 1 :(得分:0)

这是语料库研究。您必须检查数据中日期时间字符串的替换,并尝试找出自己的自定义正则表达式。如果您使用的是自然语言资源,而不是某些系统生成的文本具有不同的实现日期的模式,则您将永远不会获得100%的查全率和准确性。这始终是一个权衡。