Damerau–Levenshtein distance


In information theory and computer science, the Damerau–Levenshtein distance is a string metric for measuring the edit distance between two sequences. Informally, the Damerau–Levenshtein distance between two words is the minimum number of operations required to change one word into the other.
The Damerau–Levenshtein distance differs from the classical Levenshtein distance by including transpositions among its allowable operations in addition to the three classical single-character edit operations.
In his seminal paper, Damerau stated that more than 80% of all human misspellings can be expressed by a single error of one of the four types. Damerau's paper considered only misspellings that could be corrected with at most one edit operation. While the original motivation was to measure distance between human misspellings to improve applications such as spell checkers, Damerau–Levenshtein distance has also seen uses in biology to measure the variation between protein sequences.

Definition

To express the Damerau–Levenshtein distance between two strings and a function is defined, whose value is a distance between an –symbol prefix of string and a –symbol prefix of.
The restricted distance function is defined recursively as:,
where is the indicator function equal to 0 when and equal to 1 otherwise.
Each recursive call matches one of the cases covered by the Damerau–Levenshtein distance:
The Damerau–Levenshtein distance between and is then given by the function value for full strings: where denotes the length of string and is the length of.

Algorithm

Presented here are two algorithms: the first, simpler one, computes what is known as the optimal string alignment distance or restricted edit distance, while the second one computes the Damerau–Levenshtein distance with adjacent transpositions. Adding transpositions adds significant complexity. The difference between the two algorithms consists in that the optimal string alignment algorithm computes the number of edit operations needed to make the strings equal under the condition that no substring is edited more than once, whereas the second one presents no such restriction.
Take for example the edit distance between CA and ABC. The Damerau–Levenshtein distance LD = 2 because CAACABC, but the optimal string alignment distance OSA = 3 because if the operation CAAC is used, it is not possible to use ACABC because that would require the substring to be edited more than once, which is not allowed in OSA, and therefore the shortest sequence of operations is CAAABABC. Note that for the optimal string alignment distance, the triangle inequality does not hold: OSA + OSA < OSA, and so it is not a true metric.

Optimal string alignment distance

Optimal string alignment distance can be computed using a straightforward extension of the Wagner–Fischer dynamic programming algorithm that computes Levenshtein distance. In pseudocode:
algorithm OSA-distance is
input: strings a, b
output: distance, integer

let d be a 2-d array of integers, dimensions length+1, length+1
// note that d is zero-indexed, while a and b are one-indexed.

for i := 0 to length inclusive do
d := i
for j := 0 to length inclusive do
d := j

for i := 1 to length inclusive do
for j := 1 to length inclusive do
if a = b then
cost := 0
else
cost := 1
d := minimum // substitution
if i > 1 and j > 1 and a = b and a = b then
d := minimum // transposition
return d
The difference from the algorithm for Levenshtein distance is the addition of one recurrence:
if i > 1 and j > 1 and a = b and a = b then
d := minimum // transposition

Distance with adjacent transpositions

The following algorithm computes the true Damerau–Levenshtein distance with adjacent transpositions; this algorithm requires as an additional parameter the size of the alphabet, so that all entries of the arrays are in :
algorithm DL-distance is
input: strings a, b
output: distance, integer

da := new array of |Σ| integers
for i := 1 to |Σ| inclusive do
da := 0

let d be a 2-d array of integers, dimensions length+2, length+2
// note that d has indices starting at −1, while a, b and da are one-indexed.

maxdist := length + length
d := maxdist
for i := 0 to length inclusive do
d := maxdist
d := i
for j := 0 to length inclusive do
d := maxdist
d := j

for i := 1 to length inclusive do
db := 0
for j := 1 to length inclusive do
k := da = b then
cost := 0
db := j
else
cost := 1
d := minimum + 1 + ) //transposition
da
To devise a proper algorithm to calculate unrestricted Damerau–Levenshtein distance note that there always exists an optimal sequence of edit operations, where once-transposed letters are never modified afterwards. Thus, we need to consider only two symmetric ways of modifying a substring more than once: transpose letters and insert an arbitrary number of characters between them, or delete a sequence of characters and transpose letters that become adjacent after deletion. The straightforward implementation of this idea gives an algorithm of cubic complexity:, where M and N are string lengths. Using the ideas of Lowrance and Wagner, this naive algorithm can be improved to be in the worst case, which is what the above pseudocode does.
It is interesting that the bitap algorithm can be modified to process transposition. See the information retrieval section of for an example of such an adaptation.

Applications

Damerau–Levenshtein distance plays an important role in natural language processing. In natural languages, strings are short and the number of errors rarely exceeds 2. In such circumstances, restricted and real edit distance differ very rarely. Oommen and Loke even mitigated the limitation of the restricted edit distance by introducing generalized transpositions. Nevertheless, one must remember that the restricted edit distance usually does not satisfy the triangle inequality and, thus, cannot be used with metric trees.

DNA

Since DNA frequently undergoes insertions, deletions, substitutions, and transpositions, and each of these operations occurs on approximately the same timescale, the Damerau–Levenshtein distance is an appropriate metric of the variation between two strands of DNA. More common in DNA, protein, and other bioinformatics related alignment tasks is the use of closely related algorithms such as Needleman–Wunsch algorithm or Smith–Waterman algorithm.

Fraud detection

The algorithm can be used with any set of words, like vendor names. Since entry is manual by nature there is a risk of entering a false vendor. A fraudster employee may enter one real vendor such as "Rich Heir Estate Services" versus a false vendor "Rich Hier State Services". The fraudster would then create a false bank account and have the company route checks to the real vendor and false vendor. The Damerau–Levenshtein algorithm will detect the transposed and dropped letter and bring attention of the items to a fraud examiner.

Export control

The U.S. Government uses the Damerau–Levenshtein distance with its Consolidated Screening List API.