Natural-language datetime parsing and display (was: user friendly datetime features)

Paul McGuire ptmcg at austin.rr.com
Wed Jan 9 09:58:44 EST 2008


On Jan 8, 7:57 pm, Ben Finney <bignose+hates-s... at benfinney.id.au>
wrote:
> "Daniel Fetchinson" <fetchin... at googlemail.com> writes:
> > I'm guessing this feature is needed so often in so many projects that
> > it has been implemented already by several people. Does anyone know of
> > such a stand alone module?
>
> The 'python-dateutil' library allows easy *programmatic* manipulation
> of relative date expressions, but not in natural language.
>

I think the OP was looking for presentation of dates in a friendly
format, not parsing, but it so happens that I started such a parser
with pyparsing about a month ago, and was about 1/2 finished with it
when I saw your post.  I dredged up the code from where it was, and
have a semi-working version now.

NLTK is not needed, as you can constrain and structure the vocabulary
surprisingly well.  Probably trickier is to establish your own
conventions for the meanings of "now", "today", etc.  (For instance, I
interpret "today" as "the current date, at time 00:00:00".) "A day
from now" is "the current time, with tomorrow's date".  "In a day"
could go either way - interpret like "tomorrow" or like "a day from
now."  But once these are settled, a reasonable grammar can be
composed.

My first version is fairly brute force and hackish, but I've gotten
some insights into the date arithmetic, and which words behave much
like operators.  Of course, this is all driven around English and
English idioms - converting to another language would probably be
starting from scratch.

Here are the tests for this first version (these tests all pass):
today
tomorrow
yesterday
in a couple of days
a couple of days from now
a couple of days from today
in a day
3 days ago
3 days from now
a day ago
now
10 minutes ago
10 minutes from now
in 10 minutes
in a minute
in a couple of minutes
20 seconds ago
in 30 seconds
20 seconds before noon
20 seconds before noon tomorrow
noon
midnight
noon tomorrow

You can see the results and the parser code at:
http://pyparsing.wikispaces.com/UnderDevelopment.

-- Paul



More information about the Python-list mailing list