FuzzyScore與模糊搜尋

sayWhat_sayHello發表於2018-06-28

導包(maven),其他的上下面那個網站查:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.4</version>
</dependency>

FuzzyScore 是一個很簡單的類庫,主要用於分析文字的相似度。
首先是構造方法FuzzyScore fuzzyScore = new FuzzyScore(Locale.ENGLISH); 傳參選擇一種語言。支援中文Locale.CHINESE

有兩個方法主要講一下Integer fuzzyScore(CharSequence term, CharSequence query) 這個相似度的概念。大致是這個意思,具體實現還和兩個序列的下標有關係,詳情請檢視原始碼:

單個字元匹配相似度+1,連續字元匹配相似度+3

這裡寫圖片描述

下面是根據這個相似度進行模糊搜尋的方式:

        FuzzyScore fuzzyScore = new FuzzyScore(Locale.ENGLISH);
        String[] array = {"abcde","aebc","ddabcc","abcdd"};
        String query = "e";
        Integer queryScore = fuzzyScore.fuzzyScore(query, query);
        ArrayList<String> arrayList = new ArrayList<>();
        for (String s : array) {
            Integer score = fuzzyScore.fuzzyScore(s,query);
            System.out.println(score);
            if (score>=queryScore){
                arrayList.add(s);
            }
        }
        System.out.println(arrayList.toString());

執行結果如下:

1
1
0
0
[abcde, aebc]

相關文章