国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java實現(xiàn)兩字符串相似度算法

這篇具有很好參考價值的文章主要介紹了Java實現(xiàn)兩字符串相似度算法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、編輯距離

編輯距離:是衡量兩個字符串之間差異的度量,它表示將一個字符串轉換為另一個字符串所需的最少編輯操作次數(shù)(插入、刪除、替換)。

2、相似度

計算方法可以有多種,其中一種常見的方法是將編輯距離歸一化為0到1之間的范圍(歸一化編輯距離(Normalized Edit Distance)),將編輯距離除以較長字符串的長度。這樣可以將相似度表示為一個百分比,其中0表示完全不相似,1表示完全相似。

請注意,這種歸一化方法并不是唯一的,也不適用于所有情況。在實際應用中,你可以根據(jù)具體需求選擇適合的相似度計算方法。例如,Jaro-Winkler相似度算法和Cosine相似度算法等都是常用的字符串相似度計算方法,它們不一定使用編輯距離作為基礎。

3、相似度分類、測試

  • 歸一化編輯距離(Normalized Edit Distance)
  • Jaro-Winkler相似度
  • 余弦相似度(Cosine Similarity)

3.1、歸一化編輯距離(Normalized Edit Distance)

  • 解釋:常用的,將編輯距離歸一化為0到1之間的范圍

  • 使用、測試

    String str1 = "h1e2l3l4o";
    String str2 = "ddddhello";

    //歸一化編輯距離
    @Test
    void contextLoads() {
        // commons-text 包:根據(jù)編輯距離計算:相似度
        int editDistance = LevenshteinDistance.getDefaultInstance().apply(str1, str2);
        double similarity = 1 - ((double) editDistance / Math.max(str1.length(), str2.length()));

        System.out.println("commons-text 包:Edit Distance: " + editDistance);
        System.out.println("commons-text 包:Similarity: " + similarity);
    }
  • 結果

Java實現(xiàn)兩字符串相似度算法

3.1.1、數(shù)據(jù)庫Oracle/DM實現(xiàn)的歸一化編輯距離

  • 見:https://www.cnblogs.com/kakarotto-chen/p/17752256.html

  • 測試

-- oracle/dm實現(xiàn)的歸一化編輯距離
SELECT UTL_MATCH.edit_distance_similarity ('h1e2l3l4o', 'ddddhello') AS similarity 
  • 結果

Java實現(xiàn)兩字符串相似度算法

3.2、Jaro-Winkler相似度

  • 解釋:我也看不懂,自行取用:https://www.jianshu.com/p/a4af202cb702

  • 使用、測試

    String str1 = "h1e2l3l4o";
    String str2 = "ddddhello";

    //Jaro-Winkler相似度
    @Test
    public void test03()throws Exception{
        JaroWinklerSimilarity js = new JaroWinklerSimilarity();
        System.out.println("Jaro-Winkler相似度: " + js.apply(str1, str2));
    }
  • 結果

Java實現(xiàn)兩字符串相似度算法

3.2.1、oracle/dm實現(xiàn)的:Jaro-Winkler相似度算法

  • 和Java中的一模一樣
-- oracle/dm實現(xiàn)的:Jaro-Winkler相似度算法
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('h1e2l3l4o', 'ddddhello') AS JaroWinkler相似度;

Java實現(xiàn)兩字符串相似度算法

3.3、余弦相似度(Cosine Similarity)

  • 解釋:我也看不懂,自行取用
余弦相似度(Cosine Similarity)是通過計算兩個向量之間的夾角來衡量它們的相似度。在這種情況下,我們可以將字符串視為向量,其中每個字符對應一個維度。

對于左邊字符串"h1e2l3l4o"和右邊字符串"hello",我們可以將它們表示為以下向量:

左邊字符串向量:[1, 2, 3, 4, 5]
右邊字符串向量:[1, 1, 1, 1, 1]

為了計算余弦相似度,我們需要計算這兩個向量的點積和它們的模長。點積表示兩個向量之間的相似程度,模長表示向量的長度。

左邊字符串向量的模長:sqrt(1^2 + 2^2 + 3^2 + 4^2 + 5^2) = sqrt(55)
右邊字符串向量的模長:sqrt(1^2 + 1^2 + 1^2 + 1^2 + 1^2) = sqrt(5)

左邊字符串向量和右邊字符串向量的點積:11 + 21 + 31 + 41 + 51 = 1 + 2 + 3 + 4 + 5 = 15

