GTG

Add 'Smart Add' Function.

Bug #671245 reported by Danté
28
This bug affects 6 people
Affects Status Importance Assigned to Milestone
GTG
Won't Fix
Wishlist
Unassigned

Bug Description

I'd LOVE (and quite possibly KILL) for the ability to smart add tasks; let me explain:

Google Calander allows me to type something like "Doctor's Appointment at LocalHospital tomorrow at 2" and it gives me a Doctor's appointment, with a map to LocalHospital, knows when now is and also knows I don't mean 2AM. (Quick Add)

In GTG's case, this would be along the lines of "Remember to phone Jack by tomorrow", so that "Phone Jack" is the task, and "tomorrow" means before 12:00AM the day after this. See what I mean? :)

Tags: whishlist
Revision history for this message
Izidor Matušov (izidor) wrote :

I would like also have a similar feature. My tasks usually are "Try to do X" when "do X" it could be enough. Creating a such feature would be art to cover the most of cases what could be transformed. (and need a lot of working with natural language processing)

tags: added: whishlist
Changed in gtg:
importance: Undecided → Wishlist
Revision history for this message
Izidor Matušov (izidor) wrote :

Similar idea was already discussed there -- https://bugs.launchpad.net/gtg/+bug/324090

Revision history for this message
Lionel Dricot (ploum-deactivatedaccount) wrote :

It is cool but hard to implement.

Changed in gtg:
status: New → Confirmed
Revision history for this message
Danté (dante-ashton) wrote :

I wouldn't say it's that hard; it's so simple it's not even natural language processing; it's keyword approximation. The system need only have a list of keywords; and have some 'common-sense' (IE: saying 'do XXX at 2' is more likely to be 2PM then AM, unless the user keeps changing it to AM, in which case the system would, by logic, 'learn'.)

Revision history for this message
Lionel Dricot (ploum-deactivatedaccount) wrote :

patch are welcomed :-)

Even a simple python script which takes the input and gives a precise date output would be appreciated.

Revision history for this message
Izidor Matušov (izidor) wrote :

My 2 cents: it might be a good idea to implement this feature like an external library, or at least put it into GTG.tools and communicate through a very strict API. If this would be implemented, the user must be able to choose a language of her own. Many users of GTG do not use English for creating tasks, at least me. I would like that this pseudo NLP library would support more languages than English.

I am interested in NLP and I would like to help with this library. I can help with the languages I know.

> Dante, do you want to start working on it? Or at least design it? What kind of pattern should we look for? What are the correction we need to do? What kind of problems are we going to tackle?

Revision history for this message
Lionel Dricot (ploum-deactivatedaccount) wrote :

Izidor > that's why I think that this feature is really hard to implement and might be a separate project in itself. I agree that it should be kept separated with a strict API

Revision history for this message
Danté (dante-ashton) wrote :

I've got some familiarity with these sort of systems before; I'd be happy to help but my coding is... embarrassing. (Can't type well; IDE's just LOVE me!)

I'd be more then happy to help with the design, though. My email is <email address hidden> (or MasterComputer on Freenode) whichever you prefer! :)

Revision history for this message
Izidor Matušov (izidor) wrote :

Dante > Okay, you don't have to coding anything :-) I can take care of it. The important part is to design features to work smoothly. I think main communication can be in this bug (others can join if they want) I think we should start with English and later add support for other languages.

To begin: try to write down patterns we should care about and action with these patterns. E.g:

"Remember to phone Jack by tomorrow" -> Create a task "Phone Jack" with start date tomorrow and due date tomorrow.

Creating such a list spends the most time and must be carefully done.

(I looked for such kind of a library, found none :-(

Revision history for this message
Danté (dante-ashton) wrote :

"Appointment at 2 tomorrow"

Ok, simple bit here; as Appointment is not an 'at' 'and' etc (some sort of blacklist of other terms)
'at', ah an action word.
'2', I think we can assume it isn't 2AM
tomorrow; contrast with date time today.

Revision history for this message
Lionel Dricot (ploum-deactivatedaccount) wrote :

Danté >

You give one specific exemple and assume it will work. But I can only say example where it will lead to failure.

1) "Orgazing the party at 2, Foo street"
2) What about other language?
3) what about "at 7 ?" can you assume it is AM or PM?

