What are the basic algorithms (and possibly training data sets or other building blocks) needed to code a simple but useful equivalent of the new Cortana Commitments feature?