diff --git a/description_parsing_cases.json b/description_parsing_cases.json index b22ad5d..a829ca1 100644 --- a/description_parsing_cases.json +++ b/description_parsing_cases.json @@ -3,285 +3,793 @@ "year": 2019, "description": "2018年12月30日至2019年1月1日放假调休,共3天。2018年12月29日(星期六)上班。", "expected": [ - { "date": "2018-12-30", "isOffDay": true }, - { "date": "2018-12-31", "isOffDay": true }, - { "date": "2019-01-01", "isOffDay": true }, - { "date": "2018-12-29", "isOffDay": false } + { + "date": "2018-12-30", + "isOffDay": true + }, + { + "date": "2018-12-31", + "isOffDay": true + }, + { + "date": "2019-01-01", + "isOffDay": true + }, + { + "date": "2018-12-29", + "isOffDay": false + } ] }, { "year": 2019, "description": "2月4日至10日放假调休,共7天。2月2日(星期六)、2月3日(星期日)上班。", "expected": [ - { "date": "2019-02-04", "isOffDay": true }, - { "date": "2019-02-05", "isOffDay": true }, - { "date": "2019-02-06", "isOffDay": true }, - { "date": "2019-02-07", "isOffDay": true }, - { "date": "2019-02-08", "isOffDay": true }, - { "date": "2019-02-09", "isOffDay": true }, - { "date": "2019-02-10", "isOffDay": true }, - { "date": "2019-02-02", "isOffDay": false }, - { "date": "2019-02-03", "isOffDay": false } + { + "date": "2019-02-04", + "isOffDay": true + }, + { + "date": "2019-02-05", + "isOffDay": true + }, + { + "date": "2019-02-06", + "isOffDay": true + }, + { + "date": "2019-02-07", + "isOffDay": true + }, + { + "date": "2019-02-08", + "isOffDay": true + }, + { + "date": "2019-02-09", + "isOffDay": true + }, + { + "date": "2019-02-10", + "isOffDay": true + }, + { + "date": "2019-02-02", + "isOffDay": false + }, + { + "date": "2019-02-03", + "isOffDay": false + } ] }, { "year": 2019, "description": "4月5日放假,与周末连休。", - "expected": [{ "date": "2019-04-05", "isOffDay": true }] + "expected": [ + { + "date": "2019-04-05", + "isOffDay": true + } + ] }, { "year": 2019, "description": "5月1日放假。", - "expected": [{ "date": "2019-05-01", "isOffDay": true }] + "expected": [ + { + "date": "2019-05-01", + "isOffDay": true + } + ] }, { "year": 2019, "description": "6月7日放假,与周末连休。", - "expected": [{ "date": "2019-06-07", "isOffDay": true }] + "expected": [ + { + "date": "2019-06-07", + "isOffDay": true + } + ] }, { "year": 2019, "description": "9月13日放假,与周末连休。", - "expected": [{ "date": "2019-09-13", "isOffDay": true }] + "expected": [ + { + "date": "2019-09-13", + "isOffDay": true + } + ] }, { "year": 2019, "description": "10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。", "expected": [ - { "date": "2019-10-01", "isOffDay": true }, - { "date": "2019-10-02", "isOffDay": true }, - { "date": "2019-10-03", "isOffDay": true }, - { "date": "2019-10-04", "isOffDay": true }, - { "date": "2019-10-05", "isOffDay": true }, - { "date": "2019-10-06", "isOffDay": true }, - { "date": "2019-10-07", "isOffDay": true }, - { "date": "2019-09-29", "isOffDay": false }, - { "date": "2019-10-12", "isOffDay": false } + { + "date": "2019-10-01", + "isOffDay": true + }, + { + "date": "2019-10-02", + "isOffDay": true + }, + { + "date": "2019-10-03", + "isOffDay": true + }, + { + "date": "2019-10-04", + "isOffDay": true + }, + { + "date": "2019-10-05", + "isOffDay": true + }, + { + "date": "2019-10-06", + "isOffDay": true + }, + { + "date": "2019-10-07", + "isOffDay": true + }, + { + "date": "2019-09-29", + "isOffDay": false + }, + { + "date": "2019-10-12", + "isOffDay": false + } ] }, { "year": 2018, "description": "1月1日放假,与周末连休。", - "expected": [{ "date": "2018-01-01", "isOffDay": true }] + "expected": [ + { + "date": "2018-01-01", + "isOffDay": true + } + ] }, { "year": 2018, "description": "2月15日至21日放假调休,共7天。2月11日(星期日)、2月24日(星期六)上班。", "expected": [ - { "date": "2018-02-15", "isOffDay": true }, - { "date": "2018-02-16", "isOffDay": true }, - { "date": "2018-02-17", "isOffDay": true }, - { "date": "2018-02-18", "isOffDay": true }, - { "date": "2018-02-19", "isOffDay": true }, - { "date": "2018-02-20", "isOffDay": true }, - { "date": "2018-02-21", "isOffDay": true }, - { "date": "2018-02-11", "isOffDay": false }, - { "date": "2018-02-24", "isOffDay": false } + { + "date": "2018-02-15", + "isOffDay": true + }, + { + "date": "2018-02-16", + "isOffDay": true + }, + { + "date": "2018-02-17", + "isOffDay": true + }, + { + "date": "2018-02-18", + "isOffDay": true + }, + { + "date": "2018-02-19", + "isOffDay": true + }, + { + "date": "2018-02-20", + "isOffDay": true + }, + { + "date": "2018-02-21", + "isOffDay": true + }, + { + "date": "2018-02-11", + "isOffDay": false + }, + { + "date": "2018-02-24", + "isOffDay": false + } ] }, { "year": 2018, "description": "4月5日至7日放假调休,共3天。4月8日(星期日)上班。", "expected": [ - { "date": "2018-04-05", "isOffDay": true }, - { "date": "2018-04-06", "isOffDay": true }, - { "date": "2018-04-07", "isOffDay": true }, - { "date": "2018-04-08", "isOffDay": false } + { + "date": "2018-04-05", + "isOffDay": true + }, + { + "date": "2018-04-06", + "isOffDay": true + }, + { + "date": "2018-04-07", + "isOffDay": true + }, + { + "date": "2018-04-08", + "isOffDay": false + } ] }, { "year": 2018, "description": "4月29日至5月1日放假调休,共3天。4月28日(星期六)上班。", "expected": [ - { "date": "2018-04-29", "isOffDay": true }, - { "date": "2018-04-30", "isOffDay": true }, - { "date": "2018-05-01", "isOffDay": true }, - { "date": "2018-04-28", "isOffDay": false } + { + "date": "2018-04-29", + "isOffDay": true + }, + { + "date": "2018-04-30", + "isOffDay": true + }, + { + "date": "2018-05-01", + "isOffDay": true + }, + { + "date": "2018-04-28", + "isOffDay": false + } ] }, { "year": 2018, "description": "6月18日放假,与周末连休。", - "expected": [{ "date": "2018-06-18", "isOffDay": true }] + "expected": [ + { + "date": "2018-06-18", + "isOffDay": true + } + ] }, { "year": 2018, "description": "9月24日放假,与周末连休。", - "expected": [{ "date": "2018-09-24", "isOffDay": true }] + "expected": [ + { + "date": "2018-09-24", + "isOffDay": true + } + ] }, { "year": 2018, "description": "10月1日至7日放假调休,共7天。9月29日(星期六)、9月30日(星期日)上班。", "expected": [ - { "date": "2018-10-01", "isOffDay": true }, - { "date": "2018-10-02", "isOffDay": true }, - { "date": "2018-10-03", "isOffDay": true }, - { "date": "2018-10-04", "isOffDay": true }, - { "date": "2018-10-05", "isOffDay": true }, - { "date": "2018-10-06", "isOffDay": true }, - { "date": "2018-10-07", "isOffDay": true }, - { "date": "2018-09-29", "isOffDay": false }, - { "date": "2018-09-30", "isOffDay": false } + { + "date": "2018-10-01", + "isOffDay": true + }, + { + "date": "2018-10-02", + "isOffDay": true + }, + { + "date": "2018-10-03", + "isOffDay": true + }, + { + "date": "2018-10-04", + "isOffDay": true + }, + { + "date": "2018-10-05", + "isOffDay": true + }, + { + "date": "2018-10-06", + "isOffDay": true + }, + { + "date": "2018-10-07", + "isOffDay": true + }, + { + "date": "2018-09-29", + "isOffDay": false + }, + { + "date": "2018-09-30", + "isOffDay": false + } + ] + }, + { + "year": 2014, + "description": "1月1日放假1天。", + "expected": [ + { + "date": "2014-01-01", + "isOffDay": true + } + ] + }, + { + "year": 2014, + "description": "1月31日至2月6日放假调休,共7天。1月26日(星期日)、2月8日(星期六)上班。", + "expected": [ + { + "date": "2014-01-31", + "isOffDay": true + }, + { + "date": "2014-02-01", + "isOffDay": true + }, + { + "date": "2014-02-02", + "isOffDay": true + }, + { + "date": "2014-02-03", + "isOffDay": true + }, + { + "date": "2014-02-04", + "isOffDay": true + }, + { + "date": "2014-02-05", + "isOffDay": true + }, + { + "date": "2014-02-06", + "isOffDay": true + }, + { + "date": "2014-01-26", + "isOffDay": false + }, + { + "date": "2014-02-08", + "isOffDay": false + } + ] + }, + { + "year": 2014, + "description": "4月5日放假,4月7日(星期一)补休。", + "expected": [ + { + "date": "2014-04-05", + "isOffDay": true + }, + { + "date": "2014-04-07", + "isOffDay": true + } + ] + }, + { + "year": 2014, + "description": "5月1日至3日放假调休,共3天。5月4日(星期日)上班。", + "expected": [ + { "date": "2014-05-01", "isOffDay": true }, + { "date": "2014-05-02", "isOffDay": true }, + { "date": "2014-05-03", "isOffDay": true }, + { "date": "2014-05-04", "isOffDay": false } + ] + }, + { + "year": 2014, + "description": "6月2日放假,与周末连休。", + "expected": [{ "date": "2014-06-02", "isOffDay": true }] + }, + { + "year": 2014, + "description": "9月8日放假,与周末连休。", + "expected": [{ "date": "2014-09-08", "isOffDay": true }] + }, + { + "year": 2014, + "description": "10月1日至7日放假调休,共7天。9月28日(星期日)、10月11日(星期六)上班。", + "expected": [ + { "date": "2014-10-01", "isOffDay": true }, + { "date": "2014-10-02", "isOffDay": true }, + { "date": "2014-10-03", "isOffDay": true }, + { "date": "2014-10-04", "isOffDay": true }, + { "date": "2014-10-05", "isOffDay": true }, + { "date": "2014-10-06", "isOffDay": true }, + { "date": "2014-10-07", "isOffDay": true }, + { "date": "2014-09-28", "isOffDay": false }, + { "date": "2014-10-11", "isOffDay": false } ] }, { "year": 2013, "description": "1月1日至3日放假调休,共3天。1月5日(星期六)、1月6日(星期日)上班。", "expected": [ - { "date": "2013-01-01", "isOffDay": true }, - { "date": "2013-01-02", "isOffDay": true }, - { "date": "2013-01-03", "isOffDay": true }, - { "date": "2013-01-05", "isOffDay": false }, - { "date": "2013-01-06", "isOffDay": false } + { + "date": "2013-01-01", + "isOffDay": true + }, + { + "date": "2013-01-02", + "isOffDay": true + }, + { + "date": "2013-01-03", + "isOffDay": true + }, + { + "date": "2013-01-05", + "isOffDay": false + }, + { + "date": "2013-01-06", + "isOffDay": false + } ] }, { "year": 2013, "description": "2月9日至15日放假调休,共7天。2月16日(星期六)、2月17日(星期日)上班。", "expected": [ - { "date": "2013-02-09", "isOffDay": true }, - { "date": "2013-02-10", "isOffDay": true }, - { "date": "2013-02-11", "isOffDay": true }, - { "date": "2013-02-12", "isOffDay": true }, - { "date": "2013-02-13", "isOffDay": true }, - { "date": "2013-02-14", "isOffDay": true }, - { "date": "2013-02-15", "isOffDay": true }, - { "date": "2013-02-16", "isOffDay": false }, - { "date": "2013-02-17", "isOffDay": false } + { + "date": "2013-02-09", + "isOffDay": true + }, + { + "date": "2013-02-10", + "isOffDay": true + }, + { + "date": "2013-02-11", + "isOffDay": true + }, + { + "date": "2013-02-12", + "isOffDay": true + }, + { + "date": "2013-02-13", + "isOffDay": true + }, + { + "date": "2013-02-14", + "isOffDay": true + }, + { + "date": "2013-02-15", + "isOffDay": true + }, + { + "date": "2013-02-16", + "isOffDay": false + }, + { + "date": "2013-02-17", + "isOffDay": false + } ] }, { "year": 2013, "description": "4月4日至6日放假调休,共3天。4月7日(星期日)上班。", "expected": [ - { "date": "2013-04-04", "isOffDay": true }, - { "date": "2013-04-05", "isOffDay": true }, - { "date": "2013-04-06", "isOffDay": true }, - { "date": "2013-04-07", "isOffDay": false } + { + "date": "2013-04-04", + "isOffDay": true + }, + { + "date": "2013-04-05", + "isOffDay": true + }, + { + "date": "2013-04-06", + "isOffDay": true + }, + { + "date": "2013-04-07", + "isOffDay": false + } ] }, { "year": 2013, "description": "4月29日至5月1日放假调休,共3天。4月27日(星期六)、4月28日(星期日)上班。", "expected": [ - { "date": "2013-04-29", "isOffDay": true }, - { "date": "2013-04-30", "isOffDay": true }, - { "date": "2013-05-01", "isOffDay": true }, - { "date": "2013-04-27", "isOffDay": false }, - { "date": "2013-04-28", "isOffDay": false } + { + "date": "2013-04-29", + "isOffDay": true + }, + { + "date": "2013-04-30", + "isOffDay": true + }, + { + "date": "2013-05-01", + "isOffDay": true + }, + { + "date": "2013-04-27", + "isOffDay": false + }, + { + "date": "2013-04-28", + "isOffDay": false + } ] }, { "year": 2013, "description": "6月10日至12日放假调休,共3天。6月8日(星期六)、6月9日(星期日)上班。", "expected": [ - { "date": "2013-06-10", "isOffDay": true }, - { "date": "2013-06-11", "isOffDay": true }, - { "date": "2013-06-12", "isOffDay": true }, - { "date": "2013-06-08", "isOffDay": false }, - { "date": "2013-06-09", "isOffDay": false } + { + "date": "2013-06-10", + "isOffDay": true + }, + { + "date": "2013-06-11", + "isOffDay": true + }, + { + "date": "2013-06-12", + "isOffDay": true + }, + { + "date": "2013-06-08", + "isOffDay": false + }, + { + "date": "2013-06-09", + "isOffDay": false + } ] }, { "year": 2013, "description": "9月19日至21日放假调休,共3天。9月22日(星期日)上班。", "expected": [ - { "date": "2013-09-19", "isOffDay": true }, - { "date": "2013-09-20", "isOffDay": true }, - { "date": "2013-09-21", "isOffDay": true }, - { "date": "2013-09-22", "isOffDay": false } + { + "date": "2013-09-19", + "isOffDay": true + }, + { + "date": "2013-09-20", + "isOffDay": true + }, + { + "date": "2013-09-21", + "isOffDay": true + }, + { + "date": "2013-09-22", + "isOffDay": false + } ] }, { "year": 2013, "description": "10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。", "expected": [ - { "date": "2013-10-01", "isOffDay": true }, - { "date": "2013-10-02", "isOffDay": true }, - { "date": "2013-10-03", "isOffDay": true }, - { "date": "2013-10-04", "isOffDay": true }, - { "date": "2013-10-05", "isOffDay": true }, - { "date": "2013-10-06", "isOffDay": true }, - { "date": "2013-10-07", "isOffDay": true }, - { "date": "2013-09-29", "isOffDay": false }, - { "date": "2013-10-12", "isOffDay": false } + { + "date": "2013-10-01", + "isOffDay": true + }, + { + "date": "2013-10-02", + "isOffDay": true + }, + { + "date": "2013-10-03", + "isOffDay": true + }, + { + "date": "2013-10-04", + "isOffDay": true + }, + { + "date": "2013-10-05", + "isOffDay": true + }, + { + "date": "2013-10-06", + "isOffDay": true + }, + { + "date": "2013-10-07", + "isOffDay": true + }, + { + "date": "2013-09-29", + "isOffDay": false + }, + { + "date": "2013-10-12", + "isOffDay": false + } ] }, { "year": 2008, "description": "2007年12月30日—2008年1月1日放假,共3天。其中,1月1日(星期二)为法定节假日,12月30日(星期日)为公休日,12月29日(星期六)公休日调至12月31日(星期一),12月29日(星期六)上班。", "expected": [ - { "date": "2007-12-30", "isOffDay": true }, - { "date": "2007-12-31", "isOffDay": true }, - { "date": "2008-01-01", "isOffDay": true }, - { "date": "2007-12-29", "isOffDay": false } + { + "date": "2007-12-30", + "isOffDay": true + }, + { + "date": "2007-12-31", + "isOffDay": true + }, + { + "date": "2008-01-01", + "isOffDay": true + }, + { + "date": "2007-12-29", + "isOffDay": false + } ] }, { "year": 2008, "description": "2月6日—12日(农历除夕至正月初六)放假,共7天。其中,2月6日(除夕)、2月7日(春节)、2月8日(正月初二)为法定节假日,2月9日(星期六)、2月10日(星期日)照常公休,2月2日(星期六)、2月3日(星期日)两个公休日调至2月11日(星期一)、2月12日(星期二),2月2日(星期六)、2月3日(星期日)上班。", "expected": [ - { "date": "2008-02-06", "isOffDay": true }, - { "date": "2008-02-07", "isOffDay": true }, - { "date": "2008-02-08", "isOffDay": true }, - { "date": "2008-02-09", "isOffDay": true }, - { "date": "2008-02-10", "isOffDay": true }, - { "date": "2008-02-11", "isOffDay": true }, - { "date": "2008-02-12", "isOffDay": true }, - { "date": "2008-02-02", "isOffDay": false }, - { "date": "2008-02-03", "isOffDay": false } + { + "date": "2008-02-06", + "isOffDay": true + }, + { + "date": "2008-02-07", + "isOffDay": true + }, + { + "date": "2008-02-08", + "isOffDay": true + }, + { + "date": "2008-02-09", + "isOffDay": true + }, + { + "date": "2008-02-10", + "isOffDay": true + }, + { + "date": "2008-02-11", + "isOffDay": true + }, + { + "date": "2008-02-12", + "isOffDay": true + }, + { + "date": "2008-02-02", + "isOffDay": false + }, + { + "date": "2008-02-03", + "isOffDay": false + } ] }, { "year": 2008, "description": "4月4日—6日放假,共3天。其中,4月4日(清明节)为法定节假日,4月5日(星期六)、4月6日(星期日)照常公休。", "expected": [ - { "date": "2008-04-04", "isOffDay": true }, - { "date": "2008-04-05", "isOffDay": true }, - { "date": "2008-04-06", "isOffDay": true } + { + "date": "2008-04-04", + "isOffDay": true + }, + { + "date": "2008-04-05", + "isOffDay": true + }, + { + "date": "2008-04-06", + "isOffDay": true + } ] }, { "year": 2008, "description": "5月1日—3日放假,共3天。其中,5月1日为法定节假日,5月3日(星期六)为公休日,5月4日(星期日)公休日调至5月2日(星期五),5月4日(星期日)上班。", "expected": [ - { "date": "2008-05-01", "isOffDay": true }, - { "date": "2008-05-02", "isOffDay": true }, - { "date": "2008-05-03", "isOffDay": true }, - { "date": "2008-05-04", "isOffDay": false } + { + "date": "2008-05-01", + "isOffDay": true + }, + { + "date": "2008-05-02", + "isOffDay": true + }, + { + "date": "2008-05-03", + "isOffDay": true + }, + { + "date": "2008-05-04", + "isOffDay": false + } ] }, { "year": 2008, "description": "6月7日—9日放假,共3天。其中,6月7日(星期六)照常公休,6月8日(农历五月初五,端午节)为法定节假日,6月8日(星期日)公休日调至6月9日(星期一)。", "expected": [ - { "date": "2008-06-07", "isOffDay": true }, - { "date": "2008-06-08", "isOffDay": true }, - { "date": "2008-06-09", "isOffDay": true } + { + "date": "2008-06-07", + "isOffDay": true + }, + { + "date": "2008-06-08", + "isOffDay": true + }, + { + "date": "2008-06-09", + "isOffDay": true + } ] }, { "year": 2008, "description": "9月13日—15日放假,共3天。其中,9月13日(星期六)为公休日,9月14日(农历八月十五,中秋节)为法定节假日,9月14日(星期日)公休日调至9月15日(星期一)。", "expected": [ - { "date": "2008-09-13", "isOffDay": true }, - { "date": "2008-09-14", "isOffDay": true }, - { "date": "2008-09-15", "isOffDay": true } + { + "date": "2008-09-13", + "isOffDay": true + }, + { + "date": "2008-09-14", + "isOffDay": true + }, + { + "date": "2008-09-15", + "isOffDay": true + } ] }, { "year": 2008, "description": "9月29日—10月5日放假,共7天。其中,10月1日、2日、3日为法定节假日,9月27日(星期六)、9月28日(星期日)两个公休日调至9月29日(星期一)、30日(星期二),10月4日(星期六)、5日(星期日)照常公休。", "expected": [ - { "date": "2008-09-29", "isOffDay": true }, - { "date": "2008-09-30", "isOffDay": true }, - { "date": "2008-10-01", "isOffDay": true }, - { "date": "2008-10-02", "isOffDay": true }, - { "date": "2008-10-03", "isOffDay": true }, - { "date": "2008-10-04", "isOffDay": true }, - { "date": "2008-10-05", "isOffDay": true }, - { "date": "2008-09-27", "isOffDay": false }, - { "date": "2008-09-28", "isOffDay": false } + { + "date": "2008-09-29", + "isOffDay": true + }, + { + "date": "2008-09-30", + "isOffDay": true + }, + { + "date": "2008-10-01", + "isOffDay": true + }, + { + "date": "2008-10-02", + "isOffDay": true + }, + { + "date": "2008-10-03", + "isOffDay": true + }, + { + "date": "2008-10-04", + "isOffDay": true + }, + { + "date": "2008-10-05", + "isOffDay": true + }, + { + "date": "2008-09-27", + "isOffDay": false + }, + { + "date": "2008-09-28", + "isOffDay": false + } ] } ] diff --git a/fetch_holidays.py b/fetch_holidays.py index 77408b7..601396a 100644 --- a/fetch_holidays.py +++ b/fetch_holidays.py @@ -151,7 +151,7 @@ class SentenceParser: yield i def _parse_rest_1(self): - match = re.match('(.+)放假(调休)?$', self.sentence) + match = re.match(r'(.+)(放假|补休|调休)+(?:\d+天)?$', self.sentence) if match: for i in self.extract_dates(match.group(1)): yield { @@ -209,6 +209,9 @@ class DescriptionParser: self._date_memory.add(j['date']) yield j + if not self._date_memory: + raise NotImplementedError(self.description) + def main(): parser = argparse.ArgumentParser()