生成随机格式化的日期字符串以进行机器学习

问题描述

对于python中的NLP项目,我需要生成随机日期以进行模型训练。特别是,日期格式必须是随机的,并且与一组语言区域一致。格式包括仅具有数字的格式和具有(部分)写出的日期和月份名称以及各种常见标点符号的格式。

到目前为止,我最好的解决方案是以下算法:

  1. 生成具有随机值的datetime()对象(很好的解决方here
  2. 随机选择一个语言环境,即选择['en_US','fr_FR','it_IT','de_DE']中的一个在这种情况下,此列表是众所周知的且简短,所以没有问题。
  3. 随机选择strftime()的格式字符串,即['%Y-%m-%d','%d %B %Y',...]。就我而言,该列表应反映文档中潜在出现的日期格式,这些格式将在将来暴露给NLP模型。
  4. strftime()产生>

特别是对于3)我不知道有比将我在培训文档中手动看到的列表硬编码的更好的版本。我还找不到能将ocr-dates转换为格式字符串的函数,以便在日期格式尚未出现时我可以扩展列表。

您对如何提出更好的随机格式日期或如何改进此方法有什么建议?

解决方法

使用random.randrange()和datetime.timedelta()生成两个日期之间的随机日期

调用datetime.date(年,月,日)以返回一个datetime对象,该对象代表由年,月和日指示的时间。调用两次以定义开始和结束日期。从结束日期减去开始日期,以获得两个日期之间的时间。调用datetime.timedelta.days以获取上一个结果datetime.timedelta的天数。调用random.randrange(days)以获取一个小于前一个结果天的随机整数。调用datetime.timedelta(days = n)以获得代表前一个结果n的datetime.timedelta。将此结果添加到开始日期。

  var element = document.getElementById("question_1");
  var element2 = document.getElementById("question_1_2");
  if (element.hasAttribute('MadCap:conditions')) {
    element2.classList.add("option1")}
  else {
    element2.classList.add("option2")}
,

这是我的解决方案。关于本地,所有这些都必须在您的计算机上可用,以避免错误

    import random
    from datetime import datetime,timedelta
    import locale
    
    LOCALE = ['en_US','fr_FR','it_IT','de_DE'] # all need to be available on your computer to avoid error
    DATE_FORMAT = ['%Y-%m-%d','%d %B %Y']
    
    def gen_datetime(min_year=1900,max_year=datetime.now().year):
        # generate a datetime
        start = datetime(min_year,1,1)
        years = max_year - min_year + 1
        end = start + timedelta(days=365 * years)
        format_date = DATE_FORMAT[random.randint(0,len(DATE_FORMAT)-1)]
        locale_date = LOCALE[random.randint(0,len(LOCALE)-1)]
        locale.setlocale(locale.LC_ALL,locale_date) # generate error if local are not available on your computer
    
        return (start + (end - start) * random.random()).strftime(format_date)
    
    date = gen_datetime()
    
    print(date)