代码之家  ›  专栏  ›  技术社区  ›  Thomasleveil

PHP类似于java中的_text()

  •  1
  • Thomasleveil  · 技术社区  · 15 年前

    你知道PHP有什么完全等价的实现吗 similar_text

    5 回复  |  直到 15 年前
        1
  •  1
  •   Tisho star    12 年前

    以下是我在java中的实现:

    package comwebndesignserver.server;
    
    import android.util.Log;
    
    /*
     * 
     * DenPashkov 2012 
     * http://www.facebook.com/pashkovdenis
     *  * PhP Similar String  Implementation 
     * 30.07.2012 
     * 
     */
    
    public class SimilarString {
    
        private String  string = "" ;
        private String string2 = ""; 
        public int procent = 0 ; 
        private int position1 =0 ; 
        private int position2 =0;
    
        // Similar String 
        public SimilarString(String str1,  String str2){
            this.string = str1.toLowerCase();   
            this.string2 = str2.toLowerCase(); 
        }
        public SimilarString() {
    
        }
        // Set string 
        public SimilarString setString(String str1,  String str2){
            this.string = str1.toLowerCase(); 
            this.string2 = str2.toLowerCase(); 
            return this ; 
        }
    
     //get Similar 
        public int  similar(){
            string= string.trim() ; 
            string2= string2.trim();
         int len_str1 = string.length() ;
            int len_str2 = string2.length() ; 
    
            int max= 0; 
            if (string.length()>1 && string2.length()>1 ){
                // iterate 
                for (int p=0  ; p<=len_str1; p++){
                    for (int q=0  ; q<=len_str2; q++){
                        for(int l=0 ; (p + l < len_str1) && (q + l < len_str2) && (string.charAt(l) == string2.charAt(l)); l++){
                            if (l>max){
                                max=l ; 
                                position1 = p ; 
                                position2 = q; 
                            }
                        }
                    }
                }
    
             //sim * 200.0 / (t1_len + t2_len)
            this.procent = max * 200 / ((string.length()) + (string2.length())  - (max) + (position2 - position1)   ) - (max*string.length() ) ;
            if (procent>100) procent = 100; 
            if (procent<0) procent = 0; 
            }
            return this.procent ; 
        }
    }
    
        2
  •  1
  •   mirek    12 年前

    这与php源代码的string.c文件中的php_similar_str、php_similar_char、php_similar_text函数(similar_text)的工作原理相同

    private float similarText(String first, String second)   {
        first = first.toLowerCase();
        second = second.toLowerCase();
        return (float)(this.similar(first, second)*200)/(first.length()+second.length());
    }
    
    private int similar(String first, String second)  { 
        int p, q, l, sum;
        int pos1=0;
        int pos2=0;
        int max=0;
        char[] arr1 = first.toCharArray();
        char[] arr2 = second.toCharArray();
        int firstLength = arr1.length;
        int secondLength = arr2.length;
    
        for (p = 0; p < firstLength; p++) {
            for (q = 0; q < secondLength; q++) {
                for (l = 0; (p + l < firstLength) && (q + l < secondLength) && (arr1[p+l] == arr2[q+l]); l++);            
                if (l > max) {
                    max = l;
                    pos1 = p;
                    pos2 = q;
                }
    
            }
        }
        sum = max;
        if (sum > 0) {
            if (pos1 > 0 && pos2 > 0) {
                sum += this.similar(first.substring(0, pos1>firstLength ? firstLength : pos1), second.substring(0, pos2>secondLength ? secondLength : pos2));
            }
    
            if ((pos1 + max < firstLength) && (pos2 + max < secondLength)) {
                sum += this.similar(first.substring(pos1 + max, firstLength), second.substring(pos2 + max, secondLength));
            }
        }       
        return sum;
    }
    
        3
  •  0
  •   Roman    15 年前

    至于Java,最好的选择可能是 StringUtils class Apache Commons Lang 库,其中包含其他SO帖子提到的LevensteinDistance方法。

        4
  •  0
  •   Mike    14 年前
    1. 下载PHP的源代码( http://php.net/downloads.php )
    2. 将ext\standard\string.c中类似的_text()函数转换为Java。
    3. 然后吃些冰激凌当茶:D
        5
  •  -1
  •   Kevin    12 年前

    PHP similar_text function in Javascript

    这是PHP类似文本的javascript等价物。 你只需要在Java中修改它。抱歉,如果这没有帮助,因为我认为Javascript语法和Java只有一点区别。

    至少,你知道实现算法