java比较字符串相似度

原创 2013年12月05日 15:30:05
import java.text.NumberFormat;

import java.util.Locale;


/**

 * 比较两个字符串的相似度

 */

public class Similarity {

	public static void main(String[] args) {

		String strA = "我是中国人";

		String strB = "你是中国人";

		double result=SimilarDegree(strA, strB);

		if(result>=0.7){
			System.out.println("相似度很高!" +similarityResult(result)+result);

		}else{

			System.out.println("相似度不高"+similarityResult(result)+result);

		}

		System.out.println();

	}



	/**

	 * 相似度转百分比

	 */

	public static String similarityResult(double resule){

		return  NumberFormat.getPercentInstance(new Locale( "en ", "US ")).format(resule);

	}

	

	/**

	 * 相似度比较

	 * @param strA

	 * @param strB

	 * @return

	 */

	public static double SimilarDegree(String strA, String strB){

		String newStrA = removeSign(strA);

		String newStrB = removeSign(strB);

		int temp = Math.max(newStrA.length(), newStrB.length());

		int temp2 = longestCommonSubstring(newStrA, newStrB).length();

		return temp2 * 1.0 / temp;

	}

	

	private static String removeSign(String str) {

		StringBuffer sb = new StringBuffer();

		for (char item : str.toCharArray())

			if (charReg(item)){

				//System.out.println("--"+item);

				sb.append(item);

			}

		return sb.toString();

	}



	private static boolean charReg(char charValue) {

		return (charValue >= 0x4E00 && charValue <= 0X9FA5)

				|| (charValue >= 'a' && charValue <= 'z')

				|| (charValue >= 'A' && charValue <= 'Z')

				|| (charValue >= '0' && charValue <= '9');

	}



	private static String longestCommonSubstring(String strA, String strB) {

		char[] chars_strA = strA.toCharArray();

		char[] chars_strB = strB.toCharArray();

		int m = chars_strA.length;

		int n = chars_strB.length;

		int[][] matrix = new int[m + 1][n + 1];

		for (int i = 1; i <= m; i++) {

			for (int j = 1; j <= n; j++) {

				if (chars_strA[i - 1] == chars_strB[j - 1])

					matrix[i][j] = matrix[i - 1][j - 1] + 1;

				else

					matrix[i][j] = Math.max(matrix[i][j - 1], matrix[i - 1][j]);

			}

		}

		char[] result = new char[matrix[m][n]];

		int currentIndex = result.length - 1;

		while (matrix[m][n] != 0) {

			if (matrix[n] == matrix[n - 1])

				n--;

			else if (matrix[m][n] == matrix[m - 1][n]) 

				m--;

			else {

				result[currentIndex] = chars_strA[m - 1];

				currentIndex--;

				n--;

				m--;

			}
		}

		return new String(result);

	}

}

(java)字符串的相似度

两个字符串的相似度定义为:将一个字符串转换成另外一个字符串的代价(通过插入、删除、替换三种方式转换),转换的代价越高则说明两个字符串的相似度越低。 如:snowy与sunny,转换方式有       ...

java中比较字符串相似度

public class Levenshtein {  private int compare(String str, String target) {   int d[][]; // 矩阵 ...

java两个字符串的相似度

public class Levenshtein {     private int compare(String str, String target)     {         int ...

计算文本相似度-java实现

源代码: Computeclass.java: /** * @author Caiyong * @version 1.0 * * */ package pack; import java...

【JAVA实现】基于皮尔逊相关系数的相似度计算

最近在看《集体智慧编程》,相比其他机器学习的书籍,这本书有许多案例,更贴近实际,而且也很适合我们这种准备学习machine learning的小白。        这本书我觉得不足之处在于,里面没有对...
  • C_son
  • C_son
  • 2015年02月18日 12:51
  • 5612

【JAVA实现】基于欧几里得度量的相似度计算

前文讲了基于皮尔逊相关系数的相似度计算方法,这次介绍一个更加简单的相似度计算算法——欧几里得度量。        算法描述如下:        欧几里得度量定义欧几里得空间中,点x =(x1,.....
  • C_son
  • C_son
  • 2015年02月20日 16:39
  • 2772

相似度的算法(编辑距离法)(Java实现代码)

public class Suanfa { public static void main(String[] args) { String Str_1="abcdefghijklmuvwxy...
  • Yubu_
  • Yubu_
  • 2017年02月16日 17:17
  • 362

Java回炉重造(三)使用Apache Commons Text库计算文本相似性:jaccard相似系数、余弦相似度

Java回炉重造(三)使用Apache Commons Text库计算文本相似性:jaccard相似系数、余弦相似度运行结果代码图片代码TextSimilaryTest.javapackage cn....

java:均值哈希实现图像内容相似度比较

这阵子发现我的图像数据库中有不少内容一样的图像需要剔除,这些内容一样的图像可能尺寸不一样,通道数也可能不一样(灰度/彩色),如下三张图内容完全一样,只是亮度或色彩通道数不同, 于是想到了用goo...
  • 10km
  • 10km
  • 2017年04月29日 15:23
  • 1889

余弦相似度-java代码实现

字符串相似性匹配算法,匹配句子或者文章的相似性
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java比较字符串相似度
举报原因:
原因补充:

(最多只允许输入30个字)