根據(jù)余弦相似度的公式,余弦相似度可以計算為點積除以兩個向量的模長的乘積:

余弦相似度 = 點積 / (左邊字符串向量的模長 右邊字符串向量的模長)
= 15 / (sqrt(55) sqrt(5))
≈ 0.745

因此,左邊字符串"h1e2l3l4o"和右邊字符串"hello"的余弦相似度約為0.745。
  • 測試、使用
    String str1 = "h1e2l3l4o";
    String str2 = "ddddhello";
    //余弦相似度
    @Test
    public void test02()throws Exception{
        // commons-text 包
        // 使用Cosine計算兩個字符串的余弦距離
        CosineDistance cd = new CosineDistance();
        Double apply = cd.apply(str2, str1);
        System.out.println("Cosine相似度:" + apply);
    }
  • 結果:不知道對不對

Java實現(xiàn)兩字符串相似度算法

4、總結

  • 上述三種的簡單介紹:

上述三種的簡單介紹

  • 其他相似度
1. 編輯距離(Edit Distance):衡量兩個字符串之間的差異,通過計算插入、刪除和替換操作的最小次數(shù)來確定相似度。
2. Hamming距離(Hamming Distance):用于比較兩個等長字符串之間的差異,計算在相同位置上不同字符的數(shù)量。
3. Damerau-Levenshtein距離:類似于編輯距離,但允許交換相鄰字符的操作。
4. Jaccard相似度(Jaccard Similarity):用于比較集合之間的相似度,計算兩個集合的交集與并集的比值。
5. S?rensen-Dice相似度:類似于Jaccard相似度,但計算兩個集合的兩倍交集與兩個集合的元素總數(shù)之和的比值。
6. Smith-Waterman算法:用于比較兩個字符串之間的相似性,主要用于序列比對和字符串匹配。
7. Longest Common Subsequence(LCS):計算兩個字符串之間最長公共子序列的長度,用于衡量字符串的相似性。
8. N-gram相似度:將字符串分割為連續(xù)的N個字符片段,比較兩個字符串之間的N-gram的相似性。
9. Cosine相似度(余弦相似度):用于比較兩個向量之間的夾角,常用于文本相似度計算。
  • 都是使用:Apache Commons Text:1.11.0包
    // 實現(xiàn)字符串相似度算法的包
    implementation 'org.apache.commons:commons-text:1.11.0'

Java實現(xiàn)兩字符串相似度算法文章來源地址http://www.zghlxwxcb.cn/news/detail-750193.html

