cloud-hypervisor/vendor/registry-40351f815f426200/strsim
Samuel Ortiz d5f5648b37 vendor: Add vendored dependencies
We use cargo vendor to generate a .cargo/config file and the vendor
directory. Vendoring allows us to lock our dependencies and to modify
them easily from the top level Cargo.toml.

We vendor all dependencies, including the crates.io ones, which allows
for network isolated builds.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2019-06-04 17:51:52 +02:00
..
src vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
tests vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
.cargo-checksum.json vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
appveyor.yml vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
Cargo.toml vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
CHANGELOG.md vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
dev vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
LICENSE vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00
README.md vendor: Add vendored dependencies 2019-06-04 17:51:52 +02:00

strsim-rs Crates.io Crates.io Linux build status Windows build status

Rust implementations of string similarity metrics:

Installation

# Cargo.toml
[dependencies]
strsim = "0.6.0"

Documentation

You can change the version in the url to see the documentation for an older version in the changelog.

Usage

extern crate strsim;

use strsim::{hamming, levenshtein, osa_distance, damerau_levenshtein, jaro,
             jaro_winkler, levenshtein_against_vec, osa_distance_against_vec,
             damerau_levenshtein_against_vec, jaro_against_vec,
             jaro_winkler_against_vec};

fn main() {
    match hamming("hamming", "hammers") {
        Ok(distance) => assert_eq!(3, distance),
        Err(why) => panic!("{:?}", why)
    }

    assert_eq!(3, levenshtein("kitten", "sitting"));

    assert_eq!(3, osa_distance("ac", "cba"));

    assert_eq!(2, damerau_levenshtein("ac", "cba"));

    assert!((0.392 - jaro("Friedrich Nietzsche", "Jean-Paul Sartre")).abs() <
            0.001);

    assert!((0.911 - jaro_winkler("cheeseburger", "cheese fries")).abs() <
            0.001);

    // get vectors of values back
    let v = vec!["test", "test1", "test12", "test123", "", "tset", "tsvet"];

    assert_eq!(levenshtein_against_vec("test", &v),
               vec![0, 1, 2, 3, 4, 2, 3]);

    assert_eq!(osa_distance_against_vec("test", &v),
               vec![0, 1, 2, 3, 4, 1, 3]);

    assert_eq!(damerau_levenshtein_against_vec("test", &v),
               vec![0, 1, 2, 3, 4, 1, 2]);

    let jaro_distances = jaro_against_vec("test", &v);
    let jaro_expected = vec![1.0, 0.933333, 0.888889, 0.857143, 0.0, 0.916667];
    let jaro_delta: f64 = jaro_distances.iter()
                                        .zip(jaro_expected.iter())
                                        .map(|(x, y)| (x - y).abs() as f64)
                                        .fold(0.0, |x, y| x + y as f64);
    assert!(jaro_delta < 0.0001);

    let jaro_winkler_distances = jaro_winkler_against_vec("test", &v);
    let jaro_winkler_expected = vec![1.0, 0.96, 0.933333, 0.914286, 0.0, 0.925];
    let jaro_winkler_delta = jaro_winkler_distances.iter()
                                 .zip(jaro_winkler_expected.iter())
                                 .map(|(x, y)| (x - y).abs() as f64)
                                 .fold(0.0, |x, y| x + y as f64);
    assert!(jaro_winkler_delta < 0.0001);
}

Development

If you don't want to install Rust itself, you can install Docker, and run $ ./dev. This should bring up a temporary container from which you can run cargo commands.

License

MIT