And there's plenty others.

This problem looks a very complex problem, not impossible, but very complex. It is a project on its own. As such, I don't think it should be part of GTG. GTG could use that project as an external library but it should not be in GTG itself.

Maybe there's already a library doing that after all and it could be integrated in GTG as a plugin.

Revision history for this message
Danté (dante-ashton) wrote :

Yes, there are going to be failures of the system;

The first point you make is a good one, but it wouldn't be much to have another list of words which designate streets, avenues, etc.
The second is a valid one; the system would have to be built for each language as the heuristics would change.
the third point you make can also apply to any human who hears that.

It honestly wouldn't take much more then something very similar to an AIML bot.

But, there we go; my own project was looking at it anyhow; we'll get around to such a system eventually.

Revision history for this message
Izidor Matušov (izidor) wrote :

Dante > Do not forget GTG does not support hours (and minutes) for tasks by design. This fact simplifies the complexity a lot. I am still missing a some patterns and real examples.

Ploum > It is not possible to do unified way for every possible language. Every language is very specific and it is more than about translating words. My idea is to have one big side project which contains of several sub-projects: smart quick add for English, other one for German, one for Slovak, one for Czech :-) and so on...

I did a very quick search for similar library but I didn't find anything...

Revision history for this message
Izidor Matušov (izidor) wrote :

I did another search and I think there is no (at least not famous enough) library which would suit our needs. We have to take approach given at

http://stackoverflow.com/questions/2959458/how-do-you-think-the-quick-add-feature-in-google-calendar-works

We need to have corpus. In GTG we have a few variables which is possible to set: start date, due date, tags, title and description. (No time and place). The corpus rules should be in the form:
<text expression> -> <title>, <start date>, <end date>

Describing a text expression is harder. Few rules for English:

Read the book Code Complete in year -> "Read the book Code Complete", None, today() + 1 year
Desktop Summit starting Aug 7 ends Aug 13 -> "Desktop Summit", 2011-08-07, 2011-08-13
Spend some time in park -> "Spend some time in park", None, None
Someday build a house for dog -> "build a house for dog", None, Later/Someday

And so on... The biggest complexity is to get the corpus together. Dante, would you like to do that?

Revision history for this message
Izidor Matušov (izidor) wrote :

An idea (sorry for spamming your e-mail):

We can solve (improve) recurrent tasks. For every iteration of task we would create a separate task. My use case:

AI laboratories every second Thursday for 13 weeks
UI lectures every Tuesday until Dec 24

It would be perfect for daily errands:

Take the trash out every day in 30 days
Shave yourself every second day this month

Do you see how awesome it would be? I would love to generate many similar tasks by a single command! I used to do that manually. (Importance of this "side project" became much more higher for me...)

For inspiration, there is Google's quick add help page with few examples: http://www.google.com/support/calendar/bin/answer.py?answer=36604

Izidor Matušov (izidor)
Changed in gtg:
assignee: nobody → Izidor Matušov (izidor)
milestone: none → 0.4
Revision history for this message
Danté (dante-ashton) wrote :

Agreed, Izidor.

I offer to help anyway I can; I'm just sorry I'm limited there...

Good luck!

Revision history for this message
Izidor Matušov (izidor) wrote :
Izidor Matušov (izidor)
Changed in gtg:
milestone: 0.4 → 0.3
assignee: Izidor Matušov (izidor) → nobody
Revision history for this message
Izidor Matušov (izidor) wrote :

Another example for this "quick add toolbar" extension could be QuickCal:
http://quickcalapp.com/

Revision history for this message
Matijs van Zuijlen (matijs) wrote :

It looks like the nickel library does exactly what you want. It's written in Ruby, but you could do a straight port to Python I suppose. Or port GTG to Ruby :-P

Source: https://github.com/lzell/nickel
Demo at: http://naturalinputs.com/

Izidor Matušov (izidor)
Changed in gtg:
milestone: 0.3 → 0.3.2
Izidor Matušov (izidor)
Changed in gtg:
milestone: 0.3.2 → 0.4
Jeff Fortin Tam (kiddo)
Changed in gtg:
status: Confirmed → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.