Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?)

xip

Bekanntes Mitglied
Hallo,

ich suche nach einer Möglichkeit 2 Strings miteinander zu vergleichen und mir die prozentuale Abweichung zu geben.

Beispiel:

String 1 = "blahblablah"
String 2 = "blahblablah"

Vergleich 1 mit 2 = 100%

String 3 = "blahblablah"
String 4 = "blahblablahblub"

Vergleich 3 mit 4 = 80%

Jetzt dachte ich da an Pattern?!?!?! Bisher kenne ich das nur das man nach einem String in einerm String suchen kann. Also nach einem Muster. Im Prinzip gehts darum ja nicht.

Hab im Internet StringSearch gefunden. Bin mir da aber auch nicht sicher.

Habt ihr dazu eine Idee??

lg
 
mir wurde folgendes in einem anderem Forum empfohlen:

klappt soweit auch ganz gut:
Java:
/**
     * @return lexical similarity value in the range [0,1]
     */
    public static double compareStrings(String str1, String str2) {
        ArrayList pairs1 = wordLetterPairs(str1.toUpperCase());
        ArrayList pairs2 = wordLetterPairs(str2.toUpperCase());
        int intersection = 0;
        int union = pairs1.size() + pairs2.size();
        for (int i = 0; i < pairs1.size(); i++) {
            Object pair1 = pairs1.get(i);
            for (int j = 0; j < pairs2.size(); j++) {
                Object pair2 = pairs2.get(j);
                if (pair1.equals(pair2)) {
                    intersection++;
                    pairs2.remove(j);
                    break;
                }
            }
        }
        return (2.0 * intersection) / union;
    }

    /**
     * @return an ArrayList of 2-character Strings.
     */
    private static ArrayList wordLetterPairs(String str) {
        ArrayList allPairs = new ArrayList();
        // Tokenize the string and put the tokens/words into an array
        String[] words = str.split("s");
        // For each word
        for (int w = 0; w < words.length; w++) {
            // Find the pairs of characters
            String[] pairsInWord = letterPairs(words[w]);
            for (int p = 0; p < pairsInWord.length; p++) {
                allPairs.add(pairsInWord[p]);
            }
        }
        return allPairs;
    }

    /**
     * @return an array of adjacent letter pairs contained in the input string
     */
    private static String[] letterPairs(String str) {
        int numPairs = str.length() - 1;
        String[] pairs = new String[numPairs];
        for (int i = 0; i < numPairs; i++) {
            pairs[i] = str.substring(i, i + 2);
        }
        return pairs;
    }
 
Zuletzt bearbeitet von einem Moderator:
Man kann zwischen Strings verschiedene Ähnlichkeitsmaße definieren, deswegen ist eine nicht näher beschriebene "prozentuale Abweichung" nicht besonders sinnvoll. Wie ähnlich sind "Lager" und "Regal"? Sie haben die gleichen Buchstaben. Es gibt da tausende Ansätze, die bekannteste ist die Levenshtein-Distanz ? Wikipedia, aber nur ein Beispiel von vielen.
 

Neue Themen


Zurück
Oben