输入:
(注意:输入已经被一些Python代码预处理到这个阶段,因此使用一些Python包更容易处理。)
预期产出:
我尝试过dateutil。但它只能提取一个日期,对吗?即使在这种情况下,介词和日期的提取也是一个问题。
我还查看了dateparser和datefinder。看起来他们都使用dateutil。
日期可以是YYYY-MM-DD,DDMMYYYY等,只要格式相同。
输出不必与上述输出相同,只要它反映准确的信息。
最后,感谢您的时间和想法。我也会继续努力。
答案 0 :(得分:2)
这是优秀dateparser
库的典型用例。只需read the docs,你就可以做到。
答案 1 :(得分:2)
经过几天的研究,我提出了以下解决提取问题的方法。
部分代码如下所示。 (在上下文中需要依赖的摘录)
new_w = new_s.split()
for j in range(len(new_w)):
if new_w[j] in prepositions and (new_w[j+1].isdecimal() or new_w[j+1].lower() in months):
# Process case like "Starting from Mar27, 2016 to Dec31, 2016"
if j+7 in range(len(new_w)) and new_w[j+4] in prepositions:
if new_w[j+5].isdecimal() or new_w[j+5].lower() in months:
u = ' '.join(new_w[j:j+8])
print(label_class[i] + ': ' + u)
break
# Process case like "Ticket must be issued on/before 29FEB, 2016"
elif new_w[j-1] in prepositions:
u = ' '.join(new_w[j-1:j+4])
print(label_class[i] + ': ' + u)
break
# Process case like "Ticketing valid until 18FEB16"
else:
u = ' '.join(new_w[j:j+4])
print(label_class[i] + ': ' + u)
break
# Process case like "TICKETING PERIOD: NOW - FEB 02, 2016"
# Process case like "TRAVELING DATES: NOW - FEB 10,2016 FEB 22,2016 - MAY 12,2016"
if new_w[j] in ['-'] and (new_w[j+1].lower() in months or new_w[j+2].lower() in months):
if new_w[j-1].lower() == 'now':
u = released_date + ' - ' + ' '.join(new_w[j+1:j+4])
print(label_class[i] + ': ' + u)
elif new_w[j-3].lower() in months or new_w[j-2].lower() in months:
u = ' '.join(new_w[j-3:j+4])
print(label_class[i] + ': ' + u)