view README @ 3:cf0f9e6d383d

Clarified some things in the README.
author Atul Varma <varmaa@toolness.com>
date Mon, 12 May 2008 13:53:10 -0700
parents 7c040d675c3c
children
line wrap: on
line source

Humane Imperative Parser (HIP)

This is an interactive, primarily text-based command-line environment
in which users can enter information about an action they want to
perform, while receiving constant feedback from the interface to
ensure that the computer and user understand each other.

The exact details of the environment are not set in stone; this could
be performed through ubiquitous quasimodal environment, as with Enso,
or it could be initiated from the URL bar of a web browser, a
contextual menu, or something else.  The only elements required are:

  * a free-form text entry field,
  * a suggestion pop-up window,
  * a preview window that supports HTML content, and
  * an optional current selection.

Example commands that the user could enter include:

  "email A" such that A is a contact with an email address

  "fly from A to B" such that A and B are cities

  "fly to B from A" such that A and B are cities

  "fly from A to B on C" such that A and B are cities, C is an airline

  "fly on C from A to B" such that A and B are cities, C is an airline

  "fly here from A" such that "here" is the user's current selection
    and A is a city.

  "reduce redeye in A" such that A is a picture

  "schedule 3pm dinner with bob tomorrow"

  "resize A to B" such that A and B are pictures

  "resize A to C" such that A is a picture and C is a dimension, and
    a dimension is a number followed by "x" followed by a number

  Both of the "resize" statements may invoke methods on a "verb"
  object, like so:

    resize_verb.preview(A, B, C)

      Returns HTML code for a "preview" of what the operation
      will do, which is executed repeatedly after each
      user input keystroke, starting from the point that it
      is understood that "resize" is the verb to use (i.e.,
      once the user has typed in the string "resize ").

    resize_verb.execute(A, B, C)

      Actually executes the action.

Other remarks:

* Live feedback is key, so that the user knows what the computer
  thinks he/she wants.  This is the primary difference between the
  HIP and existing linguistic parsers; the latter do not assume
  continuous HC interaction during the creation of the statement.

* Different suggestion lists may be used multiple times in the
  creation of a statement.  For instance, when a user is typing
  "fly from chicago to san francisco", the suggestions "fly from"
  and "fly to" may appear after the user has typed "fly"; once the
  user has typed "fly from", there are no suggestions, but the preview
  may tell to the user that they should enter the name of a city.
  Once the user has typed "fly from c", a suggestion list that
  includes a number of cities starting with "c" should show up.

* Ambiguities are expected, and simply result in multiple options for
  the user to choose from, but should hopefully be fairly uncommon.

* Note that this is verb->noun.  noun->verb is much harder b/c the
  scope of possible options is enormous; specifying a verb first is
  helpful because it specifies scope, which means that it's much
  easier for the computer to help them out.

  * it might be possible to do noun->verb in a limited fashion, if we
    have a very constrained scope for the initial noun; for instance,
    limiting it to very specific subset of options, e.g. dates, zip
    codes, phone numbers, other numerically identifiable things with
    very well-defined formats.

  * it may also be possible to do noun->verb if the scope starts out
    narrow and is expanded as the computer "learns" about what things
    the user likes based on browsing history and command history.

* The interface should be habit-forming, so we'll need to carefully
  balance the dynamism of the system with its habituability.