1. A method for preprocessing a natural language database query, the method comprising: a) accepting an alphanumeric string related to the query; b) parsing the alphanumeric string to generate query words; c) determining whether any of the query words, or any phrases formed by at least two adjacent query words, match any of a plurality of indexed annotations; d) if a query word or phrase matches one or more of the plurality of indexed annotations, for each of the plurality of indexed annotations, adding a pattern associated with the indexed annotation to a group associated with the query word or phrase; e) selecting a pattern from each group of patterns to generate a selection of patterns; and f) combining the patterns of the selection of patterns to generate a single, connected, lowest cost pattern.