{"id":24448712,"url":"https://github.com/universal-automata/liblevenshtein-java","last_synced_at":"2025-04-13T00:11:14.554Z","repository":{"id":15518477,"uuid":"18252806","full_name":"universal-automata/liblevenshtein-java","owner":"universal-automata","description":"Various utilities regarding Levenshtein transducers. (Java)","archived":false,"fork":false,"pushed_at":"2021-12-20T18:58:10.000Z","size":6113,"stargazers_count":57,"open_issues_count":29,"forks_count":20,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-26T18:08:17.574Z","etag":null,"topics":["approximate-string-matching","bioinformatics","computational-biology","computer-science","data-science","dictionary","distance-metric","edit-distance","finite-state-automata","finite-state-transducer","fuzzy-search","genomics","information-retrieval","levenshtein-automata","levenshtein-distance","machine-learning","natural-language-processing","search-engine","spelling-correction","universal-automata"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/universal-automata.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-29T22:59:08.000Z","updated_at":"2025-01-14T03:47:21.000Z","dependencies_parsed_at":"2022-08-25T13:00:29.435Z","dependency_job_id":null,"html_url":"https://github.com/universal-automata/liblevenshtein-java","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/universal-automata%2Fliblevenshtein-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/universal-automata%2Fliblevenshtein-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/universal-automata%2Fliblevenshtein-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/universal-automata%2Fliblevenshtein-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/universal-automata","download_url":"https://codeload.github.com/universal-automata/liblevenshtein-java/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248647297,"owners_count":21139086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["approximate-string-matching","bioinformatics","computational-biology","computer-science","data-science","dictionary","distance-metric","edit-distance","finite-state-automata","finite-state-transducer","fuzzy-search","genomics","information-retrieval","levenshtein-automata","levenshtein-distance","machine-learning","natural-language-processing","search-engine","spelling-correction","universal-automata"],"created_at":"2025-01-21T00:34:05.239Z","updated_at":"2025-04-13T00:11:14.534Z","avatar_url":"https://github.com/universal-automata.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# liblevenshtein\n\n## Java\n\n### A library for generating Finite State Transducers based on Levenshtein Automata.\n\n[![Maven Central][maven-badge]][maven-link]\n[![Artifactory][artifactory-badge]][artifactory-link]\n[![License][license-badge]][license-link]\n[![Build Status][travis-ci-badge]][travis-ci-link]\n[![Coverage Status][coveralls-badge]][coveralls-link]\n[![Coverity Scan Build Status][coverity-badge]][coverity-link]\n[![Dependency Status][versioneye-badge]][versioneye-link]\n[![Gitter][gitter-badge]][gitter-channel]\n[![Bountysource][bountysource-badge]][bountysource-link]\n\nLevenshtein transducers accept a query term and return all terms in a\ndictionary that are within n spelling errors away from it. They constitute a\nhighly-efficient (space _and_ time) class of spelling correctors that work very\nwell when you do not require context while making suggestions.  Forget about\nperforming a linear scan over your dictionary to find all terms that are\nsufficiently-close to the user's query, using a quadratic implementation of the\n[Levenshtein distance][wikipedia-levenshtein-distance] or\n[Damerau-Levenshtein distance][wikipedia-damerau-levenshtein-distance], these\nbabies find _all_ the terms from your dictionary in linear time _on the length\nof the query term_ (not on the size of the dictionary, on the length of the\nquery term).\n\nIf you need context, then take the candidates generated by the transducer as a\nstarting place, and plug them into whatever model you're using for context (such\nas by selecting the sequence of terms that have the greatest probability of\nappearing together).\n\nFor a quick demonstration, please visit the [Github Page, here][live-demo].\nThere's also a command-line interface, [liblevenshtein-java-cli][java-cli].\nPlease see its [README.md][java-cli-readme] for acquisition and usage information.\n\nThe library is currently written in Java, CoffeeScript, and JavaScript, but I\nwill be porting it to other languages, soon.  If you have a specific language\nyou would like to see it in, or package-management system you would like it\ndeployed to, let me know.\n\n[![][bintray-watch-img]][bintray-watch-link]\n\n[![Twitter Follow][twitter-badge]][twitter-link]\n\n### Branches\n\n|                            Branch | Description                            |\n| ---------------------------------:|:-------------------------------------- |\n|           [master][master-branch] | Latest, development source             |\n|         [release][release-branch] | Latest, release source                 |\n| [release-3.x][release-branch-3.x] | Latest, release source for version 3.x |\n| [release-2.x][release-branch-2.x] | Latest, release source for version 2.x |\n\n### Project Management\n\nIssues are managed on [waffle.io][waffle-io-link].  Below you will find a graph\non the rate at which I've been closing them.\n\n[![Throughput Graph][waffle-io-throughput-graph]][waffle-io-throughput-link]\n\n[![Tasks ready to be worked on][waffle-io-ready-badge]][waffle-io-link]\n[![Tasks being worked on][waffle-io-in-progress-badge]][waffle-io-link]\n\nPlease visit [Bountysource][bountysource-link] to pledge your support for\nongoing issues.\n\n### Documentation\n\nWhen it comes to documentation, you have several options:\n- [Wiki][wiki]\n- [Javadoc][javadoc]\n- [Source Code][tagged-source]\n\n### Basic Usage:\n\n### Minimum Java Version\n\nliblevenshtein has been developed against Java \u0026ge; 1.8.\nIt will not work with prior versions.\n\n#### Installation\n\n##### Latest, Development Release\n\nAdd a Maven dependency on [Artifactory][artifactory-repo].  For example, in a\n[Gradle][gradle-home] project, you would modify your `repositories` as follows:\n\n```groovy\nrepositories {\n  maven {\n    url 'https://oss.jfrog.org/artifactory/oss-release-local'\n  }\n}\n```\n\n##### Latest, Stable Release\n\nAdd a Maven dependency on one of the following:\n- [Maven Central][maven-repo]\n- [JCenter][jcenter-repo]\n- [Bintray][bintray-repo]\n\n##### Maven\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.universal-automata\u003c/groupId\u003e\n  \u003cartifactId\u003eliblevenshtein\u003c/artifactId\u003e\n  \u003cversion\u003e3.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n##### Apache Buildr\n\n```ruby\n'com.github.universal-automata:liblevenshtein:jar:3.0.0'\n```\n\n##### Apache Ivy\n\n```xml\n\u003cdependency org=\"com.github.universal-automata\" name=\"liblevenshtein\" rev=\"3.0.0\" /\u003e\n```\n\n##### Groovy Grape\n\n```groovy\n@Grapes(\n@Grab(group='com.github.universal-automata', module='liblevenshtein', version='3.0.0')\n)\n```\n\n##### Gradle / Grails\n\n```groovy\ncompile 'com.github.universal-automata:liblevenshtein:3.0.0'\n```\n\n##### Scala SBT\n\n```scala\nlibraryDependencies += \"com.github.universal-automata\" % \"liblevenshtein\" % \"3.0.0\"\n```\n\n##### Leiningen\n\n```clojure\n[com.github.universal-automata/liblevenshtein \"3.0.0\"]\n```\n\n##### Git\n\n```\n% git clone --progress git@github.com:universal-automata/liblevenshtein-java.git\nCloning into 'liblevenshtein-java'...\nremote: Counting objects: 8117, done.        \nremote: Compressing objects: 100% (472/472), done.        \nremote: Total 8117 (delta 352), reused 0 (delta 0), pack-reused 7619        \nReceiving objects: 100% (8117/8117), 5.52 MiB | 289.00 KiB/s, done.\nResolving deltas: 100% (5366/5366), done.\nChecking connectivity... done.\n\n% cd liblevenshtein-java\n% git pull --progress\nAlready up-to-date.\n\n% git fetch --progress --tags\n% git checkout --progress 3.0.0\nNote: checking out '3.0.0'.\n\nYou are in 'detached HEAD' state. You can look around, make experimental\nchanges and commit them, and you can discard any commits you make in this\nstate without impacting any branches by performing another checkout.\n\nIf you want to create a new branch to retain commits you create, you may\ndo so (now or later) by using -b with the checkout command again. Example:\n\n  git checkout -b \u003cnew-branch-name\u003e\n\nHEAD is now at 4f0f172... pushd and popd silently\n\n% git submodule init\n% git submodule update\n\n```\n\n### Usage\n\nLet's say you have the following content in a plain text file called,\n[top-20-most-common-english-words.txt][top-20-most-common-english-words.txt]\n(note that the file has one term per line):\n\n```\nthe\nbe\nto\nof\nand\na\nin\nthat\nhave\nI\nit\nfor\nnot\non\nwith\nhe\nas\nyou\ndo\nat\n```\n\nThe following provides you a way to query its content:\n\n```java\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\n\nimport com.github.liblevenshtein.collection.dictionary.SortedDawg;\nimport com.github.liblevenshtein.serialization.PlainTextSerializer;\nimport com.github.liblevenshtein.serialization.ProtobufSerializer;\nimport com.github.liblevenshtein.serialization.Serializer;\nimport com.github.liblevenshtein.transducer.Algorithm;\nimport com.github.liblevenshtein.transducer.Candidate;\nimport com.github.liblevenshtein.transducer.ITransducer;\nimport com.github.liblevenshtein.transducer.factory.TransducerBuilder;\n\n// ...\n\nfinal SortedDawg dictionary;\nfinal Path dictionaryPath =\n  Paths.get(\"/path/to/top-20-most-common-english-words.txt\");\ntry (final InputStream stream = Files.newInputStream(dictionaryPath)) {\n  // The PlainTextSerializer constructor accepts an optional boolean specifying\n  // whether the dictionary is already sorted lexicographically, in ascending\n  // order.  If it is sorted, then passing true will optimize the construction\n  // of the dictionary; you may pass false whether the dictionary is sorted or\n  // not (this is the default and safest behavior if you don't know whether the\n  // dictionary is sorted).\n  final Serializer serializer = new PlainTextSerializer(false);\n  dictionary = serializer.deserialize(SortedDawg.class, stream);\n}\n\nfinal ITransducer\u003cCandidate\u003e transducer = new TransducerBuilder()\n  .dictionary(dictionary)\n  .algorithm(Algorithm.TRANSPOSITION)\n  .defaultMaxDistance(2)\n  .includeDistance(true)\n  .build();\n\nfor (final String queryTerm : new String[] {\"foo\", \"bar\"}) {\n  System.out.println(\n    \"+-------------------------------------------------------------------------------\");\n  System.out.printf(\"| Spelling Candidates for Query Term: \\\"%s\\\"%n\", queryTerm);\n  System.out.println(\n    \"+-------------------------------------------------------------------------------\");\n  for (final Candidate candidate : transducer.transduce(queryTerm)) {\n    System.out.printf(\"| d(\\\"%s\\\", \\\"%s\\\") = [%d]%n\",\n      queryTerm,\n      candidate.term(),\n      candidate.distance());\n  }\n}\n\n// +-------------------------------------------------------------------------------\n// | Spelling Candidates for Query Term: \"foo\"\n// +-------------------------------------------------------------------------------\n// | d(\"foo\", \"do\") = [2]\n// | d(\"foo\", \"of\") = [2]\n// | d(\"foo\", \"on\") = [2]\n// | d(\"foo\", \"to\") = [2]\n// | d(\"foo\", \"for\") = [1]\n// | d(\"foo\", \"not\") = [2]\n// | d(\"foo\", \"you\") = [2]\n// +-------------------------------------------------------------------------------\n// | Spelling Candidates for Query Term: \"bar\"\n// +-------------------------------------------------------------------------------\n// | d(\"bar\", \"a\") = [2]\n// | d(\"bar\", \"as\") = [2]\n// | d(\"bar\", \"at\") = [2]\n// | d(\"bar\", \"be\") = [2]\n// | d(\"bar\", \"for\") = [2]\n\n// ...\n```\n\nIf you want to serialize your dictionary to a format that's easy to read later,\ndo the following:\n\n```java\nfinal Path serializedDictionaryPath =\n  Paths.get(\"/path/to/top-20-most-common-english-words.protobuf.bytes\");\ntry (final OutputStream stream = Files.newOutputStream(serializedDictionaryPath)) {\n  final Serializer serializer = new ProtobufSerializer();\n  serializer.serialize(dictionary, stream);\n}\n```\n\nThen, you can read the dictionary later, in much the same way you read the plain\ntext version:\n\n```java\nfinal SortedDawg deserializedDictionary;\ntry (final InputStream stream = Files.newInputStream(serializedDictionaryPath)) {\n  final Serializer serializer = new ProtobufSerializer();\n  deserializedDictionary = serializer.deserialize(SortedDawg.class, stream);\n}\n```\n\nSerialization is not restricted to dictionaries, you may also (de)serialize\ntransducers.\n\nPlease see the [wiki][wiki] for more details.\n\n### Reference\n\nThis library is based largely on the work of\n[Stoyan Mihov][stoyan-mihov], [Klaus Schulz][klaus-schulz], and\nPetar Nikolaev Mitankin:\n[Fast String Correction with Levenshtein-Automata][fast-string-correction-2002].\nFor more information, please see the [wiki][wiki].\n\n[top-20-most-common-english-words.txt]: https://raw.githubusercontent.com/universal-automata/liblevenshtein-java/3.0.0/src/test/resources/top-20-most-common-english-words.txt \"top-20-most-common-english-words.txt\"\n\n[artifactory-badge]: https://img.shields.io/badge/artifactory-v3.0.0-brightgreen.svg?style=flat\n[artifactory-link]: https://oss.jfrog.org/artifactory/webapp/#/artifacts/browse/tree/General/oss-release-local/com/github/universal-automata/liblevenshtein/3.0.0 \"Latest, development release (Artifactory)\"\n[bintray-badge]: https://img.shields.io/bintray/v/universal-automata/liblevenshtein/liblevenshtein-java.svg?style=flat\n[bintray-link]: https://bintray.com/universal-automata/liblevenshtein/liblevenshtein-java/_latestVersion \"Latest, stable release (Bintray)\"\n[bintray-watch-img]: https://www.bintray.com/docs/images/bintray_badge_color.png\n[bintray-watch-link]: https://bintray.com/universal-automata/liblevenshtein/liblevenshtein-java/view?source=watch 'Get automatic notifications about new \"liblevenshtein-java\" versions'\n[bountysource-badge]: https://img.shields.io/bountysource/team/universal-automata/activity.svg?style=flat\n[bountysource-link]: https://www.bountysource.com/teams/universal-automata \"Create and pledge bounties\"\n[coveralls-badge]: https://coveralls.io/repos/github/universal-automata/liblevenshtein-java/badge.svg?branch=master\n[coveralls-link]: https://coveralls.io/github/universal-automata/liblevenshtein-java?branch=master \"Unit test, code coverage\"\n[coverity-badge]: https://img.shields.io/coverity/scan/8476.svg\n[coverity-link]: https://scan.coverity.com/projects/universal-automata-liblevenshtein-java \"Static code analysis\"\n[github-tag-badge]: https://img.shields.io/github/tag/universal-automata/liblevenshtein-java.svg\n[github-tag-link]: https://github.com/universal-automata/liblevenshtein-java/tags \"Latest, source download\"\n[gitter-badge]: https://img.shields.io/gitter/room/universal-automata/liblevenshtein-java.svg?style=flat\n[gitter-channel]: https://gitter.im/universal-automata/liblevenshtein-java?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge \"Gitter channel (liblevenshtein-java)\"\n[license-badge]: https://img.shields.io/github/license/universal-automata/liblevenshtein-java.svg\n[license-link]: https://raw.githubusercontent.com/universal-automata/liblevenshtein-java/master/LICENSE \"MIT Licence\"\n[maven-badge]: https://img.shields.io/maven-central/v/com.github.universal-automata/liblevenshtein.svg\n[maven-link]: http://search.maven.org/#artifactdetails%7Ccom.github.universal-automata%7Cliblevenshtein%7C3.0.0%7C \"Latest, stable release (Maven Central)\"\n[maven-refs-badge]: https://www.versioneye.com/java/com.github.universal-automata:liblevenshtein/reference_badge.svg\n[maven-refs-link]: https://www.versioneye.com/java/com.github.universal-automata:liblevenshtein/references\n[travis-ci-badge]: https://travis-ci.org/universal-automata/liblevenshtein-java.svg?branch=master\n[travis-ci-link]: https://travis-ci.org/universal-automata/liblevenshtein-java \"Build status\"\n[versioneye-badge]: https://www.versioneye.com/user/projects/570345d4fcd19a0051853d99/badge.svg\n[versioneye-link]: https://www.versioneye.com/user/projects/570345d4fcd19a0051853d99 \"Dependency updates\"\n\n[waffle-io-ready-badge]: https://badge.waffle.io/universal-automata/liblevenshtein-java.png?label=ready\u0026title=Ready\n[waffle-io-in-progress-badge]: https://badge.waffle.io/universal-automata/liblevenshtein-java.png?label=in%20progress\u0026title=In%20Progress\n[waffle-io-throughput-graph]: https://graphs.waffle.io/universal-automata/liblevenshtein-java/throughput.svg\n[waffle-io-throughput-link]: https://waffle.io/universal-automata/liblevenshtein-java/metrics/throughput\n[waffle-io-link]: https://waffle.io/universal-automata/liblevenshtein-java \"Project planner\"\n\n[twitter-badge]: https://img.shields.io/twitter/follow/liblevenshtein.svg?style=social\u0026label=Twitter\n[twitter-link]: https://twitter.com/liblevenshtein \"Universal Automata (@liblevenshtein)\"\n\n[liblevenshtein-java][github-repo] is maintained by[@dylon][github-author] ([dylon.devo+liblevenshtein-java@gmail.com][github-email])\n\n[coursera-automata]: https://class.coursera.org/automata \"Jeffrey Ullman (Coursera)\"\n[coursera-compilers]: https://class.coursera.org/compilers \"Alex Aiken (Coursera)\"\n[coursera-nlp]: https://class.coursera.org/nlp \"Dan Jurafsky and Chris Manning (Coursera)\"\n[damn-cool-algos-levenshtein-automata-2010]: http://blog.notdot.net/2010/07/Damn-Cool-Algorithms-Levenshtein-Automata \"Nick Johnson (2010)\"\n[dict-compress-dawg-2011]: http://stevehanov.ca/blog/index.php?id=115 \"Steve Hanov (2011)\"\n[fast-easy-correct-trie-2011]: http://stevehanov.ca/blog/index.php?id=114 \"Steve Hanov (2011)\"\n[fast-string-correction-2002]: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.16.652 \"Klaus Schulz and Stoyan Mihov (2002)\"\n[incremental-construction-dawg-2000]: http://dl.acm.org/citation.cfm?id=971842 \"Jan Daciuk, Bruce W. Watson, Stoyan Mihov, and Richard E. Watson (2000)\"\n[klaus-schulz]: http://www.cis.uni-muenchen.de/people/schulz.html \"Klaus Schulz\"\n[lucene-fuzzy-2011]: http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html \"Michael McCandless (2011)\"\n[moman]: https://sites.google.com/site/rrettesite/moman \"Moman\"\n[rao-li]: http://www.usca.edu/math/~mathdept/rli/ \"Dr. Rao Li\"\n[stoyan-mihov]: http://www.lml.bas.bg/~stoyan/ \"Stoyan Mihov\"\n[universal-automata-2005]: http://www.fmi.uni-sofia.bg/fmi/logic/theses/mitankin-en.pdf \"Petar Nikolaev Mitankin (2005)\"\n[usca]: http://web.usca.edu/ \"University of South Carolina Aiken\"\n\n[live-demo]: http://universal-automata.github.io/liblevenshtein/\n\n[github-author]: https://github.com/dylon \"Dylon Edwards \u003cdylon.devo+liblevenshtein-java@gmail.com\u003e\"\n[github-demo]: http://universal-automata.github.io/liblevenshtein/ \"liblevenshtein demo\"\n[github-email]: mailto:dylon.devo+liblevenshtein-java@gmail.com \"Dylon Edwards \u003cdylon.devo+liblevenshtein-java@gmail.com\u003e\"\n[github-repo]: https://github.com/universal-automata/liblevenshtein-java/ \"universal-automata/liblevenshtein-java\"\n\n[wikipedia-damerau-levenshtein-distance]: https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance \"Damerau–Levenshtein distance\"\n[wikipedia-levenshtein-distance]: https://en.wikipedia.org/wiki/Levenshtein_distance \"Levenshtein distance\"\n\n[master-branch]: https://github.com/universal-automata/liblevenshtein-java/tree/master \"universal-automata/liblevenshtein-java/master\"\n[release-branch]: https://github.com/universal-automata/liblevenshtein-java/tree/release \"universal-automata/liblevenshtein-java/release\"\n[release-branch-3.x]: https://github.com/universal-automata/liblevenshtein-java/tree/release-3.x \"universal-automata/liblevenshtein-java/release-3.x\"\n[release-branch-2.x]: https://github.com/universal-automata/liblevenshtein-java/tree/release-2.x \"universal-automata/liblevenshtein-java/release-2.x\"\n\n[wiki]: https://github.com/universal-automata/liblevenshtein-java/blob/gh-pages/docs/wiki/3.0.0/index.md \"liblevenshtein 3.0.0 Wiki\"\n[javadoc]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/index.html \"liblevenshtein 3.0.0 API\"\n[tagged-source]: https://github.com/universal-automata/liblevenshtein-java/tree/3.0.0/src \"liblevenshtein 3.0.0\"\n\n[java-lib]: https://github.com/universal-automata/liblevenshtein-java \"liblevenshtein-java\"\n[java-cli]: https://github.com/universal-automata/liblevenshtein-java-cli \"liblevenshtein-java-cli\"\n[java-cli-readme]: https://github.com/universal-automata/liblevenshtein-java-cli/blob/master/README.md \"liblevenshtein-java-cli, README.md\"\n\n[javadoc/Iterable]: https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true \"java.lang.Iterable\"\n[javadoc/Iterator.next()]: https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#next-- \"java.util.Iterator.next()\"\n[javadoc/Iterator]: https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html \"java.util.Iterator\"\n[javadoc/String]: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html \"java.lang.String\"\n\n[javadoc/Algorithm.MERGE_AND_SPLIT]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/Algorithm.html#MERGE_AND_SPLIT \"Algorithm.MERGE_AND_SPLIT\"\n[javadoc/Algorithm.STANDARD]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/Algorithm.html#STANDARD \"Algorithm.STANDARD\"\n[javadoc/Algorithm.TRANSPOSITION]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/Algorithm.html#TRANSPOSITION \"Algorithm.TRANSPOSITION\"\n[javadoc/ITransducer.transduce(String)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/ITransducer.html#transduce-java.lang.String- \"ITransducer.transduce(String):Iterable\"\n[javadoc/ITransducer.transduce(String,int)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/ITransducer.html#transduce-java.lang.String-int- \"ITransducer.transduce(String,int):Iterable\"\n[javadoc/MemoizedMergeAndSplit.between(String,String)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/distance/MemoizedMergeAndSplit.html \"MemoizedMergeAndSplit.between(String,String):int\"\n[javadoc/MemoizedStandard.between(String,String)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/distance/MemoizedStandard.html \"MemoizedStandard.between(String,String):int\"\n[javadoc/MemoizedTransposition.between(String,String)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/distance/MemoizedTransposition.html \"MemoizedTransposition.between(String,String):int\"\n[javadoc/TransducerBuilder.algorithm(Algorithm)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/factory/TransducerBuilder.html#algorithm-com.github.liblevenshtein.Algorithm- \"TransducerBuilder.algorithm(Algorithm):TransducerBuilder\"\n[javadoc/TransducerBuilder.build()]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/factory/TransducerBuilder.html#build-- \"TransducerBuilder.build():ITransducer\"\n[javadoc/TransducerBuilder.defaultMaxDistance(int)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/factory/TransducerBuilder.html#defaultMaxDistance-int- \"TransducerBuilder.defaultMaxDistance(int):TransducerBuilder\"\n[javadoc/TransducerBuilder.dictionary(Collection)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/factory/TransducerBuilder.html#dictionary-java.util.Collection- \"TransducerBuilder.dictionary(Collection):TransducerBuilder\"\n[javadoc/TransducerBuilder.dictionary(Collection,boolean)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/factory/TransducerBuilder.html#dictionary-java.util.Collection-boolean- \"TransducerBuilder.dictionary(Collection,boolean):TransducerBuilder\"\n[javadoc/TransducerBuilder.includeDistance(boolean)]: http://universal-automata.github.io/liblevenshtein-java/docs/javadoc/3.0.0/com/github/liblevenshtein/transducer/factory/TransducerBuilder.html#includeDistance-boolean- \"TransducerBuilder.includeDistance(boolean):TransducerBuilder\"\n\n[src/Candidate]: https://github.com/universal-automata/liblevenshtein-java/blob/master/src/main/java/com/github/liblevenshtein/transducer/Candidate.java \"Candidate.java\"\n[src/ITransducer]: https://github.com/universal-automata/liblevenshtein-java/blob/3.0.0/src/main/java/com/github/liblevenshtein/transducer/factory/TransducerBuilder.java \"TransducerBuilder.java\"\n[src/TransducerBuilder.java]: https://github.com/universal-automata/liblevenshtein-java/blob/3.0.0/src/main/java/com/github/liblevenshtein/transducer/factory/TransducerBuilder.java \"TransducerBuilder.java\"\n[src/build.gradle]: https://github.com/universal-automata/liblevenshtein-java/blob/3.0.0/build.gradle \"build.gradle\"\n\n[top-20-most-common-english-words.txt]: https://raw.githubusercontent.com/universal-automata/liblevenshtein-java/3.0.0/src/test/resources/top-20-most-common-english-words.txt \"top-20-most-common-english-words.txt\"\n\n[maven-repo]: https://repo1.maven.org/maven2 \"Maven Central repository\"\n[jcenter-repo]: https://jcenter.bintray.com \"JCenter repository\"\n[bintray-repo]: https://dl.bintray.com/universal-automata/liblevenshtein \"Bintray repository\"\n[artifactory-repo]: https://oss.jfrog.org/artifactory/oss-release-local \"Artifactory repository\"\n\n[gradle-home]: http://gradle.org/ \"Gradle homepage\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funiversal-automata%2Fliblevenshtein-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funiversal-automata%2Fliblevenshtein-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funiversal-automata%2Fliblevenshtein-java/lists"}