https://github.com/uxter/fuzzysearch
:eyeglasses: Implementing a Fuzzy Search Algorithm in Java with possible to extend by adding similarity calculation strategy
https://github.com/uxter/fuzzysearch
approximate-string-matching fuzzy-matching fuzzy-search java java-8 search sorting-algorithm
Last synced: 4 months ago
JSON representation
:eyeglasses: Implementing a Fuzzy Search Algorithm in Java with possible to extend by adding similarity calculation strategy
- Host: GitHub
- URL: https://github.com/uxter/fuzzysearch
- Owner: uxter
- License: isc
- Created: 2017-07-17T13:45:38.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-07-31T10:51:03.000Z (over 8 years ago)
- Last Synced: 2025-04-04T13:08:07.370Z (11 months ago)
- Topics: approximate-string-matching, fuzzy-matching, fuzzy-search, java, java-8, search, sorting-algorithm
- Language: Java
- Homepage:
- Size: 76.2 KB
- Stars: 3
- Watchers: 0
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[](https://travis-ci.org/uxter/fuzzysearch)
[](https://codecov.io/gh/uxter/fuzzysearch)
[](https://gitter.im/fuzzysearch?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
# FuzzySearch
Implementing a Fuzzy Search Algorithm in Java with possible to extend by adding similarity calculation strategy.
## Classes [WordsScoreStrategy](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/WordsScoreStrategy.java), [StartsWithScoreStrategy](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/StartsWithScoreStrategy.java), [CharsScoreStrategy](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/CharsScoreStrategy.java)
*extends [ScoreWeight](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/ScoreWeight.java)*
*implements [ScoreStrategy](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/ScoreStrategy.java)*
Create similarity calculation strategy.
``` java
WordsScoreStrategy wordsScoreStrategyInstance = new WordsScoreStrategy();
StartsWithScoreStrategy startsWithScoreStrategyInstance = new StartsWithScoreStrategy();
CharsScoreStrategy charsScoreStrategyInstance = new CharsScoreStrategy();
```
### Method [setWeight(int value)](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/ScoreWeight.java#L22)
Set score weight.
###### Parameters
| Param | Type | Description |
| --- | --- | --- |
| value | int | Score weight |
``` java
wordsScoreStrategyInstance.setWeight(2);
startsWithScoreStrategyInstance.setWeight(5);
charsScoreStrategyInstance.setWeight(3);
```
## Class [FuzzySearch](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/FuzzySearch.java)
*implements [FuzzySearchable](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/FuzzySearchable.java)*
Create searcher.
``` java
FuzzySearch Searcher = new FuzzySearch();
```
### Method [addScoreStrategy(ScoreStrategy strategy)](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/FuzzySearch.java#L23)
Add Similarity calculation strategy.
###### Parameters
| Param | Type | Description |
| --- | --- | --- |
| strategy | ScoreStrategy | Similarity calculation strategy |
``` java
Searcher.addScoreStrategy(wordsScoreStrategyInstance);
Searcher.addScoreStrategy(startsWithScoreStrategyInstance);
Searcher.addScoreStrategy(charsScoreStrategyInstance);
```
### Method [search(String[] list, String input, int limit)](https://github.com/uxter/fuzzysearch/blob/master/src/main/java/ru/shcoder/fuzzysearch/FuzzySearch.java#L23)
Search.
###### Parameters
| Param | Type | Description |
| --- | --- | --- |
| list | String[] | Source list of strings |
| input | String | Search query string |
| limit | int | Maximum number of results |
###### Return
| Param | Type |
| --- | --- |
| String[] | Sorted list of strings |
``` java
String[] sourceList = new String[]{
"Java",
"JavaScript",
"C++"
};
String[] resultList = Searcher.search(sourceList, "Java", 10));
```
## Interfaces
## Custom similarity calculation strategy
``` java
package ru.shcoder.fuzzysearch;
/**
*
Class CustomScoreStrategy
* Similarity calculation strategy for two strings
*
* @author Vasiliy Shilov (https://github.com/uxter)
* @version 1.0
* @since 2017-07-31
*/
public class CustomScoreStrategy extends ScoreWeight implements ScoreStrategy {
/**
* Get similarity score
* @param str1 First string
* @param str2 Second string
* @return Similarity Score
*/
public double getScore(String str1, String str2) {
double result;
// Some logic
return result;
}
}
```
## Note on Patches/Pull Requests
1. Fork the project.
2. Make your feature addition or bug fix.
3. Send me a pull request.
* * *
© 2017 Vasily Shilov