我是靠谱客的博主 美满香烟,最近开发中收集的这篇文章主要介绍java 判断字符串相似性_Java中的相似性字符串比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在许多库中使用的以0%-100%方式计算两个字符串之间相似性的常用方法是测量您需要多少(以%为单位)更改较长字符串以将其变为较短字符串:

/**

* Calculates the similarity (a number within 0 and 1) between two strings.

*/

public static double similarity(String s1, String s2) {

String longer = s1, shorter = s2;

if (s1.length() < s2.length()) { // longer should always have greater length

longer = s2; shorter = s1;

}

int longerLength = longer.length();

if (longerLength == 0) { return 1.0; /* both strings are zero length */ }

return (longerLength - editDistance(longer, shorter)) / (double) longerLength;

}

// you can use StringUtils.getLevenshteinDistance() as the editDistance() function

// full copy-paste working code is below

计算editDistance():

该editDistance()函数上述预计以计算编辑距离的两个字符串之间。此步骤有多种实现方式,每种方法都可以更好地适应特定方案。最常见的是

以下是计算编辑距离的两个选项:

工作范例:

public class StringSimilarity {

/**

* Calculates the similarity (a number within 0 and 1) between two strings.

*/

public static double similarity(String s1, String s2) {

String longer = s1, shorter = s2;

if (s1.length() < s2.length()) { // longer should always have greater length

longer = s2; shorter = s1;

}

int longerLength = longer.length();

if (longerLength == 0) { return 1.0; /* both strings are zero length */ }

/* // If you have Apache Commons Text, you can use it to calculate the edit distance:

LevenshteinDistance levenshteinDistance = new LevenshteinDistance();

return (longerLength - levenshteinDistance.apply(longer, shorter)) / (double) longerLength; */

return (longerLength - editDistance(longer, shorter)) / (double) longerLength;

}

// Example implementation of the Levenshtein Edit Distance

// See http://rosettacode.org/wiki/Levenshtein_distance#Java

public static int editDistance(String s1, String s2) {

s1 = s1.toLowerCase();

s2 = s2.toLowerCase();

int[] costs = new int[s2.length() + 1];

for (int i = 0; i <= s1.length(); i++) {

int lastValue = i;

for (int j = 0; j <= s2.length(); j++) {

if (i == 0)

costs[j] = j;

else {

if (j > 0) {

int newValue = costs[j - 1];

if (s1.charAt(i - 1) != s2.charAt(j - 1))

newValue = Math.min(Math.min(newValue, lastValue),

costs[j]) + 1;

costs[j - 1] = lastValue;

lastValue = newValue;

}

}

}

if (i > 0)

costs[s2.length()] = lastValue;

}

return costs[s2.length()];

}

public static void printSimilarity(String s, String t) {

System.out.println(String.format(

"%.3f is the similarity between "%s" and "%s"", similarity(s, t), s, t));

}

public static void main(String[] args) {

printSimilarity("", "");

printSimilarity("1234567890", "1");

printSimilarity("1234567890", "123");

printSimilarity("1234567890", "1234567");

printSimilarity("1234567890", "1234567890");

printSimilarity("1234567890", "1234567980");

printSimilarity("47/2010", "472010");

printSimilarity("47/2010", "472011");

printSimilarity("47/2010", "AB.CDEF");

printSimilarity("47/2010", "4B.CDEFG");

printSimilarity("47/2010", "AB.CDEFG");

printSimilarity("The quick fox jumped", "The fox jumped");

printSimilarity("The quick fox jumped", "The fox");

printSimilarity("kitten", "sitting");

}

}

输出:

1.000 is the similarity between "" and ""

0.100 is the similarity between "1234567890" and "1"

0.300 is the similarity between "1234567890" and "123"

0.700 is the similarity between "1234567890" and "1234567"

1.000 is the similarity between "1234567890" and "1234567890"

0.800 is the similarity between "1234567890" and "1234567980"

0.857 is the similarity between "47/2010" and "472010"

0.714 is the similarity between "47/2010" and "472011"

0.000 is the similarity between "47/2010" and "AB.CDEF"

0.125 is the similarity between "47/2010" and "4B.CDEFG"

0.000 is the similarity between "47/2010" and "AB.CDEFG"

0.700 is the similarity between "The quick fox jumped" and "The fox jumped"

0.350 is the similarity between "The quick fox jumped" and "The fox"

0.571 is the similarity between "kitten" and "sitting"

最后

以上就是美满香烟为你收集整理的java 判断字符串相似性_Java中的相似性字符串比较的全部内容,希望文章能够帮你解决java 判断字符串相似性_Java中的相似性字符串比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部