Skip to content
Java fuzzy string matching implementation of the well known Python's fuzzywuzzy algorithm. Fuzzy search for Java
Java Groovy Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
build Update to 1.2.0 Oct 29, 2018
diffutils Return index in result Mar 21, 2018
package Update to 1.2.0 Oct 29, 2018
src/me/xdrop/fuzzywuzzy Fixed Backwards compatibility Oct 30, 2018
test/me/xdrop/fuzzywuzzy Add contract test Oct 30, 2018
.gitignore
.travis.yml
LICENSE Switch to GPLv2 Nov 6, 2019
README.md Correct Gradle "installation" example Nov 13, 2018
header.txt
pom.xml Update to 1.2.0 Oct 29, 2018
update_versions.sh Add update versions script Sep 15, 2016

README.md

JavaWuzzy

Build Status Download

FuzzyWuzzy Java Implementation

Fuzzy string matching for java based on the FuzzyWuzzy Python algorithm. The algorithm uses Levenshtein distance to calculate similarity between strings.

I've personally needed to use this but all of the other Java implementations out there either had a crazy amount of dependencies, or simply did not output the correct results as the python one, so I've decided to properly re-implement this in Java. Enjoy!

  • No dependencies!
  • Includes implementation of the super-fast python-Levenshtein in Java!
  • Simple to use!
  • Lightweight!
  • Credits to the great folks at seatgeek for coming up with the algorithm (More here)

Installation

Maven Central

<dependency>
    <groupId>me.xdrop</groupId>
    <artifactId>fuzzywuzzy</artifactId>
    <version>1.2.0</version>
</dependency>

Gradle

repositories {
    jcenter()
}

dependencies {
    implementation 'me.xdrop:fuzzywuzzy:1.2.0'
}

Jar release

Download the latest release here and add to your classpath

Usage

Simple Ratio

FuzzySearch.ratio("mysmilarstring","myawfullysimilarstirng")
72

FuzzySearch.ratio("mysmilarstring","mysimilarstring")
97

Partial Ratio

FuzzySearch.partialRatio("similar", "somewhresimlrbetweenthisstring")
71

Token Sort Ratio

FuzzySearch.tokenSortPartialRatio("order words out of","  words out of order")
100
FuzzySearch.tokenSortRatio("order words out of","  words out of order")
100

Token Set Ratio

FuzzySearch.tokenSetRatio("fuzzy was a bear", "fuzzy fuzzy fuzzy bear")
100
FuzzySearch.tokenSetPartialRatio("fuzzy was a bear", "fuzzy fuzzy fuzzy bear")
100

Weighted Ratio

FuzzySearch.weightedRatio("The quick brown fox jimps ofver the small lazy dog", "the quick brown fox jumps over the small lazy dog")
97

Extract

// groovy

FuzzySearch.extractOne("cowboys", ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"])
(string: Dallas Cowboys, score: 90, index: 3)
FuzzySearch.extractTop("goolge", ["google", "bing", "facebook", "linkedin", "twitter", "googleplus", "bingnews", "plexoogl"], 3)
[(string: google, score: 83, index: 0), (string: googleplus, score: 63, index:5), (string: plexoogl, score: 43, index: 7)]
FuzzySearch.extractAll("goolge", ["google", "bing", "facebook", "linkedin", "twitter", "googleplus", "bingnews", "plexoogl"]);
[(string: google, score: 83, index: 0), (string: bing, score: 20, index: 1), (string: facebook, score: 29, index: 2), (string: linkedin, score: 29, index: 3), (string: twitter, score: 15, index: 4), (string: googleplus, score: 63, index: 5), (string: bingnews, score: 29, index: 6), (string: plexoogl, score: 43, index: 7)]
// score cutoff
FuzzySearch.extractAll("goolge", ["google", "bing", "facebook", "linkedin", "twitter", "googleplus", "bingnews", "plexoogl"], 40) 
[(string: google, score: 83, index: 0), (string: googleplus, score: 63, index: 5), (string: plexoogl, score: 43, index: 7)]
FuzzySearch.extractSorted("goolge", ["google", "bing", "facebook", "linkedin", "twitter", "googleplus", "bingnews", "plexoogl"]);
[(string: google, score: 83, index: 0), (string: googleplus, score: 63, index: 5), (string: plexoogl, score: 43, index: 7), (string: facebook, score: 29, index: 2), (string: linkedin, score: 29, index: 3), (string: bingnews, score: 29, index: 6), (string: bing, score: 20, index: 1), (string: twitter, score: 15, index: 4)]
// score cutoff
FuzzySearch.extractSorted("goolge", ["google", "bing", "facebook", "linkedin", "twitter", "googleplus", "bingnews", "plexoogl"], 3);
[(string: google, score: 83, index: 0), (string: googleplus, score: 63, index: 5), (string: plexoogl, score: 43, index: 7)]

Extract using any object

extractOne and related methods can receive Collection<T> and produce BoundExtractedResult<T>

List<Foo> foo = ...;
BoundExtractedResult<Foo> match = FuzzySearch.extractOne("cowboys", foo, x -> x.toString());
Foo matchFoo = match.getReferent();

Credits

  • seatgeek
  • Adam Cohen
  • David Necas (python-Levenshtein)
  • Mikko Ohtamaa (python-Levenshtein)
  • Antti Haapala (python-Levenshtein)
  • Tobias Burdow (burdoto)
You can’t perform that action at this time.