You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/01/14 14:11:08 UTC

[commons-text] branch master updated (c0a287a1 -> 0e6d86a5)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git


    from c0a287a1 Pick up checkstyle version from parent
     new 83e59ba1 Simpler internal name for singleton
     new 145b8516 Add and use a package-private singleton for RegexTokenizer
     new 9fdc137e Add and use a package-private singleton for CosineSimilarity
     new c4a35a18 Simpler internal name for singleton
     new 59b6954d Javadoc
     new 0612dce6 Add and use a package-private singleton for LongestCommonSubsequence
     new f848519c Add and use a package-private singleton for JaroWinklerSimilarity
     new 0e6d86a5 Add and use a package-private singleton for JaccardSimilarity

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/changes/changes.xml                                  |  7 ++++++-
 .../apache/commons/text/similarity/CosineDistance.java   | 16 +++-------------
 .../apache/commons/text/similarity/CosineSimilarity.java | 15 ++++++++++-----
 .../apache/commons/text/similarity/JaccardDistance.java  |  7 +------
 .../commons/text/similarity/JaccardSimilarity.java       |  5 +++++
 .../commons/text/similarity/JaroWinklerDistance.java     |  7 +------
 .../commons/text/similarity/JaroWinklerSimilarity.java   |  5 +++++
 .../text/similarity/LevenshteinDetailedDistance.java     |  6 +++---
 .../commons/text/similarity/LevenshteinDistance.java     |  6 +++---
 .../text/similarity/LongestCommonSubsequence.java        |  5 +++++
 .../similarity/LongestCommonSubsequenceDistance.java     |  7 +------
 .../apache/commons/text/similarity/RegexTokenizer.java   | 13 ++++++++++---
 .../commons/text/similarity/CosineSimilarityTest.java    | 14 ++++----------
 13 files changed, 57 insertions(+), 56 deletions(-)


[commons-text] 06/08: Add and use a package-private singleton for LongestCommonSubsequence

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 0612dce660cafc4c56f42cea1cff780d36b06d46
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 09:03:06 2023 -0500

    Add and use a package-private singleton for LongestCommonSubsequence
---
 src/changes/changes.xml                                            | 1 +
 .../apache/commons/text/similarity/LongestCommonSubsequence.java   | 5 +++++
 .../commons/text/similarity/LongestCommonSubsequenceDistance.java  | 7 +------
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b3d02cd0..c3b33d32 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -52,6 +52,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action issue="TEXT-221" type="fix" dev="aherbert" due-to="Remco Riswick">Fix Bundle-SymbolicName to use the package name org.apache.commons.text</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for RegexTokenizer.</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for CosineSimilarity.</action>
+    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for LongestCommonSubsequence.</action>
     <!-- ADD -->
     <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
