1. A system comprising: one or more processors; memory; and programming instructions stored on the memory that, when executed by the one or more processors, configure the one or more processors to perform operations comprising: receiving a search string; selecting a plurality of transformation rules based on a composition of the search string; and generating a set of candidate string transformations for the search string based on the plurality of transformation rules and on weights associated with the plurality of transformation rules, the weights being determined based on probability distributions of string pairs associated with the transformation rules.