1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.text.similarity; 18 19 import java.util.Objects; 20 21 /** 22 * Container class to store Levenshtein distance between two character sequences. 23 * 24 * <p>Stores the count of insert, deletion and substitute operations needed to 25 * change one character sequence into another.</p> 26 * 27 * <p>This class is immutable.</p> 28 * 29 * @since 1.0 30 */ 31 public class LevenshteinResults { 32 /** 33 * Edit distance. 34 */ 35 private final Integer distance; 36 /** 37 * Insert character count. 38 */ 39 private final Integer insertCount; 40 /** 41 * Delete character count. 42 */ 43 private final Integer deleteCount; 44 /** 45 * Substitute character count. 46 */ 47 private final Integer substituteCount; 48 49 /** 50 * Create the results for a detailed Levenshtein distance. 51 * 52 * @param distance distance between two character sequences. 53 * @param insertCount insert character count 54 * @param deleteCount delete character count 55 * @param substituteCount substitute character count 56 */ 57 public LevenshteinResults(final Integer distance, final Integer insertCount, final Integer deleteCount, 58 final Integer substituteCount) { 59 this.distance = distance; 60 this.insertCount = insertCount; 61 this.deleteCount = deleteCount; 62 this.substituteCount = substituteCount; 63 } 64 65 /** 66 * Get the distance between two character sequences. 67 * 68 * @return distance between two character sequence 69 */ 70 public Integer getDistance() { 71 return distance; 72 } 73 74 /** 75 * Get the number of insertion needed to change one character sequence into another. 76 * 77 * @return insert character count 78 */ 79 public Integer getInsertCount() { 80 return insertCount; 81 } 82 83 /** 84 * Get the number of character deletion needed to change one character sequence to other. 85 * 86 * @return delete character count 87 */ 88 public Integer getDeleteCount() { 89 return deleteCount; 90 } 91 92 /** 93 * Get the number of character substitution needed to change one character sequence into another. 94 * 95 * @return substitute character count 96 */ 97 public Integer getSubstituteCount() { 98 return substituteCount; 99 } 100 101 @Override 102 public boolean equals(final Object o) { 103 if (this == o) { 104 return true; 105 } 106 if (o == null || getClass() != o.getClass()) { 107 return false; 108 } 109 final LevenshteinResults result = (LevenshteinResults) o; 110 return Objects.equals(distance, result.distance) && Objects.equals(insertCount, result.insertCount) 111 && Objects.equals(deleteCount, result.deleteCount) 112 && Objects.equals(substituteCount, result.substituteCount); 113 } 114 115 @Override 116 public int hashCode() { 117 return Objects.hash(distance, insertCount, deleteCount, substituteCount); 118 } 119 120 @Override 121 public String toString() { 122 return "Distance: " + distance + ", Insert: " + insertCount + ", Delete: " + deleteCount + ", Substitute: " 123 + substituteCount; 124 } 125 }