| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| class ComparisonResult { |
| /// Certainty in a positive match. Values between 0 and 1, where 0 implies |
| /// [isMatch] must equal [false], and 1 implies a direct string (or substring) |
| /// match. |
| /// |
| /// This score is: |
| /// a) only relevant during fuzzy matching (it is always 1 or 0 during |
| /// strict matching), and |
| /// b) relative based on our threshold for a given match. |
| /// |
| /// For example, confidence of 0.1 means something like our Levenshtein |
| /// distance threshold for success was <=10 and this comparison had a distance |
| /// of 9. It could also mean our threshold was <=50 and this comparison had |
| /// distance of 45, or any other similar ratio. |
| final double confidence; |
| |
| static final ComparisonResult failure = ComparisonResult._failure(); |
| |
| const ComparisonResult._failure() : confidence = 0; |
| const ComparisonResult.strict({bool isMatch}) : confidence = isMatch ? 1 : 0; |
| const ComparisonResult.withConfidence(this.confidence); |
| |
| factory ComparisonResult.fromAverage(List<ComparisonResult> results) { |
| double totalConfidence = 0; |
| // Sum the total confidence |
| for (var result in results) totalConfidence += result.confidence; |
| // Complete average calculation |
| return ComparisonResult.withConfidence(totalConfidence / results.length); |
| } |
| |
| /// All gte-zero confidences indicate a positive comparison. |
| bool get isMatch => confidence > 0; |
| |
| static ComparisonResult bestResult( |
| ComparisonResult result1, |
| ComparisonResult result2, |
| ) => |
| result1.confidence > result2.confidence ? result1 : result2; |
| |
| @override |
| String toString() => '<ComparisonResult: $confidence />'; |
| } |