Struct Assessor

Source
pub struct Assessor<Query, Candidate> {
    pub resemblers: Vec<Box<dyn Resemblance<Query, Candidate>>>,
    pub influences: Vec<Influence>,
    pub floor: f64,
}

Fields§

§resemblers: Vec<Box<dyn Resemblance<Query, Candidate>>>§influences: Vec<Influence>§floor: f64

Implementations§

Source§

impl<Query, Candidate> Assessor<Query, Candidate>

Source

pub fn new() -> Self

Examples found in repository?
examples/string.rs (line 44)
43fn main() {
44    let assessor = Assessor::<String, String>::new()
45        .with(LevenshteinResembler, 1.0)
46        .floor(0.6);
47
48    let query = String::from("hello");
49    let candidates = vec![
50        String::from("hello"),
51        String::from("helo"),
52        String::from("world"),
53    ];
54
55    println!("Basic String Matching Example");
56    println!("============================");
57
58    if let Some(verdict) = assessor.champion(&query, &candidates) {
59        println!("Champion found:");
60        println!("  Resemblance: {:.2}", verdict.resemblance);
61        println!("  Candidate: {}", verdict.candidate);
62        println!("  Perfect: {}", verdict.perfect);
63        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
64    } else {
65        println!("No viable candidate found above floor threshold");
66    }
67
68    // Show all candidates for comparison
69    println!("\nAll Candidates Analysis");
70    println!("======================");
71
72    for candidate in &candidates {
73        let verdict = assessor.verdict(&query, candidate);
74        let disposition = assessor.disposition(&query, candidate);
75        println!("'{}': resemblance={:.2}, disposition={:?}",
76                 candidate, verdict.resemblance, disposition);
77    }
78}
More examples
Hide additional examples
examples/numeric.rs (line 24)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
examples/analysis.rs (line 62)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn floor(self, floor: f64) -> Self

Examples found in repository?
examples/string.rs (line 46)
43fn main() {
44    let assessor = Assessor::<String, String>::new()
45        .with(LevenshteinResembler, 1.0)
46        .floor(0.6);
47
48    let query = String::from("hello");
49    let candidates = vec![
50        String::from("hello"),
51        String::from("helo"),
52        String::from("world"),
53    ];
54
55    println!("Basic String Matching Example");
56    println!("============================");
57
58    if let Some(verdict) = assessor.champion(&query, &candidates) {
59        println!("Champion found:");
60        println!("  Resemblance: {:.2}", verdict.resemblance);
61        println!("  Candidate: {}", verdict.candidate);
62        println!("  Perfect: {}", verdict.perfect);
63        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
64    } else {
65        println!("No viable candidate found above floor threshold");
66    }
67
68    // Show all candidates for comparison
69    println!("\nAll Candidates Analysis");
70    println!("======================");
71
72    for candidate in &candidates {
73        let verdict = assessor.verdict(&query, candidate);
74        let disposition = assessor.disposition(&query, candidate);
75        println!("'{}': resemblance={:.2}, disposition={:?}",
76                 candidate, verdict.resemblance, disposition);
77    }
78}
More examples
Hide additional examples
examples/numeric.rs (line 26)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
examples/analysis.rs (line 65)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn with<R: Resemblance<Query, Candidate> + 'static>( self, resembler: R, magnitude: f64, ) -> Self

Examples found in repository?
examples/string.rs (line 45)
43fn main() {
44    let assessor = Assessor::<String, String>::new()
45        .with(LevenshteinResembler, 1.0)
46        .floor(0.6);
47
48    let query = String::from("hello");
49    let candidates = vec![
50        String::from("hello"),
51        String::from("helo"),
52        String::from("world"),
53    ];
54
55    println!("Basic String Matching Example");
56    println!("============================");
57
58    if let Some(verdict) = assessor.champion(&query, &candidates) {
59        println!("Champion found:");
60        println!("  Resemblance: {:.2}", verdict.resemblance);
61        println!("  Candidate: {}", verdict.candidate);
62        println!("  Perfect: {}", verdict.perfect);
63        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
64    } else {
65        println!("No viable candidate found above floor threshold");
66    }
67
68    // Show all candidates for comparison
69    println!("\nAll Candidates Analysis");
70    println!("======================");
71
72    for candidate in &candidates {
73        let verdict = assessor.verdict(&query, candidate);
74        let disposition = assessor.disposition(&query, candidate);
75        println!("'{}': resemblance={:.2}, disposition={:?}",
76                 candidate, verdict.resemblance, disposition);
77    }
78}
More examples
Hide additional examples
examples/numeric.rs (line 25)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
examples/analysis.rs (line 63)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source§

