2017-04-18 6 views
2

私はparsedatetime Pythonのライブラリを使用して、自然言語からの解析を行っています。それは多くのシナリオのために、自然言語を解析して日付にします。たとえばnext Monday at 5PM、 `来月などPythonのparsedatetimeライブラリで 'Day after tomorrow'が動作しません

しかし、day after tomorrowまたはday 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文字列と一致しないこと構文解析に使用された文字列であり、parsedatetimedayの単位を認識しており無視されました。

+0

それは今働いています:) – User456898

関連する問題