1. A method for interpreting a user request, the method comprising: receiving, by a processor, an initial user request from a user; interpreting, by the processor, the initial user request, where the processor fails to fully interpret the initial user request due to a presence of at least one un-interpretable expression in the initial user request wherein the interpreting comprises: identifying an abstracted version of a previous user request that matches the initial user request, wherein at least one attribute value in the abstracted version of the previous request has been replaced with a variable; and replacing the variable with an attribute defined in the initial user request to produce a modified version of the initial user request; and generating, by the processor, at least one alternative request in a context of the initial user request, the at least one alternative request being phrased in a manner that the processor can successfully interpret and that satisfies a combination of semantic constraints, syntactic constraints, and contextual constraints relating to the initial user request, wherein the generating comprises: retrieving a modified version of the previous user request that is stored with the abstracted version of the previous user request; and adapting the modified version of the initial user request in accordance with the modified version of the previous user request to produce the at least one alternative request, where the modified version of the previous user request has been fully interpreted by the processor.