<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    package com.duxiu.simone.file;

    /**
     * 編輯距離算法,首先由俄國科學家Levenshtein提出的,又叫Levenshtein Distance 主要用來計算從原串(s)轉換到目標串(t)所需要的最少的插入,刪除和替換的數目,
     * 在NLP中應用比較廣泛,同時也常用來計算你對原文所作的改動數
     
    */

    public class Levenshtein {
        
        
    private int compare(String str, String target) {
            
    int d[][]; // 矩陣
            int n = str.length();
            
    int m = target.length();
            
    int i; // 遍歷str的
            int j; // 遍歷target的
            char ch1; // str的
            char ch2; // target的
            int temp; // 記錄相同字符,在某個矩陣位置值的增量,不是0就是1
            
            
    if (n == 0) {
                
    return m;
            }
            
            
    if (m == 0) {
                
    return n;
            }
            
            d 
    = new int[n + 1][m + 1];
            
            
    for (i = 0; i <= n; i++) { // 初始化第一列
                d[i][0= i;
            }
            
            
    for (j = 0; j <= m; j++) { // 初始化第一行
                d[0][j] = j;
            }
            
            
    for (i = 1; i <= n; i++) { // 遍歷str
                ch1 = str.charAt(i - 1);
                
    // 去匹配target
                for (j = 1; j <= m; j++) {
                    ch2 
    = target.charAt(j - 1);
                    
    if (ch1 == ch2) {
                        temp 
    = 0;
                    } 
    else {
                        temp 
    = 1;
                    }
                    
                    
    // 左邊+1,上邊+1, 左上角+temp取最小
                    d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1+ 1, d[i - 1][j - 1+ temp);
                }
            }
            
            
    return d[n][m];
        }
        
        
    private int min(int one, int two, int three) {
            
    return (one = one < two ? one : two) < three ? one : three;
        }
        
        
    /**
         * 獲取兩字符串的相似度
         * 
         * 
    @param str
         * 
    @param target
         * 
         * 
    @return
         
    */
        
        
    public float getSimilarityRatio(String str, String target) {
            
    return 1 - (float) compare(str, target) / Math.max(str.length(), target.length());
            
        }
        
        
    public static void main(String[] args) {
            Levenshtein lt 
    = new Levenshtein();
            String str 
    = "ab";
            String target 
    = "ac";
            System.out.println(
    "similarityRatio=" + lt.getSimilarityRatio(str, target));
        }
        
    }
    posted on 2012-01-12 15:36 SIMONE 閱讀(2119) 評論(2)  編輯  收藏 所屬分類: JAVA

    FeedBack:
    # re: 字符串相似度算法
    2012-02-02 20:05 | Gill
    org.apache.commons.lang.StringUtils.getLevenshteinDistance(String, String)  回復  更多評論
      
    # re: 字符串相似度算法[未登錄]
    2015-09-23 13:15 | lili
    注釋的挺不錯,贊一個。也給樓上點個贊:
    org.apache.commons.lang.StringUtils.getLevenshteinDistance
    中是有實現。  回復  更多評論
      
    主站蜘蛛池模板: 九九精品免费视频| 成人免费视频网站www| 免费国产美女爽到喷出水来视频| 亚洲一区在线免费观看| 99久久这里只精品国产免费| 国产.亚洲.欧洲在线| 好男人视频在线观看免费看片| 亚洲天堂男人影院| 日本免费人成黄页在线观看视频 | 十八禁无码免费网站| 亚洲国产成人久久精品动漫| 6080午夜一级毛片免费看6080夜福利| 亚洲精品国产啊女成拍色拍| 91精品国产免费久久久久久青草| 中日韩亚洲人成无码网站| 成人免费淫片在线费观看| 国产精品亚洲va在线观看| 亚洲国产一区二区视频网站| 精品在线免费观看| 中文字幕亚洲免费无线观看日本| 国产麻豆视频免费观看| 色窝窝亚洲av网| 亚洲精品tv久久久久久久久| 亚洲精品免费在线视频| 亚洲成熟丰满熟妇高潮XXXXX| 精品亚洲成α人无码成α在线观看| 很黄很污的网站免费| 亚洲Av无码一区二区二三区| 国产精品无码免费视频二三区| 久久99精品免费一区二区| 亚洲色成人网一二三区| 免费看片免费播放| 中国一级毛片视频免费看| 亚洲欧洲精品在线| 亚洲Av无码国产情品久久 | 精品国产亚洲男女在线线电影| 久久国产高潮流白浆免费观看| 亚洲av无码成人精品区一本二本 | 久久精品国产亚洲AV高清热| 日韩一区二区在线免费观看| 久久久精品午夜免费不卡|