diff --git a/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequence.java b/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequence.java
index aaf05900..b91f23c0 100644
--- a/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequence.java
+++ b/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequence.java
@@ -51,6 +51,11 @@ package org.apache.commons.text.similarity;
  */
 public class LongestCommonSubsequence implements SimilarityScore<Integer> {
 
+    /**
+     * Singleton instance.
+     */
+    static final LongestCommonSubsequence INSTANCE = new LongestCommonSubsequence();
+
     /**
      * An implementation of "ALG B" from Hirschberg's CACM '71 paper.
      * Assuming the first input sequence is of size <code>m</code> and the second input sequence is of size
diff --git a/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequenceDistance.java b/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequenceDistance.java
index 29745461..f5f5bcf9 100644
--- a/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequenceDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/LongestCommonSubsequenceDistance.java
@@ -36,11 +36,6 @@ package org.apache.commons.text.similarity;
  */
 public class LongestCommonSubsequenceDistance implements EditDistance<Integer> {
 
-    /**
-     * Object for calculating the longest common subsequence that we can then normalize in apply.
-     */
-    private final LongestCommonSubsequence longestCommonSubsequence = new LongestCommonSubsequence();
-
     /**
      * Calculates an edit distance between two {@code CharSequence}'s {@code left} and
      * {@code right} as: {@code left.length() + right.length() - 2 * LCS(left, right)}, where
@@ -58,7 +53,7 @@ public class LongestCommonSubsequenceDistance implements EditDistance<Integer> {
         if (left == null || right == null) {
             throw new IllegalArgumentException("Inputs must not be null");
         }
-        return left.length() + right.length() - 2 * longestCommonSubsequence.apply(left, right);
+        return left.length() + right.length() - 2 * LongestCommonSubsequence.INSTANCE.apply(left, right);
     }
 
 }


[commons-text] 04/08: Simpler internal name for singleton

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit c4a35a182f657f0517575723dc625a61117d1504
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 08:57:02 2023 -0500

    Simpler internal name for singleton
---
 .../apache/commons/text/similarity/LevenshteinDetailedDistance.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/apache/commons/text/similarity/LevenshteinDetailedDistance.java b/src/main/java/org/apache/commons/text/similarity/LevenshteinDetailedDistance.java
index 65ad03e9..1a281e26 100644
--- a/src/main/java/org/apache/commons/text/similarity/LevenshteinDetailedDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/LevenshteinDetailedDistance.java
@@ -32,9 +32,9 @@ import java.util.Arrays;
 public class LevenshteinDetailedDistance implements EditDistance<LevenshteinResults> {
 
     /**
-     * Default instance.
+     * Singleton instance.
      */
-    private static final LevenshteinDetailedDistance DEFAULT_INSTANCE = new LevenshteinDetailedDistance();
+    private static final LevenshteinDetailedDistance INSTANCE = new LevenshteinDetailedDistance();
 
     /**
      * Finds count for each of the three [insert, delete, substitute] operations
@@ -138,7 +138,7 @@ public class LevenshteinDetailedDistance implements EditDistance<LevenshteinResu
      * @return The default instace
      */
     public static LevenshteinDetailedDistance getDefaultInstance() {
-        return DEFAULT_INSTANCE;
+        return INSTANCE;
     }
 
     /**


[commons-text] 08/08: Add and use a package-private singleton for JaccardSimilarity

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 0e6d86a576e8835765e8924f9f3f7f00f36b05e4
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 09:08:20 2023 -0500

    Add and use a package-private singleton for JaccardSimilarity
---
 src/changes/changes.xml                                            | 3 ++-
 .../java/org/apache/commons/text/similarity/JaccardDistance.java   | 7 +------
 .../java/org/apache/commons/text/similarity/JaccardSimilarity.java | 5 +++++
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index cb0067d8..30a10e2c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -47,13 +47,14 @@ The <action> type attribute can be add,update,fix,remove.
   <release version="1.10.1" date="20YY-MM-DD" description="Release 1.10.1. Requires Java 8.">
     <!-- FIX -->
     <action issue="TEXT-219" type="fix" dev="aherbert" due-to="Jaap Sperling">Fix StringTokenizer.getTokenList to return an independent modifiable list</action>
-    <action                  type="fix" dev="aherbert" due-to="James Nord">Fix javadoc for StringEscapeUtils.escapeHtml4 #382</action>
+    <action                  type="fix" dev="aherbert" due-to="James Nord">Fix Javadoc for StringEscapeUtils.escapeHtml4 #382</action>
     <action                  type="fix" dev="ggregory" due-to="Pavel Belousov, Gary Gregory">TextStringBuidler#hashCode() allocates a String on each call #387.</action>
     <action issue="TEXT-221" type="fix" dev="aherbert" due-to="Remco Riswick">Fix Bundle-SymbolicName to use the package name org.apache.commons.text</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for RegexTokenizer.</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for CosineSimilarity.</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for LongestCommonSubsequence.</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for JaroWinklerSimilarity.</action>
+    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for JaccardSimilarity.</action>
     <!-- ADD -->
     <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
diff --git a/src/main/java/org/apache/commons/text/similarity/JaccardDistance.java b/src/main/java/org/apache/commons/text/similarity/JaccardDistance.java
index fe956b20..eba0895a 100644
--- a/src/main/java/org/apache/commons/text/similarity/JaccardDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/JaccardDistance.java
@@ -30,11 +30,6 @@ package org.apache.commons.text.similarity;
  */
 public class JaccardDistance implements EditDistance<Double> {
 
-    /**
-     * We normalize the jaccardSimilarity for the purpose of computing the distance.
-     */
-    private final JaccardSimilarity jaccardSimilarity = new JaccardSimilarity();
-
     /**
      * Calculates Jaccard distance of two set character sequence passed as
      * input. Calculates Jaccard similarity and returns the complement of it.
@@ -50,6 +45,6 @@ public class JaccardDistance implements EditDistance<Double> {
         if (left == null || right == null) {
             throw new IllegalArgumentException("Input cannot be null");
         }
-        return 1.0 - jaccardSimilarity.apply(left, right).doubleValue();
+        return 1.0 - JaccardSimilarity.INSTANCE.apply(left, right).doubleValue();
     }
 }
diff --git a/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java b/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java
index 4f291392..9b77d255 100644
--- a/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java
+++ b/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java
@@ -33,6 +33,11 @@ import java.util.Set;
  */
 public class JaccardSimilarity implements SimilarityScore<Double> {
 
+    /**
+     * Singleton instance.
+     */
+    static final JaccardSimilarity INSTANCE = new JaccardSimilarity();
+
     /**
      * Calculates Jaccard Similarity of two set character sequence passed as
      * input.


[commons-text] 02/08: Add and use a package-private singleton for RegexTokenizer

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 145b85161e6f62a02866ee065631704433ffe300
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 08:49:04 2023 -0500

    Add and use a package-private singleton for RegexTokenizer
---
 src/changes/changes.xml                                     |  1 +
 .../org/apache/commons/text/similarity/CosineDistance.java  |  9 ++-------
 .../org/apache/commons/text/similarity/RegexTokenizer.java  | 13 ++++++++++---
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8465d66b..6b5bf7b9 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -50,6 +50,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                  type="fix" dev="aherbert" due-to="James Nord">Fix javadoc for StringEscapeUtils.escapeHtml4 #382</action>
     <action                  type="fix" dev="ggregory" due-to="Pavel Belousov, Gary Gregory">TextStringBuidler#hashCode() allocates a String on each call #387.</action>
     <action issue="TEXT-221" type="fix" dev="aherbert" due-to="Remco Riswick">Fix Bundle-SymbolicName to use the package name org.apache.commons.text</action>
+    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for RegexTokenizer.</action>
     <!-- ADD -->
     <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
diff --git a/src/main/java/org/apache/commons/text/similarity/CosineDistance.java b/src/main/java/org/apache/commons/text/similarity/CosineDistance.java
index 5c9a24c6..1544018b 100644
--- a/src/main/java/org/apache/commons/text/similarity/CosineDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/CosineDistance.java
@@ -35,11 +35,6 @@ import java.util.Map;
  */
 public class CosineDistance implements EditDistance<Double> {
 
-    /**
-     * Tokenizer used to convert the character sequence into a vector.
-     */
-    private final Tokenizer<CharSequence> tokenizer = new RegexTokenizer();
-
     /**
      * Cosine similarity.
      */
@@ -47,8 +42,8 @@ public class CosineDistance implements EditDistance<Double> {
 
     @Override
     public Double apply(final CharSequence left, final CharSequence right) {
-        final CharSequence[] leftTokens = tokenizer.tokenize(left);
-        final CharSequence[] rightTokens = tokenizer.tokenize(right);
+        final CharSequence[] leftTokens = RegexTokenizer.INSTANCE.tokenize(left);
+        final CharSequence[] rightTokens = RegexTokenizer.INSTANCE.tokenize(right);
 
         final Map<CharSequence, Integer> leftVector = Counter.of(leftTokens);
         final Map<CharSequence, Integer> rightVector = Counter.of(rightTokens);
diff --git a/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java b/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java
index 213e01c7..be64f849 100644
--- a/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java
+++ b/src/main/java/org/apache/commons/text/similarity/RegexTokenizer.java
@@ -26,9 +26,11 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 
 /**
- * A simple word tokenizer that utilizes regex to find words. It applies a regex
- * {@code (\w)+} over the input text to extract words from a given character
- * sequence.
+ * A simple word {@link Tokenizer} that utilizes a regex to find words. It applies a regex {@code (\w)+} over the input text to extract words from a given
+ * character sequence.
+ * <p>
+ * Instances of this class are immutable and are safe for use by multiple concurrent threads.
+ * </p>
  *
  * @since 1.0
  */
@@ -37,6 +39,11 @@ final class RegexTokenizer implements Tokenizer<CharSequence> {
     /** The whitespace pattern. */
     private static final Pattern PATTERN = Pattern.compile("(\\w)+");
 
+    /**
+     * Singleton instance.
+     */
+    static final RegexTokenizer INSTANCE = new RegexTokenizer();
+
     /**
      * {@inheritDoc}
      *


[commons-text] 05/08: Javadoc

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 59b6954dc5909788949416e068433605db1c50f1
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 08:57:26 2023 -0500

    Javadoc
---
 .../java/org/apache/commons/text/similarity/LevenshteinDistance.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java b/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java
index 7d27d5e0..570b45ed 100644
--- a/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java
@@ -36,7 +36,7 @@ import java.util.Arrays;
 public class LevenshteinDistance implements EditDistance<Integer> {
 
     /**
-     * Default instance.
+     * Singleton instance.
      */
     private static final LevenshteinDistance INSTANCE = new LevenshteinDistance();
 


[commons-text] 03/08: Add and use a package-private singleton for CosineSimilarity

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 9fdc137eafff15a83bf8ca071e9322a7e1452654
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 08:56:40 2023 -0500

    Add and use a package-private singleton for CosineSimilarity
---
 src/changes/changes.xml                                   |  1 +
 .../apache/commons/text/similarity/CosineDistance.java    |  7 +------
 .../apache/commons/text/similarity/CosineSimilarity.java  | 15 ++++++++++-----
 .../commons/text/similarity/CosineSimilarityTest.java     | 14 ++++----------
 4 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 6b5bf7b9..b3d02cd0 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -51,6 +51,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                  type="fix" dev="ggregory" due-to="Pavel Belousov, Gary Gregory">TextStringBuidler#hashCode() allocates a String on each call #387.</action>
     <action issue="TEXT-221" type="fix" dev="aherbert" due-to="Remco Riswick">Fix Bundle-SymbolicName to use the package name org.apache.commons.text</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for RegexTokenizer.</action>
+    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for CosineSimilarity.</action>
     <!-- ADD -->
     <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
diff --git a/src/main/java/org/apache/commons/text/similarity/CosineDistance.java b/src/main/java/org/apache/commons/text/similarity/CosineDistance.java
index 1544018b..92c71f1c 100644
--- a/src/main/java/org/apache/commons/text/similarity/CosineDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/CosineDistance.java
@@ -35,11 +35,6 @@ import java.util.Map;
  */
 public class CosineDistance implements EditDistance<Double> {
 
-    /**
-     * Cosine similarity.
-     */
-    private final CosineSimilarity cosineSimilarity = new CosineSimilarity();
-
     @Override
     public Double apply(final CharSequence left, final CharSequence right) {
         final CharSequence[] leftTokens = RegexTokenizer.INSTANCE.tokenize(left);
@@ -47,7 +42,7 @@ public class CosineDistance implements EditDistance<Double> {
 
         final Map<CharSequence, Integer> leftVector = Counter.of(leftTokens);
         final Map<CharSequence, Integer> rightVector = Counter.of(rightTokens);
-        final double similarity = cosineSimilarity.cosineSimilarity(leftVector, rightVector);
+        final double similarity = CosineSimilarity.INSTANCE.cosineSimilarity(leftVector, rightVector);
         return 1.0 - similarity;
     }
 
diff --git a/src/main/java/org/apache/commons/text/similarity/CosineSimilarity.java b/src/main/java/org/apache/commons/text/similarity/CosineSimilarity.java
index edd873c5..54b428f3 100644
--- a/src/main/java/org/apache/commons/text/similarity/CosineSimilarity.java
+++ b/src/main/java/org/apache/commons/text/similarity/CosineSimilarity.java
@@ -21,18 +21,23 @@ import java.util.Map;
 import java.util.Set;
 
 /**
- * Measures the Cosine similarity of two vectors of an inner product space and
- * compares the angle between them.
- *
+ * Measures the Cosine similarity of two vectors of an inner product space and compares the angle between them.
+ * <p>
+ * For further explanation about the Cosine Similarity, refer to http://en.wikipedia.org/wiki/Cosine_similarity.
+ * </p>
  * <p>
- * For further explanation about the Cosine Similarity, refer to
- * http://en.wikipedia.org/wiki/Cosine_similarity.
+ * Instances of this class are immutable and are safe for use by multiple concurrent threads.
  * </p>
  *
  * @since 1.0
  */
 public class CosineSimilarity {
 
+    /**
+     * Singleton instance.
+     */
+    static final CosineSimilarity INSTANCE = new CosineSimilarity();
+
     /**
      * Calculates the cosine similarity for two given vectors.
      *
diff --git a/src/test/java/org/apache/commons/text/similarity/CosineSimilarityTest.java b/src/test/java/org/apache/commons/text/similarity/CosineSimilarityTest.java
index ffc82468..8d968e89 100644
--- a/src/test/java/org/apache/commons/text/similarity/CosineSimilarityTest.java
+++ b/src/test/java/org/apache/commons/text/similarity/CosineSimilarityTest.java
@@ -26,42 +26,36 @@ import java.util.Map;
 
 import org.junit.jupiter.api.Test;
 
-
 public class CosineSimilarityTest {
 
     @Test
     public void testCosineSimilarityReturningDoubleWhereByteValueIsZero() {
-        final CosineSimilarity cosineSimilarity = new CosineSimilarity();
         final Map<CharSequence, Integer> hashMap = new HashMap<>();
-
-        assertThat(cosineSimilarity.cosineSimilarity(hashMap, hashMap)).isEqualTo(0.0, within(0.01));
+        assertThat(CosineSimilarity.INSTANCE.cosineSimilarity(hashMap, hashMap)).isEqualTo(0.0, within(0.01));
     }
 
     @Test
     public void testCosineSimilarityThrowsIllegalArgumentException() {
         assertThatIllegalArgumentException().isThrownBy(() -> {
-            final CosineSimilarity cosineSimilarity = new CosineSimilarity();
             final Map<CharSequence, Integer> map = new HashMap<>();
-            cosineSimilarity.cosineSimilarity(map, null);
+            CosineSimilarity.INSTANCE.cosineSimilarity(map, null);
         });
     }
 
     @Test
     public void testCosineSimilarityWithNonEmptyMap() {
-        final CosineSimilarity cosineSimilarity = new CosineSimilarity();
         final Map<CharSequence, Integer> hashMap = new HashMap<>();
         final Integer integer = -397;
         hashMap.put("3J/$3.L", integer);
         final Map<CharSequence, Integer> hashMapTwo = new HashMap<>();
 
-        assertThat(cosineSimilarity.cosineSimilarity(hashMap, hashMapTwo)).isEqualTo(0.0, within(0.01));
+        assertThat(CosineSimilarity.INSTANCE.cosineSimilarity(hashMap, hashMapTwo)).isEqualTo(0.0, within(0.01));
     }
 
     @Test
     public void testCosineSimilarityWithNull() {
         assertThatIllegalArgumentException().isThrownBy(() -> {
-            final CosineSimilarity cosineSimilarity = new CosineSimilarity();
-            cosineSimilarity.cosineSimilarity(null, null);
+            CosineSimilarity.INSTANCE.cosineSimilarity(null, null);
         });
     }
 


[commons-text] 07/08: Add and use a package-private singleton for JaroWinklerSimilarity

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit f848519ca2230f096b074f193d99c39f02cfa9df
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 09:05:37 2023 -0500

    Add and use a package-private singleton for JaroWinklerSimilarity
---
 src/changes/changes.xml                                            | 1 +
 .../org/apache/commons/text/similarity/JaroWinklerDistance.java    | 7 +------
 .../org/apache/commons/text/similarity/JaroWinklerSimilarity.java  | 5 +++++
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c3b33d32..cb0067d8 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -53,6 +53,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for RegexTokenizer.</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for CosineSimilarity.</action>
     <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for LongestCommonSubsequence.</action>
+    <action                  type="fix" dev="ggregory" due-to="Gary Gregory">Add and use a package-private singleton for JaroWinklerSimilarity.</action>
     <!-- ADD -->
     <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
diff --git a/src/main/java/org/apache/commons/text/similarity/JaroWinklerDistance.java b/src/main/java/org/apache/commons/text/similarity/JaroWinklerDistance.java
index 1d13c280..924013b6 100644
--- a/src/main/java/org/apache/commons/text/similarity/JaroWinklerDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/JaroWinklerDistance.java
@@ -44,11 +44,6 @@ public class JaroWinklerDistance implements EditDistance<Double> {
         return JaroWinklerSimilarity.matches(first, second);
     }
 
-    /**
-     * Jaro Winkler similarity object used to calculate the distance (1 - similarity).
-     */
-    private final JaroWinklerSimilarity similarity = new JaroWinklerSimilarity();
-
     /**
      * Computes the Jaro Winkler Distance between two character sequences.
      *
@@ -88,6 +83,6 @@ public class JaroWinklerDistance implements EditDistance<Double> {
             throw new IllegalArgumentException("CharSequences must not be null");
         }
 
-        return 1 - similarity.apply(left, right);
+        return 1 - JaroWinklerSimilarity.INSTANCE.apply(left, right);
     }
 }
diff --git a/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java b/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java
index 3659d4d9..b2e27315 100644
--- a/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java
+++ b/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java
@@ -43,6 +43,11 @@ import org.apache.commons.lang3.StringUtils;
  */
 public class JaroWinklerSimilarity implements SimilarityScore<Double> {
 
+    /**
+     * Singleton instance.
+     */
+    static final JaroWinklerSimilarity INSTANCE = new JaroWinklerSimilarity();
+
     /**
      * This method returns the Jaro-Winkler string matches, half transpositions, prefix array.
      *


[commons-text] 01/08: Simpler internal name for singleton

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-text.git

commit 83e59ba1d132a228b6ba51fba1d07b38da98265c
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 14 08:40:14 2023 -0500

    Simpler internal name for singleton
---
 .../java/org/apache/commons/text/similarity/LevenshteinDistance.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java b/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java
index 83b1bf3a..7d27d5e0 100644
--- a/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java
+++ b/src/main/java/org/apache/commons/text/similarity/LevenshteinDistance.java
@@ -38,7 +38,7 @@ public class LevenshteinDistance implements EditDistance<Integer> {
     /**
      * Default instance.
      */
-    private static final LevenshteinDistance DEFAULT_INSTANCE = new LevenshteinDistance();
+    private static final LevenshteinDistance INSTANCE = new LevenshteinDistance();
 
     /**
      * Gets the default instance.
@@ -46,7 +46,7 @@ public class LevenshteinDistance implements EditDistance<Integer> {
      * @return The default instance
      */
     public static LevenshteinDistance getDefaultInstance() {
-        return DEFAULT_INSTANCE;
+        return INSTANCE;
     }
 
     /**