facebook / duckling

Language, engine, and tooling for expressing, testing, and evaluating composable language rules on input strings.
Other
4.07k stars 724 forks source link

"before the end of the month" incorrectly parsed #275

Open figelwump opened 5 years ago

figelwump commented 5 years ago

Currently a phrase like "before the end of the month" gives an interval as expected, but the end date is not the last day of the month.

Examples:

curl -XPOST http://0.0.0.0:8000/parse --data 'locale=en_US&text=before the end of the month' 
[
    {
        "body": "before the end of the month",
        "dim": "time",
        "end": 27,
        "latent": false,
        "start": 0,
        "value": {
            "to": {
                "grain": "day",
                "value": "2018-11-21T00:00:00.000-08:00"
            },
            "type": "interval",
            "values": [
                {
                    "to": {
                        "grain": "day",
                        "value": "2018-11-21T00:00:00.000-08:00"
                    },
                    "type": "interval"
                }
            ]
        }
    }
]
curl -XPOST http://0.0.0.0:8000/parse --data 'locale=en_US&text=before end of dec'
[
    {
        "body": "before end of dec",
        "dim": "time",
        "end": 17,
        "latent": false,
        "start": 0,
        "value": {
            "to": {
                "grain": "day",
                "value": "2018-12-21T00:00:00.000-08:00"
            },
            "type": "interval",
            "values": [
                {
                    "to": {
                        "grain": "day",
                        "value": "2018-12-21T00:00:00.000-08:00"
                    },
                    "type": "interval"
                },
                {
                    "to": {
                        "grain": "day",
                        "value": "2019-12-21T00:00:00.000-08:00"
                    },
                    "type": "interval"
                },
                {
                    "to": {
                        "grain": "day",
                        "value": "2020-12-21T00:00:00.000-08:00"
                    },
                    "type": "interval"
                }
            ]
        }
    }
]
patapizza commented 5 years ago

Thanks for reporting @figelwump! Any chance you can give it a shot?

figelwump commented 5 years ago

I can take a stab at it! Pointers on where to start would be great.

patapizza commented 5 years ago

@figelwump: Great! https://github.com/facebook/duckling/blob/master/Duckling/Time/EN/Rules.hs#L1354-L1395

xtianjohns commented 5 years ago

I think that this issue probably lives closer to here. Since those linked rules @patapizza probably would match on "end of the month", and not "at the beginning", and in the rule I've linked we then/else on the presence of "by".

Without "by", we intersect on 21 - maybe this explains the dates @figelwump is seeing in the results?

eitantorf commented 2 years ago

Was this ever resolved? I still see the issue