PHP Similar_text () в Java - PullRequest
       20

PHP Similar_text () в Java

1 голос
/ 04 января 2010

Знаете ли вы какие-либо строго эквивалентные реализации функции PHP Similar_text в Java?

Ответы [ 5 ]

1 голос
/ 20 ноября 2012

это работает так же, как функция php Similar_text, как и в php_s Similar_str, php_s Similar_char, PHP_FUNCTION (Similar_text) в файле string.c исходников php

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;
}
1 голос
/ 30 июля 2012

Вот моя реализация в 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 ; 
    }
}
0 голосов
/ 15 мая 2010
  1. Скачать исходный код для PHP (http://php.net/downloads.php)
  2. Распакуйте его.
  3. Преобразуйте функцию Similar_text () в ext \ standard \ string.c в Java.
  4. Затем съешьте мороженое к чаю: D
0 голосов
/ 22 мая 2012

Я думаю, вы можете взглянуть на этот пост: PHP схожая с текстом функция в Javascript

Это эквивалент JavaScript для PHP Similar_text. Вам нужно только адаптировать его на Java. извините, если это не поможет, так как я думаю, что синтаксис Javascript и Java имеет лишь небольшую разницу.

По крайней мере, вы знаете алгоритм реализации

0 голосов
/ 04 января 2010

Что касается Java, лучше всего подойдет класс StringUtils из библиотеки Apache Commons Lang , который содержит метод LevensteinDistance, о котором упоминают другие публикации SO.

...