我正在使用 Python 的 parsedatetime
库从自然语言进行日期时间解析。它将自然语言解析为许多场景的日期时间。例如 下周一下午 5 点
、`下个月等。
但是当用自然语言给出后天
或前天
时,它不理解。
例如,“后天”获取明天的日期时间。
这是代码片段:
from datetime import datetime
import parsedatetime as pdt
plain_text='day after tomorrow' # Natural Language input
str_parsed_date_time = ''
cal = pdt.Calendar()
now = datetime.now()
for time_string in [plain_text]:
parsed_date_time = (cal.parseDT(time_string, now)[0])
str_parsed_date_time = datetime.strftime(parsed_date_time, '%Y-%m-%d %H:%M:%S') # Convert date time to string
print(str_parsed_date_time)
今天的日期是 2017 年 4 月 18 日 (2017-04-18)
库输出 2017-04-19 而不是 2017-04-20
可能是什么原因?
最佳答案
parsedatetime
期望在其单位前面有一个数量。所以它将成功解析类似后天
的内容,但不会解析后天
。
测试代码:
import parsedatetime as pdt
test_text = [
'day after tomorrow',
'the day after tomorrow',
'a day after tomorrow',
'an day after tomorrow',
'one day after tomorrow',
'two day after tomorrow',
]
cal = pdt.Calendar()
for time_string in test_text:
result = cal.nlp(time_string)[0]
print("Got: %s from:'%s' original:'%s'" % (
result[0].date(), result[-1], time_string))
结果:
Got: 2017-04-20 from:'after tomorrow' original:'day after tomorrow'
Got: 2017-04-20 from:'after tomorrow' original:'the day after tomorrow'
Got: 2017-04-21 from:'a day after tomorrow' original:'a day after tomorrow'
Got: 2017-04-21 from:'an day after tomorrow' original:'an day after tomorrow'
Got: 2017-04-21 from:'one day after tomorrow' original:'one day after tomorrow'
Got: 2017-04-22 from:'two day after tomorrow' original:'two day after tomorrow'
请注意,在前两个结果中,from
字符串与original
字符串不匹配,因为返回的字符串是解析时使用的字符串,而parsedatetime
确实识别了 day
的单位,因此忽略了它。
关于python - “后天”在 Python 的 parsedatetime 库中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476926/