`
xy0792
  • 浏览: 90046 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

字符相似度比较

 
阅读更多

最近项目有个问题,客户重复,比如**市A有限公司,**A有限公司,少了一个市,或者有限什么的,这样导致本来一个客户在系统中就出现多条记录,现在利用字符相似度比较找出差不多的客户给业务部门确认。

引用原文地址

http://darkmasky.iteye.com/blog/1115039

 

程序代码如下,由于只是一次使用,并没有写的很规范,Main.java中被注释的一段如果加上去,准确率高但是范围小了,所以做参考。

 

package com.shine.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import a.Customer;

public class JDBC {
	public static List<Customer> getData() {
		String sql = "select t.fnumber,t.fname_l2, length(t.fname_l2) s from t_bd_customer t order by s";
		String driver = "oracle.jdbc.driver.OracleDriver";
		String connStr = "jdbc:oracle:thin:@192.168.0.5:1521:test";
		Connection conn = null;
		ArrayList<Customer> l = new ArrayList<Customer>();
		try {

			Class.forName(driver);
			conn = DriverManager.getConnection(connStr, "user", "***");
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			while (rs.next()) {
				Customer c = new Customer();
				c.setName(rs.getString("fname_l2"));
				c.setNumber(rs.getString("fnumber"));
				c.setLen(rs.getInt("s"));
				l.add(c);
			}
			rs.close();
			stmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return l;
	}
}
 
package a;
public class Customer {
	String number;
	String name;
	int len;
	public int getLen() {
		return len;
	}
	public void setLen(int l) {
		this.len = l;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String numner) {
		this.number = numner;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
 
package a;

import java.util.List;

import com.shine.db.JDBC;

public class Main {

	public static void main(String[] args) {
		List<Customer> data = JDBC.getData();
		for (int i = 0; i < data.size(); i++) {
			Customer c1 = (Customer) data.get(i);
			String s1 = c1.getName();
			int l1 = c1.getLen();
			for (int j = i + 1; j < data.size(); j++) {
				Customer c2 = (Customer) data.get(j);
				String s2 = c2.getName();
				int l2 = c2.getLen();
				double similarDegree = getSimilarityRatio(s1, s2);
				if (similarDegree >= 0.85) {
					System.out.println(s1 + "(" + c1.getNumber() + "),"
							+ s2 + "(" + c2.getNumber() + ")");
				}
//				if (l1 != l2) {
//					double similarDegree = getSimilarityRatio(s1, s2);
//					if (similarDegree >= 0.9) {
//						System.out.println(s1 + "(" + c1.getNumber() + "),"
//								+ s2 + "(" + c2.getNumber() + ")");
//					}
//				}
			}
		}

	}

	private static int compare(String str, String target) {

		int d[][]; // 矩阵

		int n = str.length();

		int m = target.length();

		int i; // 遍历str的

		int j; // 遍历target的

		char ch1; // str的

		char ch2; // target的

		int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1

		if (n == 0) {

			return m;

		}

		if (m == 0) {

			return n;

		}

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

		for (i = 0; i <= n; i++) { // 初始化第一列

			d[i][0] = i;

		}

		for (j = 0; j <= m; j++) { // 初始化第一行

			d[0][j] = j;

		}

		for (i = 1; i <= n; i++) { // 遍历str

			ch1 = str.charAt(i - 1);

			// 去匹配target

			for (j = 1; j <= m; j++) {

				ch2 = target.charAt(j - 1);

				if (ch1 == ch2) {

					temp = 0;

				} else {

					temp = 1;

				}

				// 左边+1,上边+1, 左上角+temp取最小

				d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1]

				+ temp);

			}

		}

		return d[n][m];

	}

	private static int min(int one, int two, int three) {

		return (one = one < two ? one : two) < three ? one : three;

	}

	/**
	 * 
	 * 获取两字符串的相似度
	 * 
	 * 
	 * 
	 * @param str
	 * 
	 * @param target
	 * 
	 * @return
	 */

	public static float getSimilarityRatio(String str, String target) {

		return 1 - (float) compare(str, target)

		/ Math.max(str.length(), target.length());

	}
}
 
分享到:
评论

相关推荐

    字符串相似度比较算法

    在计算机科学领域,字符串相似度比较算法是一种用于评估两个字符串之间相似程度的技术。这些算法广泛应用于文本处理、信息检索、生物信息学等多个领域。当我们要判断两个字符串是否含有相同或相近的信息时,这类算法...

    Oracle字符相似度函数

    Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...

    字符串相似度算法 字符串相似度算法 字符串相似度算法

    * DNA分析:可以使用Levenshtein Distance算法来比较DNA序列的相似度。 * 抄袭检测:可以使用Levenshtein Distance算法来检测抄袭行为。 Levenshtein Distance算法的实现: Levenshtein Distance算法的实现可以使用...

    字符串相似度比较

    在IT领域,字符串相似度比较是一项重要的任务,广泛应用于数据清洗、文本匹配、搜索引擎优化、抄袭检测等多个场景。本文将深入探讨字符串相似度比较的概念、常用算法以及在JavaScript中的实现,同时关注潜在的性能和...

    字符串相似度比较T-2021-7-1.rar

    在IT领域,字符串相似度比较是一项重要的技术,广泛应用于数据清洗、信息检索、文本分类、搜索引擎优化等多个场景。本资料“字符串相似度比较T-2021-7-1.rar”显然聚焦于探讨如何衡量两个字符串之间的相似程度,以及...

    比较两个字符串之间相似度

    用途:可用于论文抄袭检测、DNA等。...算法实现思路:通过对一个字符串插入、删除、替换转变成另一个字符串所需要的步骤称为距离,计算两个字符串之间的距离,从而可以得到两个字符串之间的相似度。

    delphi计算两个字符串相似度源码 Levenshtein算法版

    《使用Delphi实现Levenshtein算法:计算字符串相似度》 在信息技术领域,字符串处理是常见的任务之一,其中计算两个字符串的相似度是尤为重要的一个环节。Levenshtein算法,也称为编辑距离算法,就是用于衡量两个...

    mysql 计算字符串相似度

    在许多应用场景中,我们需要对两个字符串进行相似度比较,比如搜索引擎中的关键词匹配、文本分析中的近义词识别等。MySQL 提供了多种方法来实现字符串相似度的计算,其中一种较为常见的做法是通过自定义函数来实现。...

    DELPHI 计算两个字符串相似度 LCS算法(附源代码)

    总的来说,了解和掌握LCS算法在DELPHI中的实现,有助于你在文本分析和比较任务中有效地评估字符串的相似性。通过学习和实践这个示例,你可以进一步加深对动态规划的理解,并将其应用到其他领域,如生物信息学中的DNA...

    Delphi计算字符串的相似度

    在编程领域,字符串的相似度计算是一个常见的任务,特别是在文本处理、信息检索和自然语言处理中。本篇文章将深入探讨如何在Delphi环境下计算字符串的相似度,以及相关的技术细节。 Delphi是一种基于Object Pascal...

    DELPHI Levenshtein算法 字符串相似度计算(附源码)

    Levenshtein算法,也称为编辑距离算法,是由俄国数学家Vladimir Levenshtein在1965年提出的一种衡量两个字符串相似度的方法。这个算法基于动态规划原理,可以计算出将一个字符串转换成另一个字符串所需要的最少单...

    字符串相似度算法

    在IT领域,字符串相似度算法是一种非常重要的工具,特别是在数据挖掘、信息检索、文本分类以及自然语言处理等应用中。这个小例子旨在介绍如何通过计算字符串间的相似度来进行模糊匹配。我们将探讨几种常见的字符串...

    字符串相似度比对JAVA

    就是一个简单的字符串相似度比较的方法,暂时还不知道有没有更好的方法,大家先看看,有更好的希望分享一下

    C#字符串相似度比较函数

    C#字符串相似度比较函数,可用于对比标书、论文抄袭等检测,也可变相的用于图形相似度比较。

    java 计算字符串相似度

    java 计算字符串相似度

    两个字符串相似度匹配

    在IT领域,字符串相似度匹配是一项重要的技术,广泛应用于数据清洗、文本检索、信息过滤、推荐系统等多个场景。本主题将深入探讨“两个字符串相似度匹配”的概念、方法及其实现。 字符串相似度匹配旨在量化两个字符...

    Java 推荐系统 字符串 余弦相似度 算法

    根据给定的文件信息,本文将详细介绍如何使用Java实现基于字符串的余弦相似度算法,并应用于推荐系统中。 ### 一、引言 在推荐系统领域,为了衡量两个字符串之间的相似性,通常会采用多种算法,其中余弦相似度算法...

    LD的两字符串相似度计算.zip

    接下来,对于矩阵中的每个元素,我们比较当前位置的两个字符,根据是否相等来决定取上一行、上一列或者上一个对角线元素的值加1作为当前元素的值。 在这个"LD的两字符串相似度计算.zip"压缩包中,可能包含了一个名...

    C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度

    C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 中文匹配C#中文文本匹配,字符串匹配,中文词语匹配,计算2个句子相似度 C#中文文本匹配,字符串匹配,中文词语匹配,计算多个句子相似度 C#中文文本...

    字符串相似度比较 海鸥字符串相似度比较 v3.0

    《海鸥字符串相似度比较 v3.0:深入解析与应用》 字符串相似度比较是计算机科学中的一个重要领域,尤其在信息检索、自然语言处理、数据清洗等方面有着广泛的应用。海鸥字符串相似度比较工具v3.0是针对这一需求而...

Global site tag (gtag.js) - Google Analytics