2017-04-18 46 views
2

我正在使用parsedatetime Python的日誌時間庫解析自然語言。它將自然語言分析爲許多場景的日期時間。例如next Monday at 5PM,`下個月等'後天'不能在Python的parsedatetime庫中工作

但是當day after tomorrowday before yesterday在自然語言中給出時,它不理解它。

例如,'後天'取明天的日期時間。

這裏是代碼片段:

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) 

今天的日期是April 18th 2017 (2017-04-18)

圖書館輸出的2017年4月19日,而不是2017年4月20日

可能是什麼原因?

+0

我認爲它只是不理解'後天'或'前一天''和明天或昨天返回日期.... –

回答

1

parsedatetime預計在其單位前有數量。所以它會成功解析a day after tomorrow之類的東西,但不會做day after tomorrow

測試代碼:

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的單位,因此忽略它。

+0

它現在工作:) – User456898