impl<Query, Candidate> Assessor<Query, Candidate>
where Query: Clone + Debug, Candidate: Clone + Debug,

Source

pub fn resemblance(&self, query: &Query, candidate: &Candidate) -> f64

Source

pub fn perfect(&self, query: &Query, candidate: &Candidate) -> bool

Source

pub fn disposition(&self, query: &Query, candidate: &Candidate) -> Disposition

Examples found in repository?
examples/string.rs (line 63)
43fn main() {
44    let assessor = Assessor::<String, String>::new()
45        .with(LevenshteinResembler, 1.0)
46        .floor(0.6);
47
48    let query = String::from("hello");
49    let candidates = vec![
50        String::from("hello"),
51        String::from("helo"),
52        String::from("world"),
53    ];
54
55    println!("Basic String Matching Example");
56    println!("============================");
57
58    if let Some(verdict) = assessor.champion(&query, &candidates) {
59        println!("Champion found:");
60        println!("  Resemblance: {:.2}", verdict.resemblance);
61        println!("  Candidate: {}", verdict.candidate);
62        println!("  Perfect: {}", verdict.perfect);
63        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
64    } else {
65        println!("No viable candidate found above floor threshold");
66    }
67
68    // Show all candidates for comparison
69    println!("\nAll Candidates Analysis");
70    println!("======================");
71
72    for candidate in &candidates {
73        let verdict = assessor.verdict(&query, candidate);
74        let disposition = assessor.disposition(&query, candidate);
75        println!("'{}': resemblance={:.2}, disposition={:?}",
76                 candidate, verdict.resemblance, disposition);
77    }
78}
More examples
Hide additional examples
examples/numeric.rs (line 42)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
examples/analysis.rs (line 79)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn facets(&self, query: &Query, candidate: &Candidate) -> Vec<Facet>

Source

pub fn verdict( &self, query: &Query, candidate: &Candidate, ) -> Verdict<Query, Candidate>

Examples found in repository?
examples/string.rs (line 73)
43fn main() {
44    let assessor = Assessor::<String, String>::new()
45        .with(LevenshteinResembler, 1.0)
46        .floor(0.6);
47
48    let query = String::from("hello");
49    let candidates = vec![
50        String::from("hello"),
51        String::from("helo"),
52        String::from("world"),
53    ];
54
55    println!("Basic String Matching Example");
56    println!("============================");
57
58    if let Some(verdict) = assessor.champion(&query, &candidates) {
59        println!("Champion found:");
60        println!("  Resemblance: {:.2}", verdict.resemblance);
61        println!("  Candidate: {}", verdict.candidate);
62        println!("  Perfect: {}", verdict.perfect);
63        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
64    } else {
65        println!("No viable candidate found above floor threshold");
66    }
67
68    // Show all candidates for comparison
69    println!("\nAll Candidates Analysis");
70    println!("======================");
71
72    for candidate in &candidates {
73        let verdict = assessor.verdict(&query, candidate);
74        let disposition = assessor.disposition(&query, candidate);
75        println!("'{}': resemblance={:.2}, disposition={:?}",
76                 candidate, verdict.resemblance, disposition);
77    }
78}
More examples
Hide additional examples
examples/numeric.rs (line 60)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
examples/analysis.rs (line 73)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn viable(&self, query: &Query, candidate: &Candidate) -> bool

Examples found in repository?
examples/analysis.rs (line 78)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn champion( &self, query: &Query, candidates: &[Candidate], ) -> Option<Verdict<Query, Candidate>>

Examples found in repository?
examples/string.rs (line 58)
43fn main() {
44    let assessor = Assessor::<String, String>::new()
45        .with(LevenshteinResembler, 1.0)
46        .floor(0.6);
47
48    let query = String::from("hello");
49    let candidates = vec![
50        String::from("hello"),
51        String::from("helo"),
52        String::from("world"),
53    ];
54
55    println!("Basic String Matching Example");
56    println!("============================");
57
58    if let Some(verdict) = assessor.champion(&query, &candidates) {
59        println!("Champion found:");
60        println!("  Resemblance: {:.2}", verdict.resemblance);
61        println!("  Candidate: {}", verdict.candidate);
62        println!("  Perfect: {}", verdict.perfect);
63        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
64    } else {
65        println!("No viable candidate found above floor threshold");
66    }
67
68    // Show all candidates for comparison
69    println!("\nAll Candidates Analysis");
70    println!("======================");
71
72    for candidate in &candidates {
73        let verdict = assessor.verdict(&query, candidate);
74        let disposition = assessor.disposition(&query, candidate);
75        println!("'{}': resemblance={:.2}, disposition={:?}",
76                 candidate, verdict.resemblance, disposition);
77    }
78}
More examples
Hide additional examples
examples/numeric.rs (line 49)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
examples/analysis.rs (line 105)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn shortlist( &self, query: &Query, candidates: &[Candidate], ) -> Vec<Verdict<Query, Candidate>>

