python - 如何使用 dateparser 检测字符串中的日期?

标签 python datetime parsing feature-engineering dateparser

我想使用 dateparser 来检测哪个单元格包含日期。我有多种不同的日期格式:Fr, 21.02.2020//20.02.2020//21.02//21-02-2020//January, 21 2020//21-Jan-2020//21/02/20我相信 future 还会有更多的。库 dateparser 能够很好地检测所有这些,尽管它也检测到“PO”、“to”、“06”、“16:00”作为日期或相对日期,这是我不想要的。我试图检查文档并关闭相对日期或查看如何更改以仅检测“真实日期”。在设置中,它们提供了不同的 PARSERS 以及仅使用其中一些的可能性。这些是默认的 PARSERS,程序运行所有这些:

'时间戳':如果输入字符串以 10 位数字开头,可选择后跟附加数字或句点 (.),则前 10 位数字将被解释为 Unix 时间。

“相对时间”:解析与当前日期和时间相关的日期和时间(例如“1 天前”、“2 周内”)。

'自定义格式':解析与 dateparser.parse() 或 DateDataParser.get_date_data 的 date_formats 参数列表中的日期格式之一匹配的日期。

“绝对时间”:解析以绝对形式表示的日期和时间(例如“May 4th”、“1991-05-17”)。它考虑了 DATE_ORDER 或 PREFER_LOCALE_DATE_ORDER 等设置。

'基本格式':解析与以下日期格式之一匹配的日期

我试图只将其中一个用于部件 settings={'base-formats':True})在我的代码中,它仍然不起作用。此外,他们提供以下代码段来打开单个 PARSERS:

>>> from dateparser.settings import default_parsers
>>> parsers = [parser for parser in default_parsers if parser != 'relative-time']
>>> parse('today', settings={'PARSERS': parsers})

这里弹出错误:
ModuleNotFoundError: No module named 'dateparser.settings'
我试过pip install,不行。

文档链接:https://dateparser.readthedocs.io/en/latest/#settings

这是我的代码:
import dateparser

inputlist = [[' ','Supplier:',' Company Y', ' ', 'Project:','Carasco', ' '],[' ','21-Jan-2020',' ','Consultant:','James Farewell', ' ', ' '],['PO', ' Service', ' Cost Center', ' Accounting Object', ' deliver at', ' Amount', ' Unit'],['0106776','XYZ', 'Countable',' ', '16:00','6,00','h',],['Fr, 21.02.2020', '20.03.2020', ' ', ' ', ' ', ' ','6/04/20']]
print(inputlist)

outerlist=[]
for row in inputlist:
    innerlist = []
    for cell in row:
        parsecheck = dateparser.parse(cell,  languages=['en', 'de'], settings={'base-formats':True})
        if parsecheck == None:
            innerlist.append(0)
        else:
            innerlist.append(1)

    outerlist.append(innerlist)

print(outerlist)

我目前得到:
[0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 1, 1, 1], [1, 1, 0, 0, 0, 0, 1]]

期望输出:
[0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0,0, 0, 0], [1, 1, 0, 0, 0, 0, 1]]

最佳答案

这是我能做的最好的事情:

import dateparser
import locale

inputlist = [[' ','Supplier:',' Company Y', ' ', 'Project:','Carasco', ' '],[' ','21-Jan-2020',' ','Consultant:','James Farewell', ' ', ' '],['PO', ' Service', ' Cost Center', ' Accounting Object', ' deliver at', ' Amount', ' Unit'],['0106776','XYZ', 'Countable',' ', '16:00','6,00','h',],['Fr, 21.02.2020', '20.03.2020', ' ', ' ', ' ', ' ','6/04/20']]
print(inputlist)

customlist = ["%d.%m.%Y", "%d-%b-%Y", "%w/%m/%y", "%a, %d.%m.%Y"]

outerlist=[]
saved = locale.setlocale(locale.LC_ALL)
locale.setlocale(locale.LC_ALL, 'de_de')
for row in inputlist:
    innerlist = []
    for cell in row:
        parsecheck = dateparser.parse(cell,  languages=['en', 'de'], settings={'PARSERS':['custom-formats']}, date_formats=customlist)
        if parsecheck == None:
            innerlist.append(0)
        else:
            innerlist.append(1)
    outerlist.append(innerlist)

locale.setlocale(locale.LC_ALL, saved)
print(outerlist)

输出是:
[[0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 1]]

用于解析 Fr, 21.02.2020我将语言环境更改为德国,并在接近尾声时返回到您的初始语言环境。

该格式基于 strftime() and strptime() Behavior 的文档

关于python - 如何使用 dateparser 检测字符串中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61495541/

相关文章:

Javascript 日期时间验证 - yyyy-mm-dd hh :mm

ios - 如何在 iOS 应用程序中使用 Objective C 解析 Ruby on rails webservice

c++ - Pcrepp - 用于匹配主机名的 Perl 正则表达式语法

python - Pygame 和线程

python - 如何使用 Selenium Python 获取文本颜色

python - 使用二进制和连续变量标准化数据以进行机器学习

python - 用Python编写正则表达式

mysql - 连接日期函数mysql

javascript - 限制日期选择器(从今天开始)- HTML

java - 通过Java提取HTML中两个链接之间的文本