到了這里,關于Java實現(xiàn)兩字符串相似度算法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【dp】不同的子序列 & 兩個字符串的刪除操作 & 編輯距離

    【dp】不同的子序列 & 兩個字符串的刪除操作 & 編輯距離

    dp[i][j]:以j-1為結尾的t出現(xiàn)在以i-1為結尾的s子序列的個數(shù) 需要開辟m+1行,n+1列的二維數(shù)組 為啥狀態(tài)方程是: s[i] == t[j] 時 dp[i][j] = dp[i-1][j-1] + dp[i-1][j] s[i] != t[j] 時 dp[i][j] = dp[i-1][j] 先看s[i] == t[j] 時,以s = “rara” t = “ra” 為例,當i = 3, j = 1時,s[i] == t[j] 此時分為2種情況:

    2023年04月15日
    瀏覽(27)
  • LeetCode | C++ 動態(tài)規(guī)劃——583. 兩個字符串的刪除操作、72. 編輯距離

    583題目鏈接 做法一: 本題和1143.最長公共子序列基本相同,只要求出兩個字符串的最長公共子序列長度即可,那么除了最長公共子序列之外的字符都是必須刪除的,最后用兩個字符串的總長度減去兩個最長公共子序列的長度就是刪除的最少步數(shù)。 做法二: 本題和115.不同的子

    2024年02月16日
    瀏覽(24)
  • 面試算法117:相似的字符串

    面試算法117:相似的字符串

    如果交換字符串X中的兩個字符就能得到字符串Y,那么兩個字符串X和Y相似。例如,字符串\\\"tars\\\"和\\\"rats\\\"相似(交換下標為0和2的兩個字符)、字符串\\\"rats\\\"和\\\"arts\\\"相似(交換下標為0和1的字符),但字符串\\\"star\\\"和\\\"tars\\\"不相似。 輸入一個字符串數(shù)組,根據(jù)字符串的相似性分組,請問

    2024年02月02日
    瀏覽(24)
  • 代碼隨想錄第五十六天——兩個字符串的刪除操作,編輯距離

    題目鏈接:兩個字符串的刪除操作 兩個字符串可以相互刪除 版本一: 確定dp數(shù)組及下標的含義 dp[i][j] :以i-1為結尾的字符串word1,和以j-1為結尾的字符串word2,想要達到相等,所需要刪除元素的最少次數(shù) 確定遞推公式 (1)當word1[i - 1] 與 word2[j - 1]相同: (2)當word1[i - 1] 與

    2024年02月02日
    瀏覽(27)
  • 代碼隨想錄打卡第56天|583. 兩個字符串的刪除操作;72. 編輯距離

    583. 兩個字符串的刪除操作 關鍵點1:dp數(shù)組的含義 dp[i][j],使得以i-1為結尾word1 和 以j-1為結尾的word2 相同所需的最小步數(shù); 關鍵點2:遞歸公式的推導 if(nums1[i-1] == nums2[j-1]),則i和j同時移動,所以為i-1,j-1;dp[i][j] = dp[i-1][j-1];由于不需要進行刪除操作,所以不需要加1 如果不相

    2023年04月19日
    瀏覽(34)
  • Python實現(xiàn)字符串相似度比較

    Python實現(xiàn)字符串相似度比較 在日常的開發(fā)中,我們可能需要對不同的字符串進行比較,以判斷它們之間的相似程度。例如,在搜索引擎、拼寫檢查和數(shù)據(jù)清洗等任務中,字符串相似度比較是一項非常重要的技術。本文將介紹如何使用Python實現(xiàn)字符串相似度比較。 概述 字符串

    2024年02月06日
    瀏覽(24)
  • 使用Java實現(xiàn)高效的字符串匹配算法

    摘要:字符串匹配是計算機領域中的一個重要問題,有著廣泛的應用場景。在本篇博客文章中,我們將介紹幾種高效的字符串匹配算法,并給出使用Java語言實現(xiàn)的代碼示例,希望能對讀者理解和應用這些算法有所幫助。 一、KMP算法 KMP算法(Knuth-Morris-Pratt算法)是一種經(jīng)典的

    2024年02月16日
    瀏覽(30)
  • Java算法題 給一個字符串表達式,實現(xiàn)一個基本計算器,返回計算結果

    題目: 考點:棧 解題思路: 使用 2 個棧,一個 stack_nums 用來保存計算過程的操作數(shù),一個 stack_symbol 用來保存運算符。 在HashMap中,指定加減優(yōu)先級為1,乘除優(yōu)先級為2 循環(huán)遍歷字符串s, 操作符入棧: 若當前字符為\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 時,壓入運算符棧 stack_symbol, 操作數(shù)入

    2024年02月07日
    瀏覽(18)
  • Java中使用JTS實現(xiàn)WKT字符串讀取轉換線、查找LineString的list中距離最近的線、LineString做緩沖區(qū)擴展并計算點在緩沖區(qū)內的方位角

    Java中使用JTS實現(xiàn)WKT字符串讀取轉換線、查找LineString的list中距離最近的線、LineString做緩沖區(qū)擴展并計算點在緩沖區(qū)內的方位角

    Java中使用JTS對空間幾何計算(讀取WKT、距離、點在面內、長度、面積、相交等): Java中使用JTS對空間幾何計算(讀取WKT、距離、點在面內、長度、面積、相交等)_jts-core_霸道流氓氣質的博客-CSDN博客 Java+GeoTools實現(xiàn)WKT數(shù)據(jù)根據(jù)EPSG編碼進行坐標系轉換: Java+GeoTools實現(xiàn)WKT數(shù)據(jù)根據(jù)

    2024年02月09日
    瀏覽(25)
  • Python 中的字符串匹配識別文本中的相似性

    Python 中的字符串匹配識別文本中的相似性

    更多Python學習內容:ipengtao.com 字符串匹配是自然語言處理(NLP)和文本處理中的一個重要任務,它可以識別文本之間的相似性、找到相同或相似的模式,以及進行文本分類和信息檢索等應用。本文將深入探討Python中的字符串匹配技術,包括基本的字符串比較方法、正則表達式

    2024年01月18日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包