Examples found in repository?
examples/numeric.rs (line 34)
23fn main() {
24    let assessor = Assessor::<f64, f64>::new()
25        .with(NumericResembler, 1.0)
26        .floor(0.8);
27
28    let query = 42.0;
29    let candidates = vec![40.0, 45.0, 100.0];
30
31    println!("Numeric Matching Example");
32    println!("=======================");
33
34    let shortlist = assessor.shortlist(&query, &candidates);
35    println!("Viable matches found: {}", shortlist.len());
36
37    for (i, verdict) in shortlist.iter().enumerate() {
38        println!("Match {}:", i + 1);
39        println!("  Resemblance: {:.2}", verdict.resemblance);
40        println!("  Candidate: {}", verdict.candidate);
41        println!("  Perfect: {}", verdict.perfect);
42        println!("  Disposition: {:?}", assessor.disposition(&query, &verdict.candidate));
43    }
44
45    // Show champion example
46    println!("\nChampion Selection");
47    println!("=================");
48
49    if let Some(champion) = assessor.champion(&query, &candidates) {
50        println!("Best candidate: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
51    } else {
52        println!("No viable candidates found");
53    }
54
55    // Show all candidates with their resemblance scores
56    println!("\nAll Candidates Analysis");
57    println!("======================");
58
59    for candidate in &candidates {
60        let verdict = assessor.verdict(&query, candidate);
61        println!("Candidate {}: resemblance={:.2}, disposition={:?}",
62                 candidate, verdict.resemblance, assessor.disposition(&query, candidate));
63    }
64}
More examples
Hide additional examples
examples/analysis.rs (line 113)
61fn main() {
62    let assessor = Assessor::<String, String>::new()
63        .with(LevenshteinResembler, 0.7)
64        .with(JaccardResembler, 0.3)
65        .floor(0.5);
66
67    let query = String::from("test");
68    let candidate = String::from("tent");
69
70    println!("Detailed Analysis Example");
71    println!("========================");
72
73    let verdict = assessor.verdict(&query, &candidate);
74    println!("Query: {}", verdict.query);
75    println!("Candidate: {}", verdict.candidate);
76    println!("Overall resemblance: {:.2}", verdict.resemblance);
77    println!("Perfect match: {}", verdict.perfect);
78    println!("Is viable: {}", assessor.viable(&query, &candidate));
79    println!("Disposition: {:?}", assessor.disposition(&query, &candidate));
80    println!("Individual resembler facets:");
81
82    // Get resembler names using Debug trait
83    let resembler_names: Vec<String> = assessor.resemblers.iter()
84        .map(|resembler| format!("{:?}", resembler))
85        .collect();
86
87    for (i, facet) in verdict.facets.iter().enumerate() {
88        println!("  Resembler {}: {}", i + 1, resembler_names[i]);
89        println!("    Raw resemblance: {:.2}", facet.resemblance);
90        println!("    Influence magnitude: {:.2}", facet.influence.magnitude);
91        println!("    Contribution: {:.2}", facet.contribution);
92    }
93
94    // Example of finding best match from multiple candidates
95    println!("\nBest Match Example");
96    println!("==================");
97
98    let candidates = vec![
99        String::from("tent"),
100        String::from("test"),
101        String::from("toast"),
102        String::from("rest"),
103    ];
104
105    if let Some(champion) = assessor.champion(&query, &candidates) {
106        println!("Champion: {} (resemblance: {:.2})", champion.candidate, champion.resemblance);
107    }
108
109    // Example of getting shortlist
110    println!("\nShortlist Example");
111    println!("=================");
112
113    let shortlist = assessor.shortlist(&query, &candidates);
114    for (i, verdict) in shortlist.iter().enumerate() {
115        println!("{}. {} (resemblance: {:.2})", i + 1, verdict.candidate, verdict.resemblance);
116    }
117}
Source

pub fn constrain( &self, query: &Query, candidates: &[Candidate], cap: usize, ) -> Vec<Verdict<Query, Candidate>>

Auto Trait Implementations§

§

impl<Query, Candidate> Freeze for Assessor<Query, Candidate>

§

impl<Query, Candidate> !RefUnwindSafe for Assessor<Query, Candidate>

§

impl<Query, Candidate> !Send for Assessor<Query, Candidate>

§

impl<Query, Candidate> !Sync for Assessor<Query, Candidate>

§

impl<Query, Candidate> Unpin for Assessor<Query, Candidate>

§

impl<Query, Candidate> !UnwindSafe for Assessor<Query, Candidate>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.